NSIS提高安裝的權限

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
好像也找不到什麼資訊
這部分研究出來就給大家參考了

引用通告地址: http://www.fase.idv.tw/blog/trackback.php?tbID=89&extra=4b2336
標籤: NSIS
評論: 0 | 引用: 0 | 閱讀: 19209
發表評論
暱 稱(*): 密 碼:
網 址: E - mail:
驗證碼(*): 驗證碼圖片
請用滑鼠點選輸入
選 項:
頭 像:
內 容(*):