Note that there are some explanatory texts on larger screens.

plurals
  1. POCan Process.Start() take the system PATH into account?
    text
    copied!<p>I've been searching and experimenting for a while with this, but I have had no luck.</p> <p>I am trying to make a console program to automate some tasks that I couldn't quite do with a BAT file. I want to call "signcode.exe" from the Windows SDK, the bin folder with all the tools in my system PATH, and I can call "signcode" from anywhere, but <code>Process.Start</code> is ignoring the path.</p> <p>Current code:</p> <pre><code>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 </code></pre> <p>I've confirmed that StartInfo.EnvironmentVariables["Path"] matches my system path, and contains the Windows SDK folder. Setting it manually doesn't work either.</p> <p>I've even tried setting TempPath as shown on the MSDN page for <a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.environmentvariables.aspx" rel="nofollow noreferrer">EnvironmentVariables Property</a>, but that didn't work either. I wonder why you would be able to set this if it has no effect.</p> <p>If <code>System.Diagnostics.Process</code> cannot use the path, are there any other functions I could use? I'd like to see the output of the command in my console application as well.</p> <p>Here is some additional debug values:</p> <pre><code>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' </code></pre> <p>The path <code>"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin"</code> is where signtool.exe is, and I can run it from a command prompt by simply typing <code>signtool</code>, but if I run this application from the same prompt, it doesn't register that path.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload