title: Can Process.Start() take the system PATH into account?
body: <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>