Question

Le sujet ne dit pas grand-chose car il n’est pas facile de poser des questions en une ligne. Je dois exécuter quelques programmes que je lis dans le registre. Je dois lire dans un champ où quelqu'un sauvegarde tous les chemins et arguments.
J'utilise System.Diagnostics.ProcessStartInfo pour définir le nom du programme et ses arguments, mais j'ai trouvé une grande variété d'arguments que je dois analyser pour enregistrer le fichier exécutable du processus dans un champ et ses arguments pour l'autre.

Existe-t-il un moyen d'exécuter la chaîne entière telle quelle?

Était-ce utile?

La solution

J'ai abordé ce problème de la même manière que l'affiche ci-dessus, en utilisant cmd.exe avec les informations de démarrage du processus.

Process myProcess = New Process;
myProcess.StartInfo.FileName = "cmd.exe";
myProcess.StartInfo.Arguments = "/C " + cmd;
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProcess.StartInfo.CreateNoWindow = True;
myProcess.Start();
myProcess.WaitForExit();
myProcess.Close();

cmd / c exécute la commande, puis se termine. WaitForExit mettra fin au processus s’il dure trop longtemps.

Autres conseils

Il y en a plusieurs, en fait.

  1. Vous pouvez appeler cmd.exe avec / C [votre ligne de commande] comme arguments. Cela provoque le traitement de votre commande par cmd.exe, puis vous quittez.
  2. Vous pouvez écrire la commande dans un fichier de commandes et le lancer.

Et bien sûr, il y a l'approche que vous prenez maintenant, à savoir l'analyse de la ligne de commande.

When ' UseShellExecute ' est non défini, System.Diagnostics.Process appelle CreateProcess ou CreateProcessAsUser pour démarrer un programme (il utilise la seconde un si vous spécifiez un utilisateur / domaine / mot de passe). Et ces deux appels peuvent prendre la commande et le fichier comme un seul argument. À partir de MSDN:

  

Le paramètre lpApplicationName peut être   NUL. Dans ce cas, le nom du module   doit être le premier blanc   jeton délimité par un espace dans la   lpCommandLine string. ...

Le nom de l'application lp est mappé sur ProcessStartInfo.Filename et lpCommandLine est mappé sur Arguments. Donc, vous devriez être en mesure d'aller juste:

var processStartInfo = new ProcessStartInfo()
{
    UseShellExecute = false,
    Arguments = cmd
};
Process.Start(processStartInfo);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top