如何在asp.net Web服务的特定帐户下运行外部exe?

时间:2011-08-25 22:37:26

标签: asp.net web-services external exe privileges

Bellow是我的asp.net服务代码,试图运行一些外部exe。它在win 7上从我的Visual Studio工作正常,但在我的服务器上失败(服务器2008)。 Myapp.exe报告了一个错误,即运行该帐户的帐户没有足够的权限。

    List<ProcInfo> allProcesses = new List<ProcInfo>();            
    ProcessStartInfo pInfo = new ProcessStartInfo();
    pInfo.FileName = binPath + @"\myApp.exe";
    pInfo.WindowStyle = ProcessWindowStyle.Hidden;
    pInfo.CreateNoWindow = true;
    pInfo.UseShellExecute = false;
    pInfo.RedirectStandardOutput = true;

    string exitMsg = "";
    int exitCode = 1;
    try
    {
        using (Process proc = Process.Start(pInfo))
        {
            exitMsg = proc.StandardOutput.ReadToEnd();
            proc.WaitForExit(1000);
            exitCode = proc.ExitCode;
        }
    }

服务器上的资源池在具有足够权限的帐户下运行,我还尝试在代码中使用相同的帐户来启动具有相同凭据的服务,但仍然没有。

我被告知asp.net工作线程运行的帐户会产生一些额外的限制。因此,即使资源池在适当的帐户下运行,您仍然没有足够的权限。 我还发现了一些关于使用pInvoke和win32 api调用作为从asp.net服务运行外部代码的唯一方法。但我没有任何win32 api知识,也没有找到这个问题。

我非常感谢任何提示/示例如何在asp.net服务的指定帐户下运行外部exe。

1 个答案:

答案 0 :(得分:1)

如果工作流程在缺少足够的privelages的情况下运行,那么您有几个选择。

您可以在代码中使用模拟:

WindowsIdentity.Impersonate Method

或者将IIS配置为在具有所需权限的用户帐户下运行应用程序。

这篇文章解释了模仿安全的不同方法:

Understanding ASP.NET Impersonation Security

如果您不自信地实现用户模拟代码,请参阅代码项目文章的链接:

A small C# Class for impersonating a User