Установщик, который добавляет запись в сценарии запуска GPO

Я нахожусь в процессе написания установщика с использованием NSIS, который добавит запись в объект групповой политики компьютера для запуска команды при загрузке системы.

# 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

Все идет хорошо, за исключением того, что в …\Startup ничего не появляется. Установщик думает, что все заработало:

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

Первоначально я пытался использовать CopyFiles для копирования командного файла из $INSTDIR в …\Startup, но получил тот же результат.

Что здесь не так?

по теме: https://serverfault.com/q/266338/2101


person MikeyB    schedule 05.05.2011    source источник


Ответы (1)


Если это система x64, вам нужно отключить перенаправление FS, без этого $SYSDIR не будет указывать на настоящий каталог system32:

!include x64.nsh

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

Вы можете убедиться, что проблема именно в этом, просмотрев установщик с помощью Process Monitor.

person Anders    schedule 05.05.2011
comment
Именно в этом проблема и исправлена ​​точно - спасибо! Почему установщик не сказал об этом... - person MikeyB; 05.05.2011
comment
@MikeyB: Откуда он знает? Перенаправление следует отключать только тогда, когда вам это действительно нужно, поскольку другие операции (CreateShortcut и т. д.) могут потребовать загрузки dll из system32, а эти dll необходимо загрузить из 32-битной system32! Установщик в принципе не может знать, должен ли ваш пакетный файл находиться в реальном или перенаправленном $sysdir... - person Anders; 06.05.2011
comment
@MikeyB: Кроме того, если путь \GroupPolicy\Machine\Scripts\Startup не существует по умолчанию, вы можете переместить вызов SetOutPath внутрь блока DisableX64FSRedirection... - person Anders; 06.05.2011