.NET 4:使用凭据的Process.Start返回空输出

ale*_*xey 6 .net .net-4.0 process.start

我从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());
Run Code Online (Sandbox Code Playgroud)

使用此代码一切正常:执行外部程序并执行process.StandardOutput.ReadToEnd()返回正确的输出.

但是在我在process.Start()之前添加这两行之后(在另一个用户帐户的上下文中运行程序):

startInfo.UserName = userName;
startInfo.Password = securePassword;
Run Code Online (Sandbox Code Playgroud)

程序未执行,process.StandardOutput.ReadToEnd()返回一个空字符串.没有异常被抛出.

userNamesecurePassword是正确的(如果凭据不正确,则抛出异常).

如何在另一个用户帐户的上下文中运行该程序?

环境: .NET 4,Windows Server 2008 32位

UPD:

该应用程序在ASP.NET开发服务器+ Windows 7下运行正常,但在IIS 7 + Windows Server 2008 Web Edition上失败.

UPD2:

在事件日志中找到了这个:

故障应用程序cryptcp.exe,版本3.33.0.0,时间戳0x4be18460,故障模块kernel32.dll,版本6.0.6002.18005,时间戳0x49e03821,异常代码0xc0000142,故障偏移0x00009eed,进程ID 0xbf4,应用程序启动时间0x01caf1b91f5b851a.

cryptcp.exe是外部应用程序的名称.

Mit*_*ers 1

查看MSDN 文档,建议配置一些其他项目,以便以其他用户身份正确启动应用程序。

  1. 设置域、用户名和密码属性(您应该设置域)
  2. 默认情况下使用用户名/密码将工作目录设置为 system32 文件夹

这可能会帮助你解决这个问题。