Installshield:调用icacls来更改特殊文件夹的写入权限

时间:2016-03-16 08:35:45

标签: windows acl installshield special-folders sid

我创建了一个Installshield 2015(Installscript),它在安装目录中安装.NET应用程序。

.NET应用程序依赖于SQL CE 4.0数据库。

安装过程在管理员或本地管理员帐户下运行。

在Installshield项目中,我将已清空的SQL CE 4.0数据库.sdf文件放入[CommonAppDataFolder]。安装过程将在以下位置复制数据库:

Windows Vista(或更高版本):C:\ ProgramData \ MYCOMPANY \ MYAPP \ database.sdf

在安装过程结束时,MSI将调用批处理文件以设置“Users”组的写入权限(因为在commonAppData文件夹中创建文件时所有权):

icacls C:\ProgramData\MYCOMPANY /T /grant *S-1-5-32-545:W

应用程序将在标准用户进程(不是由UAC提升)下执行,以便通过“Users”组的成员连接并写入压缩数据库。

我想知道是否允许我执行'icacls'命令而不为IT管理员创建安全漏洞,如果我不得不考虑其他组SID?

提前感谢您的回复,

1 个答案:

答案 0 :(得分:0)

在文件夹和&amp ;;上运行icacls命令是可以接受的。您的安装创建的文件。对任何其他文件夹执行此操作被视为安全漏洞(并且某些防御性软件能够检测并阻止它)。

但是,至少在公司环境中,我建议不要使用硬编码的SID,除非有充分的理由(例如,您的安装自己创建的用户或组)。
相反,设置应该提供一个对话框,允许指定将应用权限的用户和/或组(本地的,以及域名的)(有效地,那些可以运行应用程序的用户)。 您可以使用 SdLogonUserBrowse()函数来实现此目的。