NSIS提高安裝的權限
作者: fase 日期: 2011-01-04 15:57
NSIS雖然是蠻好用的安裝檔製作程式
也蠻多Plug-ins可以用的
但最近在把舊的安裝程式在Windows 7下測試
發現有一些問題存在
而這問題其實是我需要能在註冊表裏的HKEY_CURRENT_USER寫入資料
但原先作出來的安裝程式,由於自動要求套用administrator權限
所以寫入的HKEY_CURRENT_USER是administrator裏的
並不是該user的
所以就再仔細研究NSIS和搜尋了一下
發現NSIS有個指令RequestExecutionLevel可以設定要用什麼權限
但是這只能設定,並不能切換
就是當你要寫入系統又要寫入該User的設定時就沒辦法
在網路上搜尋是可以找到UAC Plug-ins
http://nsis.sourceforge.net/UAC_plug-in
這似乎是可以用,只是沒有範例,只有舊版的範例
花了一些時間研究,總算可以用了
改了一個範例供大家參考
!include "LogicLib.nsh"
!include "UAC.nsh"
Name test
OutFile test.exe
RequestExecutionLevel user
Page instfiles
Section Main01
!insertmacro UAC_AsUser_Call Function WriteHKCU ${UAC_SYNCREGISTERS}
SectionEnd
Section Main02
WriteRegStr HKLM "SoftwareMicrosoftWindowsCurrentVersionUninstall est" "DisplayName" "$(^Name)"
SectionEnd
Function WriteHKCU
WriteRegStr HKCU "Software est" "one" "test"
FunctionEnd
Function .onInit
UAC_Elevate:
!insertmacro UAC_RunElevated
StrCmp 1223 $0 UAC_ElevationAborted ; UAC dialog aborted by user?
StrCmp 0 $0 0 UAC_Err ; Error?
StrCmp 1 $1 0 UAC_Success ;Are we the real deal or just the wrapper?
Quit
UAC_Err:
MessageBox mb_iconstop "Unable to elevate, error $0"
Abort
UAC_ElevationAborted:
# elevation was aborted, run as normal?
MessageBox mb_iconstop "This installer requires admin access, aborting!"
Abort
UAC_Success:
StrCmp 1 $3 +4 ;Admin?
StrCmp 3 $1 0 UAC_ElevationAborted ;Try again?
MessageBox mb_iconstop "This installer requires admin access, try again"
goto UAC_Elevate
FunctionEnd
該Plug-in下載下來,會有2個檔案需要複製到NSIS目錄裏
分別是dll和nsh
一開始要先呼叫RequestExecutionLevel user將權限設成User
再用.onInit來跳出UAC的視窗給使用者輸入administrator密碼
接著利用UAC_AsUser_Call來呼叫Function將權限暫時跳回User來設定
大致上是這樣,try一try大概就知道了
只是該網站沒有詳細的資訊,只能自行try
好像也找不到什麼資訊
這部分研究出來就給大家參考了