I run an external program from ASP.NET:
var process = new Process();
var startInfo = process.StartInfo;
startInfo.FileName = filePath;
startInfo.Arguments = arguments;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
//startInfo.RedirectStandardError = true;
process.Start();
process.WaitForExit();
Console.Write("Output: {0}", process.StandardOutput.ReadToEnd());
//Console.Write("Error Output: {0}", process.StandardError.ReadToEnd());
Everything works fine with this code: the external program is executed and process.StandardOutput.ReadToEnd() returns the correct output.
But after I add these two lines before process.Start() (to run the program in the context of another user account):
startInfo.UserName = userName;
startInfo.Password = securePassword;
The program is not executed and process.StandardOutput.ReadToEnd() returns an empty string. No exceptions are thrown.
userName and securePassword are correct (in case of incorrect credentials an exception is thrown).
How to run the program in the context of another user account?
Environment: .NET 4, Windows Server 2008 32bit
UPD:
The application works fine under ASP.NET development server + Windows 7, but fails on IIS 7 + Windows Server 2008 Web Edition.
UPD2:
Found this in the event log:
Faulting application cryptcp.exe, version 3.33.0.0, time stamp 0x4be18460, faulting module kernel32.dll, version 6.0.6002.18005, time stamp 0x49e03821, exception code 0xc0000142, fault offset 0x00009eed, process id 0xbf4, application start time 0x01caf1b91f5b851a.
cryptcp.exe is the name of external application.