11
votes

Équivalent à traiter.Start () sans arguments distincts

J'écris une application simple qui est nécessaire pour exécuter des commandes arbitraires, par exemple: xxx

processus.start () serait parfait, sauf que cela nécessite que les arguments soient donnés en tant que paramètre distinct . Au départ, je pensais pouvoir simplement diviser la corde sur le premier caractère d'espace, mais que si le chemin exécutable est cité et contient des espaces? Y a-t-il quelque chose comme Process.Start () qui vous permet de lui donner une chaîne, avec ou sans arguments, et il suffit de l'exécuter comme s'il était collé à une invite de commande?


1 commentaires

@ Ken2k est correct, BTW Ceci a été posé et répondit avant: Stackoverflow.com/a/1561550/495455


3 Réponses :


6
votes

Pourquoi ne faisiez-vous pas tout simplement tout à travers cmd / c? XXX


4 commentaires

Pourquoi je ne suis-je pas? Tout d'abord, cela semble terriblement hacky. Avoir l'invite de commande agir comme un intermédiaire peut entraîner des problèmes de communication avec le processus que vous souhaitez exécuter; Pensez à STDIN / STDOUT / STDERR et CODES DE RETOUR. De plus, vous devez vous soucier de l'échapper correctement à la commande. C'est normalement un signe d'avertissement qu'il y a une meilleure façon. Je suis plus familier avec le codage de Linux où ce genre de choses est trivial car c'est une tâche aussi fondamentale et commune.


D'accord, cela semble hacrain, mais j'ai passé un moment à la recherche d'une alternative plus propre et que vous ne trouvez rien. Les options sont ensuite pour analyser la commande vous-même pour séparer l'exécutable des paramètres ou, peut-être plus évidemment, modifier votre application pour capturer des paramètres séparément de la commande. Si vous voulez simplement obtenir un emploi, l'utilisation de la cmd peut être une bonne option.


Cela semble juste comme une telle surveillance fondamentale. Le lancement d'un programme d'un autre est une chose aussi primitive, elle devrait être super triviale. Avoir l'exécutable et les arguments comme une seule chaîne rendraient le programme beaucoup plus simple. Le programme que j'écris est essentiellement juste un processeur de script d'ouverture de session, de sorte que tout cela a pour but de lancer d'autres scripts et programmes qui sont lus à partir d'un fichier de configuration.


Il est pas un oubli. C'est la base de ce qu'est une coquille Parser .



5
votes

Appelez simplement le CreateProcess fonction directement: xxx


1 commentaires

Très intéressant de voir que l'API native accepte une chaîne de commandement, mais laissez-moi ajouter que la question pose un peu trop ... À ce stade, on peut également utiliser des opérateurs de redirection de ligne de commande :-)



1
votes

Vous pouvez utiliser la classe de la classe pour évaluer la chaîne de ligne de commande et utiliser processus.start comme ceci: xxx

quelque chose Comme cela devrait le faire, mais les codes ci-dessus ne sont pas testés ...


0 commentaires