2009-12-10 76 views
5

我有一個我正在開發的WinForms應用程序。有一小部分功能需要在Vista/Win7中以管理員身份運行。我瞭解如何爲清單中的應用程序設置requestedExecutionLevel。訣竅是,我不想要求用戶以管理員身份運行整個應用程序,只是其中的一部分。所以我想將大部分功能作爲Invoker運行。一個dll的請求執行級別

如果我把管理功能放在一個dll中,有沒有辦法將它標記爲requireAdministrator?我試圖用MT來爲dll添加一個清單,但這似乎不起作用。我需要做什麼?

回答

4

不,沒有辦法通過DLL來區分DLL上應用程序的執行級別。這是一個全過程設置。您必須調用應用程序中的另一個進程,以高級priv方式運行該DLL中的代碼。

儘管你有一個選擇是使用rundll或rundll32程序直接運行DLL。這是一個獨立的Windows程序,用於加載和運行特定的DLL。你可以提升rundll進程並獲得你想要的隔離。

谷歌搜索rundll會給你很多關於如何使用它的建議:)。

+0

一個DLL可以作爲自己的進程執行還是必須從EXE啓動? – epotter 2009-12-10 18:31:21

+0

@epotter我在這個問題上更新了我的答案。 – JaredPar 2009-12-10 18:39:16

3

海拔是每個進程,所以你不能有一個DLL本身提升。您需要查看以獨立的升級過程託管DLL;或者你可以看看海拔COM moniker,並且這樣做。