Frage

Ich bin ein Process mit wie diese eine Datei mit einer Textdatei patchen (durch cmd.exe):

app.exe temp.txt patch.ips

Ich schrieb diesen Code:

ProcessStartInfo P = new ProcessStartInfo("app.exe");  
P.Arguments = "temp.txt " + _patchpath;  
P.CreateNoWindow = true;  
P.UseShellExecute = false;  
P.RedirectStandardOutput = true;  
Process.Start(P);

app.exe und temp.txt meine Anwendung Pfad relativ sind (Anmerkung: app.exe ist nicht der Name meiner C # -Anwendung, es ist nur ein Programm, das ich für den Prozess bin mit), aber _patchpath ist ein absolute Pfad wie D: \ bla \ file.ips. Das Problem ist, wird der Prozess nicht funktioniert (_patchpath sollte mit der Datei temp.txt gepatcht werden), wenn sein absoluten, aber funktioniert, wenn sein Verhältnis zu meinem App-Verzeichnis. Warum ist das und wie kann ich es beheben?

Wenn ich brauche klar zu sein, lassen Sie es mich wissen.

War es hilfreich?

Lösung

Das Problem ist sehr wahrscheinlich, dass die genannte Anwendung (app.exe) nicht um die Parameter zu verstehen. Der beste Weg, um dieses Problem zu lösen wäre app.exe mit den Parametern zu debuggen, dass Sie in dem Fall liefern sie nicht funktionieren. Versuchen Sie, die Argumente in dem Debugger setzen für app.exe exakt die gleichen Parameter wie der ausgefallenen Fall, und prüfen Sie die Variablen, die resultieren aus den Argumenten Parsen.

Andere Tipps

Die übliche Vorgehensweise zu Debug-Probleme wie diese ist es, den Debugger zu verwenden. Kopieren / Einfügen diesen in den Main () -Methode der Quelldatei für ‚app.exe‘:

        System.Diagnostics.Debugger.Break();

Sobald APP.EXE zu laufen beginnt, erhalten Sie einen Dialog, die Sie einen Debugger holen können. Von dort aus sollten Sie nicht viel Mühe, herauszufinden, warum es nicht funktioniert.

Wenn Sie den Quellcode für app.exe nicht, dann haben Sie diese zu durchdenken müssen. einen relativen Pfad wie „app.exe“ oder „temp.txt“ Verwendung ist immer Schwierigkeiten. Ein klassischer Fehlermodus wird unter Verwendung eines Openfile der Benutzer zu lassen, die _patchpath Wert holen. Wenn der RestoreDirectory Eigenschaft Dialog nicht auf True gesetzt, dann ändert es Ihrem Programm Standardverzeichnis auf den Pfad der Patch-Datei. Und weder app.exe noch temp.txt kann fournd mehr sein.

Sie sich gegen diese Schützen durch die Programmierung defensiv:

        var myPath = System.Reflection.Assembly.GetEntryAssembly().Location;
        var homeDir = System.IO.Path.GetDirectoryName(myPath);
        var appPath = System.IO.Path.Combine(homeDir, "app.exe");
        var tempPath = System.IO.Path.Combine(homeDir, "temp.txt");
        ProcessStartInfo P = new ProcessStartInfo(appPath);
        P.WorkingDirectory = homeDir;
        P.Arguments = string.Format("\"{0}\" \"{1}\"", tempPath, _patchpath);
        // etc...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top