nsis无法将文件复制到system32

时间:2017-03-01 11:21:29

标签: python-2.7 nsis

# define name of installer
OutFile "installer.exe"
SetOverwrite on
# define installation directory
InstallDir $DESKTOP

# For removing Start Menu shortcut in Windows 7
RequestExecutionLevel Admin

Section
    ;StrCpy $INSTDIR "c:\Windows\System32\"
    SetOutPath $WINDIR\System32\
    ;MessageBox MB_OK $WINDIRSetOutPath $WINDIR\System32\
    MessageBox MB_OK $SYSDIR
    File "python27.dll"
SectionEnd

这是我将python27.dll文件复制到windows / system32的脚本 当我运行这个文件时,它什么也没做,或者我在做什么 非常感谢nsis

1 个答案:

答案 0 :(得分:2)

在64位Windows上有two system32 directories,一个用于32位.DLL,另一个用于64位.DLL。 64位程序(包括Explorer)查看32位system32目录的真实名称; Syswow64资料。真正的system32目录目录对32位程序是隐藏的。

要始终安装到"真正的" / native system32文件夹,您需要disable the redirection

RequestExecutionLevel Admin
!include x64.nsh

Section
SetOutPath $SysDir

${If} ${RunningX64}
${DisableX64FSRedirection}
File "myfiles\64\file.dll" ; Install 64-bit file on 64-bit Windows
${EnableX64FSRedirection}

${Else}

File "myfiles\32\file.dll" ; Install 32-bit file on 32-bit Windows

${EndIf}
SectionEnd

如果您的.DLL始终是32位,那么您不必做任何特别的事情:

RequestExecutionLevel Admin

Section
SetOutPath $SysDir
File "myfiles\file.dll" ; Install 32-bit file
SectionEnd

近20年来,我们不鼓励在system32中安装您的文件,您真的应该使用$COMMONFILES$PROGRAMFILES\<company name>\Shared Files

想象一下if two不同的软件供应商都认为他们需要在system32中安装python27.dll会发生什么?如果您仍然坚持这样做,那么您至少应该使用Library.nsh来安装该文件,以便正确设置SharedDLLs