NSIS拥有IIS系统文件的所有权

时间:2011-03-04 22:05:30

标签: iis-7 uac nsis file-permissions windows-server-2008-r2

我最近遇到了NSIS的一个问题,我认为这与UAC的互动有关,但我无法解释它,我不知道将来如何防止它。

我有一个安装程序,可以使用NsisIIS插件创建和删除IIS虚拟目录。安装程序似乎在我的Windows 7工作站上正常工作。当安装程序在Windows 2008 R2服务器上运行时,它安装正确,但卸载程序删除了所有虚拟目录并将IIS置于不可用状态;到了我必须删除默认网站并重新添加它。

我最终发现C:\Windows\System32\inetsrv\config下的所有IIS配置文件都有锁定图标。

Screenshot of IIS config files after NSIS runs

某些investigation似乎表明这意味着用户帐户已取得该文件的所有权,但所有文件都列为SYSTEM作为文件所有者。我确实检查了一个我没有运行安装程序的服务器,它确实将锁定图标应用于IIS文件。

我还看到NSIS安装程序创建的其他文件上出现了相同的锁图标。例如,我有一个使用NSIS ReplaceInFile处理的Web.Config.tpl文件,该文件在安装程序完成后也会显示锁定图标。 locked web.config file after installer runs

在我明确授予另一个用户帐户访问权限后,锁定图标就会消失。

After adding the IUSR to the file

我在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

我有三个问题源于此事件:

  1. 这是怎么发生的?
  2. 如何修复我的安装程序以防止它再次发生?
  3. 如何修复IIS配置文件的权限。

1 个答案:

答案 0 :(得分:1)

ReplaceInFile宏执行删除和重命名舞蹈,这可能会混淆文件安全信息。您可以尝试通过在要修改的文件的副本上使用宏来解决此问题,然后使用FileOpen并逐行复制新内容。

IIS插件使用IIS COM接口,不确定那里可能出现什么问题。确保不将空字符串传递给NsisIIS :: DeleteVDir可能是个好主意。