Anwendungsanwendung von process.start () erhält keine Argumente
-
20-12-2019 - |
Frage
mit c #, ich versuche, Befehlszeilenargumente mit process.start ():
zu einem neuen Prozess weiterzuleiten. generasacodicetagpre.meine c-Anwendung Demo.exe Nur Echos Die Befehlszeilenargumente:
generasacodicetagpre.Wenn ich meine Anwendung von cmd.exe starte, bekomme ich angemessene Ausgabe:
generasacodicetagpre.Wenn ich die C # -Anwendung verwende, ist das einzige, was ich bekomme, ist das Pfadargument bei Argv [0]:
generasacodicetagpre. Task Manager zeigt Befehlszeilenargumente für jede Methode zum Starten von Demo.exe:
Warum erhält meine C-Anwendung nicht die Befehlszeilenargumente von der C # -Anwendung?
Ausgang:
generasacodicetagpre.ist es möglich, dass die C-App die Args als eine Zeichenfolge empfängt, jedoch nach dem ersten \ im Pfad alles ignoriert?
edit: Ich habe unten eine Antwort hinzugefügt. Es ist eine Problemumgehung, aber ich bin mir nicht sicher, welche Sache meines Problems ist.
Lösung
Ich konnte Ihr Problem reproduzieren. Ich hatte keinen Zugriff auf C, also habe ich C ++ in Visual Studio 2013 verwendet. Es scheint, dass C # mit startinfo die Argumente als
also, wenn Sie es den anderen Weg getan haben, mit "cmd.exe" anzurufen, um "/ c demo.exe eins zwei drei" cmd nicht passiert String als unicode . Das ist meine Hypothese, Angesichts der Ergebnisse, die ich bekomme.
Verwandte Frage auf stackoverflow
Der C ++ - Code, der die Argumente korrekt (tprintf) angezogen hat und falsch (printf)
generasacodicetagpre.}
Dies ist der C # -Code, der es aufgerufen hat
generasacodicetagpre. Nur für Informationszwecke, C #, die das C # anruft, hat auch gearbeitet. Die mutmaßliche Ursache ist wiederum, dass C # die Argumente an Ihr C-Programm als
Der C # -Code, der als das aufgerufene Ziel funktioniert.
generasacodicetagpre.Andere Tipps
Ich bin heute zurückgekommen und habe ein Problemumgeheimnis.Ich verstehe nicht, warum mein ursprünglicher Versuch nicht funktioniert hat.
Hier ist der Unterschied auf der Befehlszeile zwischen dem Tippen von demo.exe und "demo.exe".
generasacodicetagpre.Der Prozess.Start () Anruf schien die Sorte "Demo.exe" zu tun.
funktioniert nicht:
generasacodicetagpre.funktioniert:
generasacodicetagpre.Hat jemand irgendwelche Ideen, warum die erste Methode nicht funktioniert?
Versuchen Sie es mit
generasacodicetagpre.