如何在具有提升UAC的Windows操作系统上使用NSIS将dll复制并安装到程序集文件夹中

如何在具有提升UAC的Windows操作系统上使用NSIS将dll复制并安装到程序集文件夹中,nsis,setup-deployment,Nsis,Setup Deployment,我正在构建一个应用程序设置,其中安装涉及将Microsoft.VisualBasic.PowerPacks.Vs复制并注册到Windows程序集文件夹中。在UAC处于活动状态的Windows 7系统上,此过程有时会失败。目前,我在一节中使用以下脚本: SetOutPath $INSTDIR\bin File "..\MyFolder\systemfiles\Microsoft.VisualBasic.PowerPacks.Vs.dll ExecWait '"$R0\RegAsm.exe" Mic

我正在构建一个应用程序设置,其中安装涉及将Microsoft.VisualBasic.PowerPacks.Vs复制并注册到Windows程序集文件夹中。在UAC处于活动状态的Windows 7系统上,此过程有时会失败。目前,我在一节中使用以下脚本:

SetOutPath $INSTDIR\bin
File "..\MyFolder\systemfiles\Microsoft.VisualBasic.PowerPacks.Vs.dll
ExecWait '"$R0\RegAsm.exe" Microsoft.VisualBasic.PowerPacks.Vs.dll'

请求为我提供一些脚本/解决方案,以便即使UAC在Windows 7系统上提升,也能成功复制和注册dll

所有NSIS安装程序都应包含一个
RequestExecutionLevel
属性,该属性由Windows Vista检查,稍后在UAC打开时检查

在GAC、SxS等中安装时,安装程序需要请求管理员权限:

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