Hier ist die Situation. Wir haben eine sehr alte COBOL-Exe, die nur unter Windows XP läuft. Um diese exe auszuführen, haben wir eine virtuelle XP-Maschine eingerichtet. Jede Woche führt der Benutzer eine Reihe von BAT-Dateien aus.C# Windows bildet App mit process.start auf Windows XP Virtuelle Maschine
Ich versuche, eine C# Windows-App zu schreiben, die auf der VM ausgeführt wird und dann die COBOL-Exe ausführen. Der Plan ist, mit Process.Start die EXE aufzurufen. Alles funktioniert gut, wenn MY WINDOWS C# EXE im selben Verzeichnis wie die COBOL-Exe läuft.
Wenn ich die C# exe aus dem Ordner verschieben, bekomme ich einen schlechten Return-Code und der Cobol wird nicht ausgeführt.
Ohne ins Detail zu gehen, möchte ich den COBOL von außerhalb des Ordners ausführen können. Der Grund ist, dass wir mehrere regionale Büros haben und jedes hat seinen eigenen Ordner und eine eigene Kopie der cobol exe in jedem Ordner. Das Ziel ist, dass der Benutzer jedes regionale Büro auswählen kann und dann das C# -Programm jedes Programm in jedem Verzeichnis ausführt.
Zusammenfassend. Wenn ich C# innerhalb des Ordners ausführen, in dem die COBOL-Exe lebt, FUNKTIONIERT IT. ABER, wenn ich C# außerhalb dieses Ordners verschiebe, tut es nicht
Ich hoffe, das alles macht Sinn. Hier sind einige weitere Details:
- Erstellt in Visual Studio 2012 als C# Windows-Anwendung
- Platform Ziel x86 (I habe auch Jede CPU)
- Target Framework .NET Framework 4
- COBOL Wenn ich die exe ist Mikrofokus von 1997 (ja, ich weiß. Wir müssen es loszuwerden)
- VM Windows XP
- ist ändern Notepad es läuft gut 012.351.
Wenn ich starte starten von Windows und fügen Sie folgendes ein: K: \ AMSapp \ MYTESTFOLDER \ AMSBLD.exe läuft es gut.
C# -Code für Schaltfläche klicken Ereignis (Anmerkung: wenn ich die Dateinamen auf diesen K zu ändern:. \ AMSapp \ MYTESTFOLDER \ AMSBLD.exe i die gleichen Ergebnisse Es ist nicht läuft) Auch die Nachrichtenbox zeigt 255 für einen Rückkehrcode, wenn es nicht funktioniert. Wenn das C# -Programm innerhalb des Cobol-Ordners verschoben wird, wird eine Null zurückgegeben.
private void button1_Click(object sender, EventArgs e) { try { int exitCode; Process process = new Process(); process.StartInfo.FileName = @"\\SERVER23021\PRODDATA\AMSapp\MYTESTFOLDER\AMSBLD.exe"; process.StartInfo.ErrorDialog = true; process.Start(); process.WaitForExit(1000 * 60 * 5); // Wait up to five minutes. exitCode = process.ExitCode; MessageBox.Show("My exit code = " + exitCode.ToString()); MessageBox.Show("my path and file name: " + process.StartInfo.FileName); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
Try 'process.StartInfo.WorkingDirectory = Path.GetFullPath (process.StartInfo.FileName);' –
klingt eher wie Sie eine Ausführungsberechtigungsproblem haben. Ich würde schauen, auf welches Konto Sie diese unter ausführen und ob dieses Konto beide Anwendungen ausführen darf. Wenn Sie sich über Grenzen hinweg bewegen, müssen Sie sich möglicherweise auch die Identität ansehen, wenn Sie den Anruf tätigen. – Kirby
>>> DIESE GEARBEITET. Zuerst verwendete es nicht den vollständigen Netzwerkpfad. Ich änderte es in K: \ dann den Dateipfad. Auch ich anstelle von Path.GetFullPath (process.StartInfo.FileName) Ich habe nur fest den K: \ Pfad minus den tatsächlichen Dateinamen und es funktionierte. Vielen Dank. –