我正在尝试使用 Process.Start 运行批处理文件
我正在使用以下代码:
Process myProcess = new Process();
myProcess.StartInfo.FileName = "D:\\test.bat";
myProcess.StartInfo.UserName = "user";
var strPass = new SecureString();
for (int i = 0; i < strUserPass.Length; i++)
{
strPass.AppendChar(strUserPass[i]);
}
strPass.MakeReadOnly();
myProcess.StartInfo.Password = strPass;
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.RedirectStandardInput = true;
myProcess.StartInfo.RedirectStandardOutput = true;
myProcess.StartInfo.RedirectStandardError = true;
myProcess.Start();
我正在使用 ASP.NET MVC 3 和 IIS 7.5
当我在本地计算机(Windows 7)上运行此代码时,它运行良好。
当我在我的服务器 (Windows Server 2008 R2) 上运行此代码时,它不起作用。进程启动但批处理文件未执行且进程没有任何 StandardOutput 或 StandardError。我无法获得任何信息,也没有错误。
如果我没有指定任何用户名和密码,它可以在我的服务器上运行。批处理文件使用我的网络服务帐户执行。
我真的需要使用特定的用户名执行该过程。
你知道为什么它不起作用吗?
---编辑:微软支持找到了解释
由于 Windows Vista 和会话隔离,服务和用户应用程序在不同的会话中执行。
Windows 不允许使用其他凭据执行从会话到另一个会话的进程。该过程将使用会话的默认凭据(AppPool 凭据)执行。