Запуск приложения CLI программно не работает в зависимости от аргументов - PullRequest
2 голосов
/ 19 мая 2010

Я пытаюсь запустить plink.exe (PuTTY Link, утилита командной строки / версия PuTTY) из приложения C # для установки обратного туннеля SSH, , но он больше не работает, как только я передаю правильный параметры .

Что это значит? Следующее работает должным образом: оно открывает окно командной строки, отображает, что я забыл передать пароль для выхода из аргумента -pw, и показывает приглашение. Я знаю, что он получил аргументы, так как он специально запрашивает одну вещь, которую я не предоставил.

Uri uri = omitted;
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "cmd";
info.Arguments = "/k \"C:\\Program Files (x86)\\PuTTY\\plink.exe\" -R 3389:" + uri.Host + ":" + uri.Port + " -N -l username -pw"; // TODO pwd
Process p = Process.Start(info);

Я пытался сделать то же самое, вызвав plink.exe напрямую вместо cmd.exe /k, но окно закрывается сразу, что нежелательно для поиска ошибок.

НО, когда я передаю пароль в аргументах, plink.exe отображает справку программы (показывает доступные параметры) и завершает работу:

Uri uri = omitted;
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "cmd";
info.Arguments = "/k \"C:\\Program Files (x86)\\PuTTY\\plink.exe\" -R 3389:" + uri.Host + ":" + uri.Port + " -N -l username -pw secretpassword";
Process p = Process.Start(info);

Нет указаний на отсутствующие параметры. Оба варианта cmd /k и plink.exe не работают (последний сразу закрывается, поэтому информации о различном поведении нет).

Когда я запускаю приложение из панели запуска Windows 7 с идентичными параметрами, оно открывает окно cmd.exe и устанавливает соединение в соответствии с запросом.

Что не так? Есть ли способ plink.exe замечать, что он не работает в реальной оболочке? Если да, то как я могу его обойти, как в «меню« Пуск »?»

Я надеюсь, что этот вопрос верен для SO, поскольку он, хотя и специально для отдельного приложения, вращается вокруг его успешного программного запуска.

1 Ответ

0 голосов
/ 19 мая 2010

Да, эта веб-страница предполагает, что Putty начинает нервничать по поводу неинтерактивных входов в систему. Если предложенный обходной путь не помогает, я рекомендую задать вопросы по этому поводу на форуме поддержки Putty или на сайте Superuser.com. В противном случае он не имеет ничего общего с классом Process или языком C #.

...