Может ли Process.Start () учитывать системный ПУТЬ?

Я какое-то время искал и экспериментировал с этим, но мне не повезло.

Я пытаюсь создать консольную программу для автоматизации некоторых задач, которые я не мог выполнить с файлом BAT. Я хочу вызвать "signcode.exe" из Windows SDK, папки bin со всеми инструментами в моей системе PATH, и я могу вызвать "signcode" откуда угодно, но Process.Start игнорирует путь .

Текущий код:

System.Diagnostics.Process sign = new System.Diagnostics.Process();
sign.StartInfo.FileName         = signCommand.Substring(0, signCommand.IndexOf(' '));  // signtool.exe
sign.StartInfo.Arguments        = signCommand.Substring(signCommand.IndexOf(' ') + 1); // /sign /a file1 file2

// sign.StartInfo.EnvironmentVariables["Path"] = Environment.GetEnvironmentVariable("PATH");  // This doesn't work either
sign.StartInfo.UseShellExecute              = false;
sign.StartInfo.RedirectStandardOutput       = true;
sign.StartInfo.RedirectStandardError        = true;

sign.Start();  // Throws Win32Exception - The system cannot find the file specified

Я подтвердил, что StartInfo.EnvironmentVariables ["Path"] соответствует моему системному пути и содержит папку Windows SDK.Установка вручную тоже не работает.

Я даже пытался установить TempPath, как показано на странице MSDN для Свойство EnvironmentVariables , но это тоже не сработало. Интересно, почему вы можете установить это, если это не имеет никакого эффекта.

Если System.Diagnostics.Process не может использовать путь, могу ли я использовать другие функции? Я также хотел бы увидеть вывод команды в моем консольном приложении.

Вот некоторые дополнительные значения отладки:

Console.WriteLine("Sign Filename = '{0}'", sign.StartInfo.FileName);
Sign Filename = 'signtool.exe'

Console.WriteLine("Sign Arguments = '{0}'", sign.StartInfo.Arguments);
Sign Arguments = '/sign /f C:\Visual Studio\Projects\MGInsight\MGInsight\APPARENTINC.pfx /t http://timestamp.comodoca.com/authenticode "C:\Visual Studio\Projects\MGInsight\MGInsight\Publish\Application Files\\MGInsight_0_9_1_85\MGInsight.exe" "C:\Visual Studio\Projects\MGInsight\MGInsight\Publish\Application Files\\MGInsight_0_9_1_85\XPXScanner.dll" "C:\Visual Studio\Projects\MGInsight\MGInsight\Publish\Application Files\\MGInsight_0_9_1_85\NetworkCalculations.dll"'

Console.WriteLine("Sign Path = '{0}'", sign.StartInfo.EnvironmentVariables["Path"]);
Sign Path = 'C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;"C:\Program Files\Intel\WiFi\bin\";"C:\Program Files\Common Files\Intel\WirelessCommon\";"C:\Program Files (x86)\cwRsync\bin";"C:\Program Files (x86)\Git\cmd";"C:\Program Files (x86)\Git\bin";"C:\Program Files (x86)\Zend\ZendServer\bin";"C:\Program Files (x86)\Zend\ZendServer\share\ZendFramework\bin";"C:\Program Files\Java\jre6\bin";"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\";"C:\Program Files\Microsoft Windows Performance Toolkit\";C:\MinGW\bin;"C:\Program Files (x86)\Microsoft\ILMerge";"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin";C:\Program Files (x86)\Nmap'

Путь "C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin" - это место, где находится signtool.exe, и Я могу запустить его из командной строки, просто набрав signtool , но если я запускаю это приложение из того же приглашения, оно не регистрирует этот путь.

6
задан Peter Mortensen 23 September 2016 в 20:10
поделиться