title: Getting "Access is Denied" error on Process.Start() on an application running an executable with all permissions granted
body: <p>The context here is that we have a C# service that normally runs scheduled jobs, but an executable was created that allows jobs to be triggered manually via command line. We put that executable on a separate IIS server, and did NOT install it as a service. The code inside the app to determine how it's being run is simply:</p>
  
  <pre><code>if (Environment.UserInteractive)
  {
       //parse the parameters and run the specified job
  }
  else
  {
       //start the service jobs
  }
  </code></pre>
  
  <p>I made an API as a wrapper to call that executable, which uses the following code to run the executable with arguments as a user of the machine.</p>
  
  <pre><code>var proc = new Process
  {
       StartInfo = new ProcessStartInfo
       {
            WorkingDirectory = (absolute path of the folder that contains the exe),
            FileName = (absolute path to the exe),
            Arguments = (args),
            UseShellExecute = false,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            CreateNoWindow = true,
            Domain = (domain),
            UserName = (username),
            Password = (password),
            Verb = "runas"
       }
  };
  proc.Start();
  proc.WaitForExit();
  </code></pre>
  
  <p>The API and the exe live in the same base folder. The API runs in IIS under an app pool user that is the same user it is running the process with. This user has Full Access permissions to the folder and executable, as well as the app pool user. We also added the user to the Administrator's group on that machine.</p>
  
  <p>Running the exe via command line locally on that machine works fine. Only when calling from this application do we get the following error:</p>
  
  <pre><code>System.ComponentModel.Win32Exception (5): Access is denied
  at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
  at System.Diagnostics.Process.Start()
  </code></pre>
  
  <p>I've confirmed that we are targeting the right file, that my SessionId is not 0 (I would get an error saying the service was not installed whenever I didn't start the process as a specified user), and that the app pool user and windows user have permissions to execute the file. UAC is off, and the API and exe are not on the C:/ drive. After hours of googling and trying different things, I'm out of ideas. Any help would be very appreciated.</p>