public static string StartProcess(string cmd, string args, string workingDirectory, string username, string password)
{
// launch system process
ProcessStartInfo startInfo = new ProcessStartInfo(cmd, args);
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardInput = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.UserName = username;
startInfo.Password = ConvertStringToSecureString(password);
// get working directory from executable path
if (String.IsNullOrEmpty(workingDirectory))
{
startInfo.WorkingDirectory = Path.GetDirectoryName(cmd);
}
else
{
startInfo.WorkingDirectory = workingDirectory;
}
var results = new StringBuilder();
using (var process = Process.Start(startInfo))
{
process.StandardInput.Flush();
process.StandardInput.Close();
var reader = process.StandardOutput;
string lineOut;
while ((lineOut = reader.ReadLine()) != null)
{
results.AppendLine(lineOut);
}
while (!process.HasExited) System.Threading.Thread.Sleep(1000);
}
return results.ToString();
}
我正在尝试使用与IIS应用程序池运行的用户名/密码不同的用户名/密码从我的IIS应用程序中启动进程。
IIS应用程序池在完全管理员用户下运行,当进程启动时,它完成,结果返回,没有问题。当我指定用户名/密码时,流程开始,然后立即关闭。
我也有
Application popup: conhost.exe - Application Error : The application was unable to start correctly (0xc0000142). Click OK to close the application.
在我的事件日志中。如果我使用上面的代码并将其放入自己的exe文件并使用IIS运行的相同管理员用户通过桌面运行,则该过程启动(使用其他用户的用户名/密码)并完成而没有问题。
它似乎仅限于IIS。我错过了什么吗?