2013-12-20 7 views
0

У меня есть следующий код С #, который запускает командную строку:Запуск командной строки с C# не работает

ProcessStartInfo si = new ProcessStartInfo(); 
si.FileName = @"Lib\my_program.exe"; 

si.WindowStyle = ProcessWindowStyle.Hidden; 
si.UseShellExecute = false; 
si.CreateNoWindow = true; 

si.Arguments = "my args"; 

Process p = new Process(); 
p.StartInfo = si; 
p.Start(); 

Он отлично работает на одном компьютере, но при его запуске на другом компьютере - ничего не происходит.

При попытке запустить его через командную строку на проблемном компьютере - он также отлично работает.

все пути верны, и я запускаю его с правами администратора.

Что может пойти не так? возможно, некоторые переменные среды? или проблемы безопасности компьютера?

+3

Вы уверены, что текущий каталог установлен правильно? Попробуйте создать объект FileInfo на пути exe и спросить, существует ли он. – PMF

+0

Вы уверены, что второй компьютер имеет ту же версию рамки или верхнюю? – Ktt

+0

Вы избегаете неприятностей * всегда * указывая полный путь (например, c: \ foo \ bar \ baz.exe) и * всегда * устанавливая свойство ProcessStartInfo.WorkingDirectory. Используйте свойство Assembly.GetEntryAssembly(). Свойство Location для создания пути. –

ответ

1

Как работает при запуске из командной строки, я бы сказал, что ваш ярлык приложения запускает программу с другим рабочим каталогом (поэтому относительный путь Lib\my_program.exe не разрешает существующую программу).

В более общем, Process.Start() могут бросать различные исключения (возможно FileNotFoundException в данном случае), поэтому я предлагаю вам обернуть код с попытаться/поймать блок и написать исключение Console.Error или отобразить диалоговое окно с сообщением об ошибке.

+0

Определенно ставить 'try/catch', потому что это более чем вероятно ответит на ваш вопрос самостоятельно. – KSdev

0

Отметьте здесь ProcessStartInfo.EnvironmentVariable ["Путь"]. Если это не родительская папка «my_program.exe». Тогда, вероятно, он не знает места. Помните, что здесь «Путь» чувствителен к регистру. Спасибо моему старшему, который сегодня очистил мои сомнения.

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