2010-05-19 2 views
2

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

Что это значит? Следующее работает так, как ожидалось: открывает окно командной строки, показывает, что я забыл передать пароль для вывода аргументов -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, поскольку он, хотя специально для одного приложения, вращается вокруг запуска его программно.

+0

Спасибо, что знаю, но ни один из ответов не помог мне там, я все еще подозреваю, например. проблемы времени выполнения для связанных с Silverlight вопросов и должны были создать уродливые хаки. Отображается весь код, который я использую (скопировал его в main() для теста), за исключением ввода Host и Port объекта Uri, которые я злоупотребляю для этой задачи, и фактического имени пользователя и пароля для SSH-соединения. –

ответ

0

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

+0

Переписан вызов plink для использования ключевого файла, и он работает. Я не уверен, что это причина, по которой это происходит, но в любом случае это разумно. Благодаря! –

Смежные вопросы