2012-09-16 6 views
2

Почему этоC# ProcessStartInfo

ProcessStartInfo myProcess = new ProcessStartInfo(path); 
myProcess.UserName = username; 
myProcess.Password = MakeSecureString(password); 
myProcess.UseShellExecute = false; 
Process.Start(myProcess); 

работает, но

ProcessStartInfo myProcess = new ProcessStartInfo(); 
myProcess.FileName = Path.GetFileName(path); 
myProcess.WorkingDirectory = Path.GetDirectoryName(path); 
myProcess.UserName = username; 
myProcess.Password = MakeSecureString(password); 
myProcess.UseShellExecute = false; 
Process.Start(myProcess); 

нет.

Я хотел использовать второй из-за этого вопроса: https://stackoverflow.com/a/2621943/1306186

Я постоянно получаю файл не найден исключение ... Любые идеи?

Edit:
Путь к примеру @"C:\Users\User\Desktop\ConsoleApplication2.exe"

+2

Вы напечатали результат 'Path.GetFileName (path);' и 'Path.GetDirectoryName (path);'? Правильны ли они? – Tudor

+0

поместите контрольную точку в свой код и сравните значения в экземпляре 'ProcessStartInfo', а второй. Посмотрите, что отличается. –

+0

если вы меняете 'myProcess.UseShellExecute = true;' оба работают. – hamed

ответ

5

Этот бит неправильно

myProcess.FileName = Path.GetFileName(path); 

это должно быть

myProcess.FileName = path; 

Pass в C:\SomeDir\SomeApp.exe и код, который вы должны задать имя файла SomeApp.exe, который не может найти. Считайте, что вам повезло, есть обстоятельства, в которых это могло бы быть (например, ваше приложение и приложение, которое вы хотите запустить, в одной папке), а затем при развертывании вы могли бы повеселиться.

+0

Это точно так же, как мой первый пример, который я уже отметил как «рабочий», ... Конструктор ничего не делает, кроме установки атрибута 'FileName'. – Zulakis

+0

@ Zulakis, и ваша точка? 2-й пример не работает, поскольку он не смог найти ConsoleApplication2.exe. Первый пример (и предлагаемые исправления) сделал, потому что вы сказали, что ConsoleApplication2.exe находится в папке C: \ Users \ User \ Desktop, где он может ее найти. Если бы это был не тот ответ, который вам нужен, измените свой вопрос, чтобы дать нам ключ к тому, который вы сделали ... –

+0

Согласно сообщению, опубликованному в моем сообщении, делать это неправильно ... '[QUOTE] У меня был мой весь путь и имя файла, установленные в атрибуте filename, вместо этого поместите свой путь в свойство «Рабочий каталог», оставьте свойство filename только для «имени файла». [/ QUOTE] '.... – Zulakis

0

Я хотел бы попробовать использовать Path.GetFullPath() вместо того, чтобы просто Path.GetFileName() так как конструктор инициализирует FileName полный путь, когда вы используете его с параметром строки.

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