2012-01-11 90 views
7

我有一個NSIS腳本,可以很好地處理大型應用程序。我已經在網絡上讀了很多線程,但無法得到明確的答案:是否可以使用NSIS安裝應用程序,該應用程序在啓動時(不管用戶類型)自動以管理員身份運行?如果這是可能的話,它如何實現?NSIS:安裝應用程序以始終以管理員身份運行

注:我已經實行了NSIS封裝必須爲admin使用運行

RequestExecutionLevel admin 

我試圖用這個method寫UAC要求的應用程序的註冊表項,但我不能讓RUNASADMIN命令因爲它不符合NSIS所要求的格式。

回答

17

爲了確保安裝程序以管理員身份運行通常我建議這個小例子:

Outfile RequireAdmin.exe 
RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on) 

!include LogicLib.nsh 

Function .onInit 
UserInfo::GetAccountType 
pop $0 
${If} $0 != "admin" ;Require admin rights on NT4+ 
    MessageBox mb_iconstop "Administrator rights required!" 
    SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED 
    Quit 
${EndIf} 
FunctionEnd 

Page InstFile 

Section 
SectionEnd 

安裝的應用程序應該執行類似的步驟,如果它總是需要以管理員身份運行,對於一個Win32應用程序,這將是:

如果通過「自動以管理員身份運行」,您的意思是繞過UAC標高,那麼不是真的不可能,UAC的整點是允許用戶確認/拒絕特權操作!一些應用程序通過安裝一個NT服務來解決這個問題,該服務代表應用程序執行他們需要的任何操作。我不會推薦這樣做,因爲它將服務填充到用戶機器中,並且如果服務編碼不正確,可能會削弱系統的安全性。

如果您沒有編寫您正在安裝的應用程序,那麼您的選項會受到一些限制。如果應用程序根本沒有清單,則可以使用清單。

在AppCompatFlags鍵下設置RUNASADMIN字符串並不是安裝程序應該做的事情,這些兼容性選項應該由用戶控制,而不是應用程序。

您鏈接到也告訴你twoways設置SLDF_RUNAS_USER標誌上的快捷方式的論壇主題,這不會確保應用程序在所有情況下,開始作爲管理員,只有當應用程序從快捷方式啓動,但它可能是你唯一的選擇,如果你不能改變應用程序本身...

+0

感謝您的時間。真的很好的回答... – MoonKnight 2012-01-17 10:07:59

+0

事實上是光輝的! – MoonKnight 2012-01-17 10:09:18

相關問題