2011-05-05 79 views
0

我正在编写使用NSIS的安装程序,该程序将向计算机的GPO添加条目以在系统引导时运行命令。将条目添加到GPO启动脚本的安装程序

# From http://nsis.sourceforge.net/LGP_Startup/Shutdown_Script 
!include LGPScript.nsh 

Section 
    SetOutPath - 

    # Install all files from myprog directory into C:\Program Files\myprog 
    File myprog\* 

    # Copy mysystweak.bat to System32\GroupPolicy\Machine\Scripts\Startup 
    SetOutPath $SYSDIR\GroupPolicy\Machine\Scripts\Startup 
    File myprog\mysystweak.bat 
    SetOutPath - 

    # Add GPO entry to execute mysystweak.bat on startup 
    ${LGPScript::Create} 'Startup' 'mysystweak.bat' '' $R1 
    DetailPrint "Create startup LGP return code:$R1" 

    # Write uninstaller 
    Writeuninstaller "${uninstall_name}" 
SectionEnd 

一切顺利的话,除了什么也不显示在... \启动。安装程序认为一切工作:

Output folder: C:\WINDOWS\system32\GroupPolicy\Machine\Scripts\Startup 
Extract: mysystweak.bat... 100% 
Output folder: C:\Program Files (x86)\myprog 

我最初尝试使用CopyFiles从$ INSTDIR批处理文件复制到... \启动,但得到了同样的结果。

这里怎么回事?

相关:https://serverfault.com/q/266338/2101

回答

1

如果这是你需要禁用FS重定向X64的系统,没有它$ SYSDIR不会指向真正的system32目录下:

!include x64.nsh 

Section 
... 
SetOutPath $SYSDIR\GroupPolicy\Machine\Scripts\Startup 
${DisableX64FSRedirection} 
File myprog\mysystweak.bat 
${EnableX64FSRedirection} 
... 
SectionEnd 

您可以验证这是通过观看安装程序的问题Process Monitor

+0

这就是问题并且完全解决 - 谢谢!为什么安装者不能这么说... – MikeyB 2011-05-05 19:21:04

+0

@MikeyB:它会怎么知道?只有在真正需要时才能禁用重定向,因为其他操作(CreateShortcut等)可能必须从system32加载dll,并且需要从32位system32加载这些dll!安装程序基本上不可能知道您的批处理文件是否应该位于实际或重定向的$ sysdir中... – Anders 2011-05-05 20:20:21

+0

@MikeyB:另外,如果\ GroupPolicy \ Machine \ Scripts \ Startup路径默认情况下不存在您可能想要在DisableX64FSRedirection块内移动SetOutPath调用... – Anders 2011-05-05 20:21:30

相关问题