Недавно я столкнулся с проблемой в NSIS, которая, по моему мнению, связана с взаимодействием с UAC, но я затрудняюсь объяснить это и не знаю, как предотвратить это в будущем.
Iиметь установщик, который создает и удаляет виртуальные каталоги IIS с помощью плагина NsisIIS.Установщик корректно работал на моей рабочей станции Windows 7.Когда установщик запускался на сервере Windows 2008 R2, он устанавливался правильно, но деинсталлятор удалил все виртуальные каталоги и поставил IIS в нерабочее состояние;до такой степени, что мне пришлось удалить веб-сайт по умолчанию и повторно добавить его.
В конечном итоге я обнаружил, что все файлы конфигурации IIS в C:\Windows\System32\inetsrv\config
имеют значок блокировки на них.
![Screenshot of IIS config files after NSIS runs](https://i.stack.imgur.com/6259B.png)
Некоторые расследование , похоже, указывают на то, что это означает, что учетная запись пользователя стала владельцем файла, однако все файлы, перечисленные SYSTEM
в качестве файлавладелец.Я проверил другой сервер, на котором я не запускал установщик, и у не есть значок блокировки, примененный к файлам IIS.
Я также видел, что появляется тот же значок блокировкина других файлах, которые создает установщик NSIS.Например, у меня есть файл Web.Config.tpl
, который обрабатывается с использованием NSIS ReplaceInFile, который также отображается со значком замка после завершения установки.![locked web.config file after installer runs](https://i.stack.imgur.com/BKJPQ.png)
После того, как я явно предоставил доступ к файлу другой учетной записи пользователя, значок блокировки исчезает.
![After adding the IUSR to the file](https://i.stack.imgur.com/12R6P.png)
Я запускаю установщик под локальным администраторомучетная запись на сервере 2008 R2, поэтому я не получаю приглашение UAC.Вот соответствующий код из install.nsi
файла
RequestExecutionLevel admin
Section "Application" APP_SECTION
SectionIn RO
Call InstallApp
SectionEnd
Section "un.Uninstaller Section"
Delete "$PROGRAMFILES\${PROGRAMFILESDIR}\Uninstall.exe"
Call un.InstallApp
SectionEnd
Function InstallApp
File /oname=Web.Config Web.Config.tpl
!insertmacro ReplaceInFile Web.Config %CONNECTION_STRING% $CONNECTION_STRING
FunctionEnd
Function un.InstallApp
ReadRegStr $0 HKLM "Software\${REGKEY}" "VirtualDir"
NsisIIS::DeleteVDir "$0"
Pop $0
FunctionEnd
У меня есть три вопроса, связанных с этим инцидентом:
- Как это произошло?
- Какя могу исправить мой установщик, чтобы предотвратить его повторение?
- Как я могу восстановить разрешения для файлов конфигурации IIS.