Aufruf von java über batch
Hallo,
ich weiss nicht, ob an dieser Stelle die Frage richtig plaziert ist.
Ein fremdes Java-Programm (normaler Aufruf: java -Xmx500m -Dfile.encoding=8859_15 -classpath ...) soll aus einer Assembly unter Vb.Net gestartet werden. Bislang gab es unter XP keine Probleme. Verschiedene 64er WIN 7 Rechner wollen das mitunter nicht mehr.
Unter XP ging es so:
Dim p As New Process
Dim psi As New ProcessStartInfo("javaw", JCode)
p.StartInfo = psi
p.Start()
in JCode steht der Text "-Xmx500m -classpath ...
Unter WIN 7 funktioniert das nicht mehr. Ich musste eine BatchDatei schreiben und diese wie folgt aufrufen:
Dim p As New Process
Dim psi As New ProcessStartInfo("cmd")
psi.Arguments = "/c " & PrfModDir & "\prfModStart.bat"
p.StartInfo = psi
p.Start()
Auf manchen Rechnern mit WIN 7 läuft auch das nicht. Startet man die batch durch Doppelklick, ist alles OK. Rufe ich sie aus Vb.Net heraus auf, klappt es nicht. Habe herausgefunden, dass der Aufruf von java fehl schlägt (Befehl falsch geschrieben oder Datei nicht gefunden). Wenn ich in psi die Argumente weglasse und nur das Command-Fenster erscheinen lasse, kann ich hier eintippen: prfModStart.bat und alles verläuft problemlos. Jedoch bekomme ich nun einen Returncode von -1073741510 zurück, der meine Auswerte-Routine durcheinander bringt.
Meine Assembly ist unter 32 Bit kompiliert. Die WIN7-Rechner sind 64 Bit Versionen. Liegt es vielleicht daran? Kann man auf einem Rechnern nebeneinander java 1.8 64 Bit und java 1.7 32 Bit benutzen? Dann würde ich das mal versuchen.
ich weiss nicht, ob an dieser Stelle die Frage richtig plaziert ist.
Ein fremdes Java-Programm (normaler Aufruf: java -Xmx500m -Dfile.encoding=8859_15 -classpath ...) soll aus einer Assembly unter Vb.Net gestartet werden. Bislang gab es unter XP keine Probleme. Verschiedene 64er WIN 7 Rechner wollen das mitunter nicht mehr.
Unter XP ging es so:
Dim p As New Process
Dim psi As New ProcessStartInfo("javaw", JCode)
p.StartInfo = psi
p.Start()
in JCode steht der Text "-Xmx500m -classpath ...
Unter WIN 7 funktioniert das nicht mehr. Ich musste eine BatchDatei schreiben und diese wie folgt aufrufen:
Dim p As New Process
Dim psi As New ProcessStartInfo("cmd")
psi.Arguments = "/c " & PrfModDir & "\prfModStart.bat"
p.StartInfo = psi
p.Start()
Auf manchen Rechnern mit WIN 7 läuft auch das nicht. Startet man die batch durch Doppelklick, ist alles OK. Rufe ich sie aus Vb.Net heraus auf, klappt es nicht. Habe herausgefunden, dass der Aufruf von java fehl schlägt (Befehl falsch geschrieben oder Datei nicht gefunden). Wenn ich in psi die Argumente weglasse und nur das Command-Fenster erscheinen lasse, kann ich hier eintippen: prfModStart.bat und alles verläuft problemlos. Jedoch bekomme ich nun einen Returncode von -1073741510 zurück, der meine Auswerte-Routine durcheinander bringt.
Meine Assembly ist unter 32 Bit kompiliert. Die WIN7-Rechner sind 64 Bit Versionen. Liegt es vielleicht daran? Kann man auf einem Rechnern nebeneinander java 1.8 64 Bit und java 1.7 32 Bit benutzen? Dann würde ich das mal versuchen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 241824
Url: https://administrator.de/contentid/241824
Ausgedruckt am: 04.12.2024 um 08:12 Uhr
16 Kommentare
Neuester Kommentar
Hallo,
Mal versucht, den kompletten Pfad zur Java-EXE zu übergeben?
Man kann beide installieren. Dann sollte man aber beim Aufruf unbedingt den Pfad mit angeben.
Gruß,
Gersen
Habe herausgefunden, dass der Aufruf von java fehl schlägt (Befehl falsch geschrieben oder Datei nicht gefunden).
Mal versucht, den kompletten Pfad zur Java-EXE zu übergeben?
Kann man auf einem Rechnern nebeneinander java 1.8 64 Bit und java 1.7 32 Bit benutzen?
Man kann beide installieren. Dann sollte man aber beim Aufruf unbedingt den Pfad mit angeben.
Gruß,
Gersen
Hallo.
Das ist ein VisualBasic-Script, kein Batch!
Wieso so umständlich?
Das Programmverzeichnis ist höchstwahrscheinlich nicht in deiner
Gruß,
@Snowman25
ich weiss nicht, ob an dieser Stelle die Frage richtig plaziert ist.
Ein fremdes Java-Programm (normaler Aufruf: java -Xmx500m -Dfile.encoding=8859_15 -classpath ...) soll aus einer Assembly unter
Vb.Net gestartet werden. Bislang gab es unter XP keine Probleme. Verschiedene 64er WIN 7 Rechner wollen das mitunter nicht mehr.
Unter XP ging es so:
Dim p As New Process
Dim psi As New ProcessStartInfo("javaw", JCode)
p.StartInfo = psi
p.Start()
in JCode steht der Text "-Xmx500m -classpath ...
Unter WIN 7 funktioniert das nicht mehr. Ich musste eine BatchDatei schreiben und diese wie folgt aufrufen:
Dim p As New Process
Dim psi As New ProcessStartInfo("cmd")
psi.Arguments = "/c " & PrfModDir & "\prfModStart.bat"
p.StartInfo = psi
p.Start()
Ein fremdes Java-Programm (normaler Aufruf: java -Xmx500m -Dfile.encoding=8859_15 -classpath ...) soll aus einer Assembly unter
Vb.Net gestartet werden. Bislang gab es unter XP keine Probleme. Verschiedene 64er WIN 7 Rechner wollen das mitunter nicht mehr.
Unter XP ging es so:
Dim p As New Process
Dim psi As New ProcessStartInfo("javaw", JCode)
p.StartInfo = psi
p.Start()
in JCode steht der Text "-Xmx500m -classpath ...
Unter WIN 7 funktioniert das nicht mehr. Ich musste eine BatchDatei schreiben und diese wie folgt aufrufen:
Dim p As New Process
Dim psi As New ProcessStartInfo("cmd")
psi.Arguments = "/c " & PrfModDir & "\prfModStart.bat"
p.StartInfo = psi
p.Start()
Das ist ein VisualBasic-Script, kein Batch!
Wieso so umständlich?
Das Programmverzeichnis ist höchstwahrscheinlich nicht in deiner
%PATH%
-Variable vorhanden. Benutze den kompletten Pfad zur Java.exe.Meine Assembly ist unter 32 Bit kompiliert. Die WIN7-Rechner sind 64 Bit Versionen.
Dann brauchst du ein 32-Bit Java.Liegt es vielleicht daran? Kann man auf einem Rechnern nebeneinander java 1.8 64 Bit und java 1.7 32 Bit benutzen?
Ja kann man. Aber ACHTUNG! Die 64-Bit Version von Java hat keinen Auto-Updater.Gruß,
@Snowman25
Es gibt alles - es kommt auf die Umgebungen an.
Es gibt unter Windows den Befehl "where" (Pendant zum Linux-"which").
Ein
gibt den ersten Fund anhand der Reihenfolge in der PATH-Variablen zurück. Bei mir: C:\Windows\System32\java.exe
Es gibt manchmal die System-Variable "JAVA_HOME".
Es gibt den Registry-Key HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\{hier kommt evtl. noch eine Versionsnummer}\JavaHome.
Gruß,
Gersen
Es gibt unter Windows den Befehl "where" (Pendant zum Linux-"which").
Ein
where java.exe
Es gibt manchmal die System-Variable "JAVA_HOME".
Es gibt den Registry-Key HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\{hier kommt evtl. noch eine Versionsnummer}\JavaHome.
Gruß,
Gersen
Du kannst die aktuelle Versionsnummer für den o.g. Registry-Zweig finden - der steht auch in der Registry.
Und zwar unter HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\CurrentVersion.
Mit dem Wert suchst Du dann HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\{Ergebnis aus oben}\JavaHome.
Und zwar unter HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\CurrentVersion.
Mit dem Wert suchst Du dann HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\{Ergebnis aus oben}\JavaHome.
Zitat von @Gersen:
gibt den ersten Fund anhand der Reihenfolge in der PATH-Variablen zurück. Bei mir: C:\Windows\System32\java.exe
where java.exe
gibt den ersten Fund anhand der Reihenfolge in der PATH-Variablen zurück. Bei mir: C:\Windows\System32\java.exe
Dann gäbe es aber das Problem nicht, dass java nicht aufgerufen werden kann.
Sobald es in der PATH steht kann man ja direkt
java.exe
aufrufen.Es gibt den Registry-Key HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\{hier kommt evtl. noch eine
Versionsnummer}\JavaHome.
^ thisVersionsnummer}\JavaHome.
Speichere folgenden Code (erfragt einen Zahlenwert und verlässt die Anwendung mit dem Zahlenwert als Returncode) in einer Datei namens "ExitCode.java" (auf dem Rechner muss zumindest die JRE installiert sein):
Das kompilierst Du über die Kommandozeile im Verzeichnis der Datei mittels
Du erhältst eine Datei "ExitCode.class".
Die kannst Du in Deiner Batch testweise einbauen.
(etwa -wenn die Datei unter C:\temp liegt-)
Gruß,
Gersen
import java.util.Scanner;
class ExitCode
{
public static void main(String args)
{
Scanner scan = new Scanner(System.in);
System.out.print("ExitCode eingeben: ");
int i = scan.nextInt();
System.exit(i);
}
}
javac ExitCode.java
Die kannst Du in Deiner Batch testweise einbauen.
java -cp {Pfad zum Verzeichnis der ExitCode.class} ExitCode
java -cp C:\temp ExitCode)
Gruß,
Gersen