如何修复 NSIS 3 中 UAC_AsUser_ExecShell 的错误?
How to fix errors with UAC_AsUser_ExecShell in NSIS 3?
尝试使用适用于 2.46 Unicode 的 NSI 脚本,在新版本 3 中,这一行:
!insertmacro UAC_AsUser_ExecShell '' '$INSTDIR\test.exe' '--openbrowser' '' SW_SHOWNORMAL
产生以下错误:
!undef: "_UAC_ParseDefineFlags_orin_f2" not defined!
Error in macro _UAC_ParseDefineFlags_orin on macroline 12
Error in macro _UAC_ParseDefineFlags_Begin on macroline 6
Error in macro _UAC_ParseDefineFlagsToInt on macroline 1
Error in macro UAC_AsUser_Call on macroline 5
Error in macro UAC_AsUser_ExecShell on macroline 11
Error in script "c:\my.nsi" on line 308 -- aborting creation process
There is a similar, unanswered question,从一年前回来。
我的问题:
如何将 UAC plug-in 与 NSIS 3 一起使用?
使用维基中的 UAC 插件 v0.2.4c (20150526) 我无法通过在 NSIS v3.01 中简单克隆 UAC_Basic.nsi 来重现您的错误:
Unicode true
!addplugindir ".\plugins\x86-unicode" ; Only required if you have not copied the .dll
!define S_NAME "UAC minimal test ${NSIS_PACKEDVERSION}"
Name "${S_NAME}"
OutFile "${S_NAME}.exe"
RequestExecutionLevel user ; << Required, you cannot use admin!
InstallDir "$ProgramFiles${S_NAME}"
!include UAC.nsh
!include MUI2.nsh
!macro Init thing
uac_tryagain:
!insertmacro UAC_RunElevated
${Switch} [=10=]
${Case} 0
${IfThen} = 1 ${|} Quit ${|} ;we are the outer process, the inner process has done its work, we are done
${IfThen} <> 0 ${|} ${Break} ${|} ;we are admin, let the show go on
${If} = 3 ;RunAs completed successfully, but with a non-admin user
MessageBox mb_YesNo|mb_IconExclamation|mb_TopMost|mb_SetForeground "This ${thing} requires admin privileges, try again" /SD IDNO IDYES uac_tryagain IDNO 0
${EndIf}
;fall-through and die
${Case} 1223
MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "This ${thing} requires admin privileges, aborting!"
Quit
${Case} 1062
MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "Logon service not running, aborting!"
Quit
${Default}
MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "Unable to elevate , error [=10=]"
Quit
${EndSwitch}
SetShellVarContext all
!macroend
Function .onInit
!insertmacro Init "installer"
FunctionEnd
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_FUNCTION PageFinishRun
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "English"
Section
SectionEnd
Function PageFinishRun
!insertmacro UAC_AsUser_ExecShell '' '$WinDir\notepad.exe' '--openbrowser' '' SW_SHOWNORMAL
FunctionEnd
挖掘旧线程:
我遇到了同样的问题,wiki 上的 UAC 插件与我在 NSIS 上使用的版本相比有一个小的变化 2.x。
这个小改动解决了问题
尝试使用适用于 2.46 Unicode 的 NSI 脚本,在新版本 3 中,这一行:
!insertmacro UAC_AsUser_ExecShell '' '$INSTDIR\test.exe' '--openbrowser' '' SW_SHOWNORMAL
产生以下错误:
!undef: "_UAC_ParseDefineFlags_orin_f2" not defined!
Error in macro _UAC_ParseDefineFlags_orin on macroline 12
Error in macro _UAC_ParseDefineFlags_Begin on macroline 6
Error in macro _UAC_ParseDefineFlagsToInt on macroline 1
Error in macro UAC_AsUser_Call on macroline 5
Error in macro UAC_AsUser_ExecShell on macroline 11
Error in script "c:\my.nsi" on line 308 -- aborting creation process
There is a similar, unanswered question,从一年前回来。
我的问题:
如何将 UAC plug-in 与 NSIS 3 一起使用?
使用维基中的 UAC 插件 v0.2.4c (20150526) 我无法通过在 NSIS v3.01 中简单克隆 UAC_Basic.nsi 来重现您的错误:
Unicode true
!addplugindir ".\plugins\x86-unicode" ; Only required if you have not copied the .dll
!define S_NAME "UAC minimal test ${NSIS_PACKEDVERSION}"
Name "${S_NAME}"
OutFile "${S_NAME}.exe"
RequestExecutionLevel user ; << Required, you cannot use admin!
InstallDir "$ProgramFiles${S_NAME}"
!include UAC.nsh
!include MUI2.nsh
!macro Init thing
uac_tryagain:
!insertmacro UAC_RunElevated
${Switch} [=10=]
${Case} 0
${IfThen} = 1 ${|} Quit ${|} ;we are the outer process, the inner process has done its work, we are done
${IfThen} <> 0 ${|} ${Break} ${|} ;we are admin, let the show go on
${If} = 3 ;RunAs completed successfully, but with a non-admin user
MessageBox mb_YesNo|mb_IconExclamation|mb_TopMost|mb_SetForeground "This ${thing} requires admin privileges, try again" /SD IDNO IDYES uac_tryagain IDNO 0
${EndIf}
;fall-through and die
${Case} 1223
MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "This ${thing} requires admin privileges, aborting!"
Quit
${Case} 1062
MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "Logon service not running, aborting!"
Quit
${Default}
MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "Unable to elevate , error [=10=]"
Quit
${EndSwitch}
SetShellVarContext all
!macroend
Function .onInit
!insertmacro Init "installer"
FunctionEnd
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_FUNCTION PageFinishRun
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "English"
Section
SectionEnd
Function PageFinishRun
!insertmacro UAC_AsUser_ExecShell '' '$WinDir\notepad.exe' '--openbrowser' '' SW_SHOWNORMAL
FunctionEnd
挖掘旧线程:
我遇到了同样的问题,wiki 上的 UAC 插件与我在 NSIS 上使用的版本相比有一个小的变化 2.x。
这个小改动解决了问题