Process.Start来自ASP.NET

时间:2012-08-31 19:57:13

标签: asp.net asp.net-mvc asp.net-mvc-3 iis process

我有一个asp.net mvc 4应用程序,它有对控制台应用程序的Process.Start()调用(用c ++编写)。

问题是控制台应用程序无法从asp.net应用程序运行(它从站点生成图像,图像全白)。

当我使用来自控制台应用程序的相同调用时,它可以很好地工作。

我认为应该是特权问题。

我不确定ASP.NET是否来自同一个用户, 但我看到here它在我的用户帐户(这是管理员)下运行,所以这真的很奇怪。

我尝试过的事情:

  1. process.StartInfo.UseShellExecute = true / false。

  2. process.StartInfo.UserName和管理员用户的密码。

  3. 在C:\ Users \ MyUser \ Documents \ IISExpress \ config \ applicationhost.config中编辑IIS配置文件 改变:

    <applicationPoolDefaults managedRuntimeLoader="v4.0" >
        <processModel/>
    </applicationPoolDefaults>
    

    为:

        <applicationPoolDefaults managedRuntimeLoader="v4.0" >
            <processModel userName="administrator username" password="administrator password"/>
        </applicationPoolDefaults>
    

    所以如果匿名请求将以。的身份执行 进程,并且进程没有特权,显式 用户将用于匿名身份验证。 Taken From Here

  4. 感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

查看“在代码中模拟特定用户”部分

http://support.microsoft.com/kb/306158#4

您可以在模拟指定用户后从代码中调用Process.Start,并使用该标识创建进程。进程启动后,您应该调用“impersonationContext.Undo()”将用户身份返回给App Pool Identity。

如果您使用其他方法在ASP.NET中模拟用户,则整个应用程序将具有提升的权限。最好将这些提升的权限限制为此过程。