2012-12-28 27 views
12

msdn在asp.net下的Process.Start()?

ASP.NET網頁和服務器控件代碼執行的 的Web服務器上的ASP.NET輔助進程的上下文。如果您在ASP.NET網頁或服務器控件中使用開始 方法,則新的進程 將在具有受限權限的Web服務器上執行。進程不會在與客戶端瀏覽器相同的上下文中啓動,並且 無法訪問用戶桌面。

其中帳戶恰恰是「限制權限」

例子:

  • 我登錄到win7的爲RoyiN
  • Windows身份驗證啓用
  • 模擬是啓用BobK的web.config(各地網站)
  • W3WP用戶是UserA (不是網絡和ApplicationPoolIdentity)。

在C#我做Process.start("....cmd.exe...")Startinfo憑證爲: 「Martin」, 「Password」, 「Domain」)

  • 誰是高效account其最終運行cmd.exe

  • 受限制的權限實際上是指誰?

+0

希望聊天有所幫助 - 回答2個問題:「誰是真正運行cmd.exe的帳戶?」 => UserA。 「受限制的權限」究竟是誰?「 =>受限制的權限是指w3wp用戶作爲應用程序池標識的(通常)情況,其權限減少。在你的情況下,「UserA」 – JerKimball

+0

@JerKimball請注意,Startinfo _does_提供憑據。 –

+0

好的,在這種情況下,新流程應該以與您在流程啓動信息中指定的用戶/域相同的身份啓動。 – JerKimball

回答

5

假冒不會來這裏發揮作用,因爲引擎蓋下,Process.Start是依靠兩個本地Win32的一個電話:

如果ProcessStartInfo.UserName提供:

CreateProcessWithLogonW(startInfo.UserName, startInfo.Domain, ...) 

CreateProcessWithLogonW

如果不是:

CreateProcess(null, cmdLine, null, null, true, ...) 

CreateProcess

傳入CreateProcess的null是什麼可能讓你咬;從MSDN:

該結構的lpSecurityDescriptor成員指定主線程的安全描述符。如果lpThreadAttributes爲NULL 或lpSecurityDescriptor爲NULL,則該線程獲取默認安全性 描述符。線程 的默認安全描述符中的ACL來自進程標記。

請注意,它表示來自進程令牌,不調用線程 - 模擬身份沒有機會加入派對,因爲它被綁定到線程。

+0

我的代碼中沒有使用模擬,它被寫入web.cofig。所以整個網站都在模仿! –

+1

@RoyiNamir,編寫模擬代碼的人並不重要 - 如果使用已經是ASP.Net的一部分或某些手動部分的行爲,則行爲將完全相同,因爲它最終會歸結爲相同的本地調用。 Web.config不能更改工作進程運行的帳戶 - 它只會觸發運行請求的線程上的模擬。 –

+0

@AlexeiLevenkov所以w3wp用戶權限不會有任何用法....對不對?導致所有線程將被模擬用戶執行。 –

2

相信MSDN項指向的事實,即使模擬被啓用,你是一個特定的用戶環境下,新的流程將由進程產生 - 在線程級模擬發生。也就是說,我相信它會在'用戶A'的環境下運行。

下面是相關的KB項:

http://support.microsoft.com/kb/889251

注意,同一條目介紹瞭如何使用CreateProcessAsUser允許模擬。

+0

這。默認情況下,生成的進程將隨任何Identity運行App Pool而啓動。獲取作爲另一個用戶上下文啓動的進程的唯一方法是將其p /調出。 – JerKimball

+0

@JerKimball,但模仿覆蓋w3wp用戶..... –

+0

但是,正如@OnoSendai所說,模擬發生在線程級別,Process.Start在內部使用P/invoke派生出內部的win32調用CreateProcessWithLogonW或CreateProcess(取決於您是否擁有在ProcessStartInfo中設置用戶名)...實際上,讓我把這個答案。 – JerKimball

2

正如我在試圖解決this problem時發現的,很多小事情都不一樣。它可能在RoyiN下運行,但您可能會發現USERPROFILE被設置爲C:\ Windows \ system32 \ config \ systemprofile,而不是您的/ Users/RoyiN文件夾。

根據你想要做什麼,這可能會導致一些問題。在我的情況下,開始一個git過程將永遠掛起。USERPROFILE和HOME不僅是錯誤的,我還發現模擬用戶在映射網絡驅動器上表現不佳。