L'exécution de la ligne de Commande .exe avec les paramètres en C#
Je suis en train d'exécuter un programme en ligne de commande avec des paramètres à partir de C#. J'aurais imaginé que la date de cette place et de la réalisation de ce projet serait trivial en C#, mais son avère difficile, même avec toutes les ressources disponibles sur ce site et au-delà. Je suis à une perte donc je vais fournir autant de détails que possible.
Mon approche actuelle et le code est ci-dessous et dans le débogueur la variable de commande a la valeur suivante.
command = "C:\\Folder1\\Interfaces\\Folder2\\Common\\JREbin\\keytool.exe -import -noprompt -trustcacerts -alias myserver.us.goodstuff.world -file C:\\SSL_CERT.cer -storepass changeit -keystore keystore.jks"
Le problème est peut-être la façon dont je suis l'appelant et à la mise en forme de la chaîne de caractères que j'utilise dans cette variable de commande.
Des pensées sur ce qui pourrait être le problème?
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + command);
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
Process process = new Process();
process.StartInfo = procStartInfo;
process.Start();
string result = process.StandardOutput.ReadToEnd();
Console.WriteLine(result);
Je reviens pas d'information ou d'erreur dans la variable résultat une fois que sa se termine.
command
chaîne de caractères entre guillemets doubles. Quelle erreur avez-vous réellement obtenir?Je peux exécuter la commande exacte en ligne de commande avec succès. Peut-être que ces mesures diffèrent légèrement, car j'ai mis le répertoire C:\Folder1\Interfaces\Folder2\Common\JREbin\ et puis l'exécuter keytool.exe -import-noprompt -trustcacerts -alias myserver.nous.goodstuff.monde -fichier C:\SSL_CERT.cer -storepass changeit -keystore de magasin de clés.jks, je reviens pas d'erreur quand cela fonctionne, la console de chaîne est vide malheureusement.
OriginalL'auteur Bryan Harrington | 2016-05-31
Vous devez vous connecter pour publier un commentaire.
Attendez que le processus de fin (laisser faire ses travaux):
à l'aide de votre code, je ne suis pas capable de générer le fichier de clés.jks fichier et de ne pas obtenir de toute erreur.
Essayez à l'aide de chemin absolu: au lieu de
... -keystore keystore.jks
mettre quelque chose comme... -keystore c:\mydir\keystore.jks
, et de vérifier si vous avezc:\mydir\keystore.jks
fichier crééÀ l'aide de chemin d'accès absolu ça ne marche pas mais quand je l'ai utiliser directement keytool puis il travaille. Signifie qu'il est la création de fichier de magasin de clés à l'aide de mon installation de JAVA. Mais je veux générer fichier de clés à l'aide d'autres version du jdk qui est utilisé par mon application. J'ai donné le chemin absolu du JDK, mais ça ne fonctionne pas.
OriginalL'auteur Dmitry Bychenko
J'ai réalisé que j'ai peut-être laissé de côté certains détails que certaines personnes ont besoin de résoudre ce problème à l'avenir.
Ici sont les valeurs des paramètres de la méthode au moment de l'exécution. J'ai eu une certaine confusion quant à ce que l'objet ProcessStartInfo et les Processus nécessaires pour s'correctement je pense que d'autres peuvent aussi bien.
exeDir = "C:\folder1\folder2\bin\keytool.exe"
args = "-supprimer -noprompt -alias de serveur.nous.goodstuff.monde -storepass changeit -keystore de magasin de clés.jks"
Entre Dmitri de l'assistance et de la ressource suivante,
http://www.codeproject.com/Articles/25983/How-to-Execute-a-Command-in-C
J'ai pu bricoler ensemble. Merci!!!!
OriginalL'auteur Bryan Harrington
Quand il s'agit de l'exécution de la CLI de processus à partir de C#, il peut sembler une tâche simple, mais il ya quelques pièges que vous ne pourriez pas le même avis que beaucoup plus tard. Par exemple, les deux actuellement donné les réponses ne fonctionnera pas si le processus de l'enfant écrit suffisamment de données sur la sortie standard, comme expliqué ici.
J'ai écrit une bibliothèque qui simplifie l'utilisation de CLIs en faisant abstraction de la
Process
interaction entièrement, de la résolution de l'ensemble de la tâche par l'exécution d'une méthode - CliWrap.Votre code devrait ressembler à ceci:
OriginalL'auteur Tyrrrz