2011-08-25 24 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

相關問題