私はNSISにまったく慣れていません。インストーラーを実行するために管理者権限を要求しようとしています。レジストリが少し混乱しているためです。「RequestExecutionLevel」と「MULTIUSER_EXECUTIONLEVEL」に関する私の問題は、コンテキストメニューで[管理者として実行]を選択した場合でも、管理者以外のユーザーがインストーラーを開くのを完全にブロックすることです。RunAs DLLを使用しようとしましたが、「RunAsW」関数に渡される$command変数に何を入れるかについての単一のスレッドが見つかりませんでした。
これが私の(かなりハッキングされた)コードです:
StrCpy $0 0
StrCpy $1 ""
System::Call 'RunAs::GetAdministrators(w r1, *i .r0) i .r2 ? u'
System::Alloc 64
Pop $4
StrCpy $4 $2
StrCpy $5 ""
loop:
IntCmp $0 0 endloop
System::Call '*$4(w .r3)'
StrCpy $5 "$5|$3"
endloop:
System::Free $4 ; we free the memory used by the array
StrCpy $5 "$5" "" 1
!insertmacro MUI_INSTALLOPTIONS_WRITE "Settings.ini" "Field 1" "ListItems" $5
!insertmacro MUI_INSTALLOPTIONS_DISPLAY "Settings.ini"
!insertmacro MUI_INSTALLOPTIONS_READ $1 "UserPass" "Field 1" "State"
!insertmacro MUI_INSTALLOPTIONS_READ $2 "Settings.ini" "Field 2" "State"
StrCpy $3 "%%LOGONSERVER%%"
StrCpy $3 0
StrCpy $4 0
System::Call 'RunAs::RunAsW(w r1, w r2, w r3, *w .r4) i .r0 ? u'
MessageBox MB_OK $0
IntCmp $0 1 success
Quit
success:
!insertmacro MUI_LANGDLL_DISPLAY
その多くは、推測作業と試行錯誤です。(ところで、ループを実行してすべての管理者を取得しようとしましたが、DLLは32ビットマシン専用のようです...)。
とにかく、私の質問は:
ユーザー名とパスワードを要求するダイアログを開き、資格情報を確認し、チェックアウトした場合にのみインストールを続行する方法(「RunAs」などを使用)を知っている人はいますか?
また、インストーラーをセットアップして、管理者権限が要求されることをユーザーに知らせる素敵なシールドアイコンが表示されるようにする方法があることも知っています。誰かがそれを行う方法を知っていますか?
これが私のアプリの展開を現在妨げている唯一のものであるため、どんな助けでも大歓迎です。