将条目添加到GPO启动脚本的安装程序
问题描述:
我正在编写使用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批处理文件复制到... \启动,但得到了同样的结果。
这里怎么回事?
答
如果这是你需要禁用FS重定向X64的系统,没有它$ SYSDIR不会指向真正的system32目录下:
!include x64.nsh
Section
...
SetOutPath $SYSDIR\GroupPolicy\Machine\Scripts\Startup
${DisableX64FSRedirection}
File myprog\mysystweak.bat
${EnableX64FSRedirection}
...
SectionEnd
您可以验证这是通过观看安装程序的问题Process Monitor
这就是问题并且完全解决 - 谢谢!为什么安装者不能这么说... – MikeyB 2011-05-05 19:21:04
@MikeyB:它会怎么知道?只有在真正需要时才能禁用重定向,因为其他操作(CreateShortcut等)可能必须从system32加载dll,并且需要从32位system32加载这些dll!安装程序基本上不可能知道您的批处理文件是否应该位于实际或重定向的$ sysdir中... – Anders 2011-05-05 20:20:21
@MikeyB:另外,如果\ GroupPolicy \ Machine \ Scripts \ Startup路径默认情况下不存在您可能想要在DisableX64FSRedirection块内移动SetOutPath调用... – Anders 2011-05-05 20:21:30