Benutzer mit den meisten Antworten
Aufruf Fremd-Exe

Frage
-
Hallo
Ist es in einer für x86 kompilierten Net-Anwendung (Jet!) grundsätzlich
möglich, auf einem Windows 7 64-Bit-Rechner eine Fremd-Exe (in 32- oder
64-Bit Version), synchron oder asynchron aufzurufen?Konkret: Aufruf der FFmpeg.exe (http://ffmpeg.org/ffmpeg.html).
Auf XP Sp3 (32-Bit) funktioniert die .exe (32-Bit, Juni-Release) mit
synchronem wie mit asynchronem Aufruf bestens.Danke und Gruß
Josef Morlo
Antworten
-
Ich habe mal folgenden Cod getestet:
Dim psi As New ProcessStartInfo() psi.FileName = "test64.exe" psi.Arguments = "MyParam" psi.RedirectStandardError = True Dim p As New Process() p.StartInfo = psi p.Start() Dim Code As Integer = p.ExitCode
Dieser hat als 32 Bit kompiliert unter x64 Windows 7 mit der Anwendung test64.exe im Debug-Verzeichnis (x64) auch funktioniert. Ich konnte entsprechend "MyParam" in den Startparametern auslesen. Nach der beendigung der test64.exe bekam ich meine eingegebene Zahl zurückgeliefert.
Diesen Code muss die Main-Methode als Rückgabewert haben. Den Stream müsstest du natürlich auch auslesen können, habe ich jetzt aber nicht getestet.
Was Jet ist, wusste ich bis heute nicht, ich habe das Problem mit der Skype4COM API, die auch einen Zugriff aus einer 32 Bit Assembly benötigt. Ich löste das Problem mit den Rückgabecodes etc.
Koopakiller - http://koopakiller.ko.ohost.de/
- Als Antwort markiert Josef Morlo Montag, 16. Juli 2012 12:01
Alle Antworten
-
Hallo,
wenn du mit starten den Aufruf der EXE über die Klasse Process meinst, so funktioniert das.
Allerdings eine 64Bit Assembly in einem 32Bit Programm zu referenzieren geht leider nicht (musste leider selbst die Erfahrung machen).Was genau bedeutet "(Jet!)" ?
Koopakiller - http://koopakiller.ko.ohost.de/
-
Hallo,
und zunächst mal danke für deine AntwortKoopakiller schrieb:
wenn du mit starten den Aufruf der EXE über die Klasse Process <http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx> meinst, so funktioniert das.
genau, das hab ich gemeint.
Vielleicht kannst Du mir auch sagen, ob der Aufruf der Fremd-Exe auch mit
Parameter-Übergaben einschließlich Rückgaben funktioniert, also von
x86-Kompilat zu 64-Bit-Rechner und zurück. Also etwa des Typs (gekürzt):'Parametrisierte Übergabe
Dim cmd As String = _
"-i " & _
<Pfad1> & " " & _
VideoCodecCopy & " " & _
AudioCodecCopy & " " & _
"<Double1> " & _
"<Double2> " & _
"-t " & _
"<Double3>" & " " & _
"-y " & <Pfad2> [...]Sub StartProcess(ByVal cmd As Object)
[...]
Dim psi As New System.Diagnostics.ProcessStartInfo
psi.FileName = <Pfad zur Exe>
psi.Arguments = cmd.ToString
psi.RedirectStandardError = True
Dim proc As New System.Diagnostics.Process()
proc.StartInfo = psi
proc.Start()'Rückgabe an Formobjekt
Dim result As String = proc.StandardError.ReadToEnd()
[...]
If TextBox1.InvokeRequired Then
Dim d As New SetTextDel(AddressOf SetText)
TextBox1.Parent.Invoke(d, New Object() {result})
Else
TextBox1.Text = result
End If
End SubWas genau bedeutet "(Jet!)" ?
Mit ‚Jet’ ist die windowseigene Datenbank (.mdb) gemeint
(http://de.wikipedia.org/wiki/Microsoft_Jet_Engine). Dafür muss ich nämlich
ausdrücklich für x86 kompilieren. Ansonsten wär’s ja kein Problem.Danke und Gruß
Josef Morlo
-
Ich habe mal folgenden Cod getestet:
Dim psi As New ProcessStartInfo() psi.FileName = "test64.exe" psi.Arguments = "MyParam" psi.RedirectStandardError = True Dim p As New Process() p.StartInfo = psi p.Start() Dim Code As Integer = p.ExitCode
Dieser hat als 32 Bit kompiliert unter x64 Windows 7 mit der Anwendung test64.exe im Debug-Verzeichnis (x64) auch funktioniert. Ich konnte entsprechend "MyParam" in den Startparametern auslesen. Nach der beendigung der test64.exe bekam ich meine eingegebene Zahl zurückgeliefert.
Diesen Code muss die Main-Methode als Rückgabewert haben. Den Stream müsstest du natürlich auch auslesen können, habe ich jetzt aber nicht getestet.
Was Jet ist, wusste ich bis heute nicht, ich habe das Problem mit der Skype4COM API, die auch einen Zugriff aus einer 32 Bit Assembly benötigt. Ich löste das Problem mit den Rückgabecodes etc.
Koopakiller - http://koopakiller.ko.ohost.de/
- Als Antwort markiert Josef Morlo Montag, 16. Juli 2012 12:01
-
Hallo,
Koopakiller schrieb:Ich habe mal folgenden Cod getestet:
[...]
Dieser hat als 32 Bit kompiliert unter x64 Windows 7 mit der Anwendung test64.exe im Debug-Verzeichnis (x64) auch funktioniert. Ich konnte entsprechend "MyParam" in den Startparametern auslesen. Nach der beendigung der test64.exe bekam ich meine eingegebene Zahl zurückgeliefert.
Das hört sich sehr erfreulich für mich an :-) Dann ist ja der
eingeschlagene Weg nicht ganz so falsch :-)Vielen Dank für Deine Mühe mit dem Testcode und die kompetente Anwort
Gruß Josef Morlo