title: How to Start a Process Unelevated
body: <p>My app runs as <code>requestedExecutionLevel</code> set to <code>highestAvailable</code>.</p>
  
  <p>How do I run a process unelevated?</p>
  
  <p>I tried the following but it didn't work:</p>
  
  <pre><code>Process.Start(new ProcessStartInfo {FileName = "foo.exe", Verb = "open"})
  </code></pre>
  
  <p>I have tried the following trust levels to start my process using Win32 API but none of them work correctly:</p>
  
  <pre><code>0
  1260: This program is blocked by group policy. For more information, contact your system administrator.
  
  0x1000
  The application was unable to start correctly (0xc0000142). Click OK to close the application. 
  
  0x10000
  Process starts then hangs
  
  0x20000
  All options are not available
  
  0x40000
  Runs as admin
  </code></pre>
  
  <p>If I run <code>tskill foo</code> from my elevated app, it restarts foo with correct privileges.</p>
  
  <p>What I need is a solution in which I don't have to specify the trust level. The process should start with the correct trust level automatically just like the <code>tskill</code> tool restarts <code>foo.exe</code> in the correct trust level. The user selects and runs <code>foo.exe</code> and so it can be anything.</p>
  
  <p>If I can get the trust level of a process somehow, I can do this easily since <code>foo.exe</code> runs when my app can capture its trust level.</p>