解决IIS7.0部署文件在 windows 2008 R2 64位C盘中无法注册问题
问题描述:在xxx项目安装包测试过程中,发现授权注册页面,无论输入正确或者错误的验证码,点击“注册”均无反应。经与开发人员详细分析,寻找到该问题的最终原因为:安装包安装程序的路径为C盘(WINDOWS SERVER2008 R2 64位),C盘安全级别很高,而授权注册动作需对文件夹MvcWeb和WebApi进行写入操作,而IIS7.0内置用户NETWORK SERVICE无法对处于C盘的文件夹MvcWeb和WebApi执行写入操作,也就无法成功授权注册。
针对以上问题,开发人员提供了两种方案:
1、IIS7.0中应用程序池使用内置账户LOCALSYSTEM。
2、修改默认路径为D盘,若用户将软件安装在C盘,则安装手册中提供用户完成软件安装后,手动赋予网站Users或者Everyone或者Network Service的完全控制权限的步骤,即对文件夹MvcWeb和WebApi添加Network Service用户组。
综合来讲,方案1由于LOCALSYSTEM权限过高,非常容易被黑客或病毒侵入系统导致无法挽回的损失,这是万万不能采用的。而方案2固然可行,但一定程序上反映出安装包无法自动化的一面。那么,有没有一种方法,可以无需手动操作,也能对网站赋予权限呢。
C:\windows\system32有一个程序:icacls.exe,百度解释是:显示或修改自由访问控制列表 (Dacl)上指定的文件,并指定目录中的文件应用于存储的 Dacl。
于是,开发人员采用批处理的方式解决了自动对网站赋予权限的问题。具体方法如下:
FileInsertLine(TARGETDIR ^ "\\Grant.bat", "\"%SystemRoot%\\System32\\icacls.exe\" \"" + TARGETDIR + "\" /T /C /Q /grant Everyone:F", 1, BEFORE);
LaunchAppAndWait(TARGETDIR ^ "\\Grant.bat", "", WAIT);
该方法的成功使用,终于解决了软件安装在C盘无法注册的问题,鉴于时代的发展,越来越多的软件产品都会安装在WINDOWS SERVER2008 R2 64位,或者WINDOWS7 /WINDOWS8操作系统中,也将可能遇到类似情况,相信此方法可以帮助到您。
备注:非常感谢所有提供资料的项目组成员。。