如果指定了用户凭据,则使用Process.Start从ASP.NET启动的应用程序将失败

时间:2011-11-14 19:54:15

标签: c# asp.net process.start

当我指定用户凭据时,我无法使用Process.Start启动简单的控制台应用程序。似乎对Process.Start的调用尝试启动应用程序,但应用程序立即失败并显示事件日志条目(参见下文)。我在Windows 7旗舰版(x64)上运行IIS 7.5 / .NET 4.0。应用程序池在ApplicationPoolIdentity下运行并使用集成模式。网站设置为在完全信任下运行。

为了测试,我创建了一个简单的控制台应用程序ConsoleApplication1,它只是将“Hello World”写入控制台并将当前日期和时间附加到文本文件中,这样我就可以看到应用程序已执行。当我使用以下代码从我的ASP.NET应用程序中单击按钮运行应用程序时,我看到一个新值被写入我的文本文件中,正如预期的那样。

protected void btnStart_Click(object sender, EventArgs e)
{
    Process.Start(@"C:\dump\test\ConsoleApplication1.exe");
}

当我尝试使用下面的代码指定一组用户凭据来运行应用程序时,没有任何内容写入我的文本文件,我在事件查看器中看到一条消息说明:

Application popup: ConsoleApplication1.exe - Application Error : The application was unable to start correctly (0xc0000142). Click OK to close the application.

以下是导致错误的代码:

protected void btnStart_Click(object sender, EventArgs e)
{
    Process.Start(@"C:\dump\test\ConsoleApplication1.exe",
        "myusername", CreatePassword("mypassword"), string.Empty);
}

private static SecureString CreatePassword(IEnumerable<char> password)
{
    var ss = new SecureString();
    foreach (var c in password)
        ss.AppendChar(c);
    return ss;
}

我非常确定用户凭据的身份验证工作正常,因为如果输入的信息不正确,我会收到Logon failure: unknown user name or bad password错误。

我觉得我必须错过一些简单的事情,但是有人能指出我在这方面的正确方向吗?

0 个答案:

没有答案