2010-08-07 87 views
1

似乎特權提升似乎是大多數開發人員與大多數時間他們根本沒有的戰鬥常見的事情。我爲一個人做了,但是正在與一個大規模的Background Worker例程打架,我試圖讓我的代碼保持本地的類將使用它。由於代碼量,並引用我的後臺工作使得一旦它完成了「RunWorkerCompleted」處理方法中它證明艱難的齧合接受這是一個可行的替代方案:如何模擬WinForms,C#App的Windows內置管理員角色?

HOMEWORK 1:

HOMEWORK 2:

HOMEWORK 3:

對我的MainForm有太多的依賴由我的後臺工作人員爲我考慮將整個解決方案運送到具有'管理員'權限的獨立流程中。這涉及到太多的斬斷和改變。

Omega Coder:

已經讀入CAS爲70-536考試,我在這上面的例子中知道的大部分條款,但我沒有看到如何以及爲什麼它的工作原理?有人可以解釋爲什麼許可授予'ManagersOnly'方法嗎?因爲一旦PrincipalPolicy更改爲WindowsPrincipal,接下來的兩個步驟看起來像普通的對象實例化語句構成的東西,如:

System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal, IPrincipal, IIdentity); 

顯然,沒有這樣的超載存在,但其在超負荷做什麼很清楚。

問題1: OmegaCoders示例如何實現這種效果?因爲我的用戶是'BUILTIN \ Administrators'組的一部分,所以它確實可以正常工作。我正在尋找一篇基於文獻的答案,所以請儘可能詳細地描述你的感受。

更新1:

問題2:我怎麼會恢復的PrincipalPolicy回到它以前......一旦該方法返回我不需要PrincipalPolicy仍然被設置爲' WindowsPrincipal「???因此,該應用程序可以按照我的意圖繼續作爲低權限用戶運行。

問題3:一旦'ManagersOnly'方法返回,權限是否被丟棄?它是否適用於方法的生命週期?

System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.NoPrincipal); 

*更新2:*

這被證明是困難的,因爲我的Win7專業版的開發機器上我可以測試並運行任何東西,但是當我試圖測試出一個簡單的Win7家庭筆記本電腦的一些代碼我發現權限被拒絕。哪些問題將PrincipalPolicy更改爲「WindowsPrincipal」不適用於所有vista和Win7用戶,因爲許多用戶甚至不會成爲管理員用戶組的一部分。所以這個選項是沒用的......坐在這臺小型筆記本電腦上它變得非常明顯,這不是我需要的解決方案。

忽略先前的Qs的 - 我自己researh我已經做了,他們是不可行的。

問題4:如何在代碼中模擬管理員以編程方式和臨時模式?

回答

1

簡短的回答是否定的。

看起來好像畢竟我在那裏進行的挖掘似乎並沒有提升方法權限的方法,因爲CAS讚揚RBS,因此如果用戶不是正確組的一部分。那麼有沒有點甚至正在訪問的管理員權限的RBS告訴CAS是這樣的請求被彈和權限被拒絕的用戶不是組的一部分。導致異常。

如果用戶是您需要的組的一部分,即管理員,那麼更改域PrincipalPolicy將爲您提供臨時解決方案,但它不適合不屬於管理員用戶組的用戶。這就是上述解決方案分崩離析的地方。

長的答覆是,船出了問題易發的代碼放到一個單獨的小.exe文件和seperately運行它。

相關問題