Exécuter la ligne de commande à l'aide de C#
Tout ce que je suis en train de faire est d'envoyer une commande qui s'ouvre d'un modèle à l'program.exe
Censé être super simple!
Ex:
"C:\Program Files (x86)\River Logic\Enterprise Optimizer 7.4 Developer\EO74.exe" "C:\PauloXLS\Constraint Sets_1.cor"
La ligne ci-dessus fonctionne bien si collé sur la fenêtre d'invite de commande.
Toutefois, lorsque vous essayez de passer la même chaîne de caractères exacte sur mon code, il reste bloqué sur C:\Program
string EXE = "\"" + @tbx_base_exe.Text.Trim() + "\"";
string Model = "\"" + @mdl_path.Trim()+ "\"";
string ExeModel = EXE + " " + Model;
MessageBox.Show(ExeModel);
ExecuteCommand(ExeModel);
ExeModel montre te suit sur la même ligne de Visual Studio:
"\"C:\\Program Files (x86)\\River Logic\\Enterprise Optimizer 7.4 Developer\\EO74.exe\" \"C:\\PauloXLS\\Constraint Sets_1.cor\""
Me semble que c'est la chaîne j'ai besoin d'envoyer dans la méthode suivante:
public int ExecuteCommand(string Command)
{
int ExitCode;
ProcessStartInfo ProcessInfo;
Process Process;
ProcessInfo = new ProcessStartInfo("cmd.exe", "/K " + Command);
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = true;
Process = Process.Start(ProcessInfo);
Process.WaitForExit();
ExitCode = Process.ExitCode;
Process.Close();
return ExitCode;
}
Choses que j'ai essayé:
- Passer une seule commande à la fois (comme prévu), mais pas une option puisque le modèle de fichier va s'ouvrir avec une autre version du logiciel.
- Essayé de la réduire
- Essayé avec @ avec \"
Quelqu'un peut voir toute erreur évidente? Merci.
Pourquoi êtes-vous à l'aide de
Oui, le Processus d'utilisation.Commencer à invoquer le réel EXE que vous voulez. Qui permettra d'éviter tout problème que vous pourriez avoir où vous auriez autrement besoin de "double échappement" caractères spéciaux.
Un hassel existe de toute façon. Soit vous avez pour échapper à la chaîne de commande pour passer en argument cmd.exe ou, vous devez analyser la commande d'origine pour séparer le nom de fichier de l'argumentation afin de les transmettre au Processus.Démarrer, ce qui nécessite d'être transmis séparément. Si vous commencez avec de les séparer, c'est facile. Toutefois, si vous êtes donné une chaîne de commande unique avec deux nom de fichier et d'arguments, il semble moins compliqué à échapper à la chaîne et à transmettre à cmd.exe que c'est pour essayer de séparer le nom du fichier à partir des arguments en vérifiant cité des noms ou des espaces.
cmd.exe /K ...
au lieu de simplement en appelant directement le programme? Qui vous permettra d'éviter les tracas d'avoir à s'échapper des espaces...Oui, le Processus d'utilisation.Commencer à invoquer le réel EXE que vous voulez. Qui permettra d'éviter tout problème que vous pourriez avoir où vous auriez autrement besoin de "double échappement" caractères spéciaux.
Un hassel existe de toute façon. Soit vous avez pour échapper à la chaîne de commande pour passer en argument cmd.exe ou, vous devez analyser la commande d'origine pour séparer le nom de fichier de l'argumentation afin de les transmettre au Processus.Démarrer, ce qui nécessite d'être transmis séparément. Si vous commencez avec de les séparer, c'est facile. Toutefois, si vous êtes donné une chaîne de commande unique avec deux nom de fichier et d'arguments, il semble moins compliqué à échapper à la chaîne et à transmettre à cmd.exe que c'est pour essayer de séparer le nom du fichier à partir des arguments en vérifiant cité des noms ou des espaces.
OriginalL'auteur MicroSumol | 2011-03-03
Vous devez vous connecter pour publier un commentaire.
Pourquoi êtes-vous en ouvrant une invite de commande (cmd.exe)? Il suffit de passer le nom de l'exécutable.
Mon point est... d'une manière ou d'une autre, vous allez avoir à passer par certains tracas pour obtenir un arbitraire de commande à exécuter. Vous êtes soit va devoir échapper à la commande pour passer à cmd.exe ou vous allez avoir à analyser la commande de séparer l' (exécutable) de nom de fichier à partir des arguments à transmettre à traiter.Commencer. Il est sans doute moins compliqué (compte tenu de l'utilisateur d'entrée de chaîne de ligne de commande) pour échapper à l'ensemble de la chaîne et le transmettre à l'cmd.exe que c'est pour essayer d'isoler le nom de fichier de l'argumentation, puisque le nom de fichier peut être entourées de guillemets ou peut contenir des espaces, etc.
OriginalL'auteur Erno de Weerd
C'est assez simple. Il vous suffit de créer une ligne de commande de l'objet, puis l'écriture, puis de l'executer vous lire en retour de l'aide de SR.ReadToEnd():
Sûr que c'est simple, il suffit de copier et coller... 😉 Sérieusement, pas trop mal. Toutes les commandes sont juste la configuration de vos préférences personnelles. Si vraiment il y a seulement une poignée de commandes qui sont effectivement nécessaires. Bien crée des programmes en ligne de commande.
OriginalL'auteur Davido