2011-08-25 23 views
0

贝娄是我从asp.net服务试图运行一些外部exe文件的代码。它在我的Visual Studio上运行得很好,但在我的服务器(服务器2008)上失败。Myapp.exe报告错误,该帐户下运行没有sufficiet priviliges。在服务器上如何从asp.net web服务的特定帐户下运行外部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

如果工作进程正在运行的帐户缺少足够的标准,那么您有几个选项。

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

WindowsIdentity.Impersonate Method

或配置IIS与所需的权限运行在用户帐户下的应用程序。

这里是一个文章这就解释了假冒安全的方法不同:

Understanding ASP.NET Impersonation Security

如果你不确信自己实现用户模拟代码,这里是一个链接到CodeProject上的文章:

A small C# Class for impersonating a User

+0

我试着在最后一个链接上的代码,但它不适合我。我还注意到有关代码不能用于新窗口系统的评论。我想我必须学习前两个链接,然后尝试把东西放在一起。 – Primoz

+0

也许我有这方面的问题:
请注意:启动模拟(即不是它切换到的用户上下文)的用户上下文需要具有“作为操作系统的一部分”权限集。 – Primoz

+0

确保工作进程正在运行的帐户具有[作为操作系统的一部分](http://technet.microsoft.com/en-us/library/dd349804(WS.10).aspx#BKMK_3)用户权限。我知道这在2008年的服务器上工作,因为我自己使用它。编辑..只是注意到你的上述评论。检查是否是这种情况。 – jdavies

相关问题