2014-01-19 52 views
0

我想在Visual Basic中編寫一個安裝程序,並且希望安裝程序嘗試獲取管理員權限。如果該帳戶是管理員,我希望它只是假設他們,並且如果該帳戶沒有管理權限,我希望顯示這樣的提示。Visual Basic程序 - 要求管理員權限

UAC Prompt

如果用戶能給予的權限,那麼它將繼續與他們,如果不能給他們,然後它會採取一種替代,沒有管理員權限的路線,就像谷歌Chrome安裝程序。我該怎麼做呢?經過一小時的研究,我沒有在Google上找到任何有用的信息。

+1

「如果賬戶是管理員,我希望它只是假設他們」我不認爲這是可能的。系統將始終顯示UAC提示;不同之處在於標準用戶包括對憑證的請求,就像你的屏幕截圖一樣,而管理員則沒有。另外,沒有選擇說'允許程序運行,但沒有提升',所以很難看到你的第二個需求是如何得到滿足的。 我不願意使用'不可能'這個詞,但是MSFT對UAC的堅固性有很大的幫助 – peterG

+0

@peterG我不在乎是否顯示UAC提示。我誤解了我的問題,因爲我在計算機上關閉了UAC,因此當程序需要管理員權限時,只需要他們。 – DavidB

回答

1

所以用盡評論空間。 。 。 處理這種安裝程序的一個好方法是使用一組三個程序:Loader,安裝程序和主程序。加載程序是從桌面快捷方式驅動的等。它的任務是檢查供應商的網絡API等,看看是否有新版本可用。如果不是,那麼它啓動主程序。然而,如果有新版本可用,那麼它爲用戶提供了下載它的機會。如果用戶同意,則加載器啓動安裝程序。安裝程序是三個標記爲RequireAdmin中唯一的一個,因此只有在必要時纔會顯示UAC提示。安裝程序下載並安裝新版本,根據需要卸載或覆蓋舊版本。我們做了這樣的事情,它運作良好。 但是,MS ClickOnce也可以很好地工作,編碼少得多,而且四處都比較容易找到,我建議你也考慮這個選項。

編輯:但是,一點搜索導致我this MSFT link - 它可能會有所幫助。我自己並沒有嘗試過這種技術。

1

在Visual Studio中,向項目中添加一個新文件,選擇「應用程序清單」作爲文件類型,然後單擊「確定」。

您將獲得一個XML文檔。該文件的第一大塊是這樣的:

<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <!-- UAC Manifest Options 
      If you want to change the Windows User Account Control level replace the 
      requestedExecutionLevel node with one of the following. 

     <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 

      Specifying requestedExecutionLevel node will disable file and registry virtualization. 
      If you want to utilize File and Registry Virtualization for backward 
      compatibility then delete the requestedExecutionLevel node. 
     --> 
     <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 

去評論這行:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

這將使該應用程序(或DLL)中運行的UAC讓管理員特權。

如果您只想讓特定組件運行提升,請將該代碼放入單獨的DLL文件中。當您的主程序首次調用該程序集時,UAC將出現,並且將會授予標高。

+1

好的結果 - 我假設OP已經知道如何將exe標記爲requireAdmin,但可能並非如此。 此外,要獲得清單,只需在項目資源管理器的「應用程序」選項卡上單擊「查看Windows設置」按鈕即可。 – peterG

+0

@peterG我不知道如何改變'requireAdmin'的東西,而且如果用戶忽略UAC提示,我還不知道如何將一個單獨的DLL文件設置爲默認值。 – DavidB

+0

@DavidB好吧,那麼也許我太過於草率地假設你的問題是關於什麼的。也許你可以編輯它來包含更多關於'Installer Program'的意思,以及你希望它做什麼,這是無法使用VS部署項目(VS2012/3中的ISLE)或ClickOnce等來完成的。同時,設置RequestedExecutionLevel在清單中按照Nathan M的回答是,您是如何控制exe在運行時是否生成UAC提示的; ClickOnce和Google Chrome安裝程序通過安裝到用戶的配置文件而不是安裝程序文件來避免對管理員的需求。 – peterG