Muss ich beim Ausführen eines anderen Programms in C # die Befehlszeile in der Registrierung selbst analysieren?

Aus der Registrierung erhalte ich für einen bestimmten Dateityp eine Zeichenfolge, die etwa Folgendes enthält:

"C:\Program Files\AppName\Executable.exe" /arg1 /arg2 /arg3

oder manchmal:

"C:\Program Files\AppName\Executable.exe" /arg1 /arg2 /arg3 "%1"

Muss ich diesen String selbst analysieren, damit ich dieses Programm ausführen und einen Dateinamen als Parameter übergeben kann (von dem ich weiß, dass er akzeptiert wird), oder gibt es eine Laufzeitklasse, die dies für mich erledigt? Beachten Sie, dass ich nicht nach der Behandlung des Unterschieds zwischen den beiden in Bezug auf "% 1" frage, sondern den Namen der ausführbaren Datei abtrennen und die Befehlszeilenargumente separat abrufen muss.

Ich habe versucht, nur den vollständigen Pfad und den Namen der Datei anzufügen, um sie in die oben angegebene Zeichenfolge einzufügen und den gesamten Shebang an Process.Start zu übergeben. Natürlich wird nur der Dateiname als einziges Argument erwartet, dies ist jedoch nicht der Fall Arbeit.

Grundsätzlich müsste das oben beschriebene manuell gemacht werden:

Process proc = new Process();
proc.StartInfo.FileName = @"C:\Program Files\AppName\Executable.exe";
proc.StartInfo.Arguments = "/arg1 /arg2 /arg3 \"" + fileName + "\"";
proc.Start();

Ich habe versucht mitUseShellExecute, aber das hat nicht geholfen. Irgendwelche anderen Hinweise?

Um klar zu sein, ich möchte dies:

String commandPath = ReadFromRegistry();
String fullCommand = commandPath + " " + fileName; // assuming not %1
Process.Start(fullCommand); // <-- magic happens here

Antworten auf die Frage(4)

Ihre Antwort auf die Frage