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

Windows Installshield:调用icacls更改特殊文件夹的写入权限,windows,acl,installshield,special-folders,sid,Windows,Acl,Installshield,Special Folders,Sid,我创建了Installshield 2015(Installscript),它在安装目录中安装.NET应用程序 NET应用程序依赖于SQL CE 4.0数据库 安装过程在管理员或本地管理员帐户下运行 在Installshield项目中,我将清空的SQL CE 4.0 Database.sdf文件放入[CommonAppDataFolder]中。安装过程将在以下位置复制数据库: Windows Vista(或更高版本):C:\ProgramData\MYCOMPANY\MYAPP\database

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

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

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

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

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

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

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

我想知道是否允许我在不为IT管理员创建安全漏洞的情况下执行“icacls”命令,以及是否必须考虑其他组SID


提前感谢您的回复,

可以在安装创建的文件夹和文件上运行icacls命令。在任何其他文件夹上这样做都被视为安全漏洞(一些防御软件能够检测并防止它)

但是,至少在公司环境中,我建议不要使用硬编码SID,除非有很好的理由(例如,您的安装自行创建的用户或组)。
相反,安装程序应显示一个对话框,允许指定将应用权限的用户和/或组(本地用户和域用户,如果适用)(实际上是可以运行应用程序的用户和/或组)。

你可以使用SDLogOnErrBuffSee()函数来解决这个问题。

边问题(在你发现这是个好主意之后):你是否考虑过使用StasObjistRePress来避免向ICACL发出外壳?根本没有,我会考虑使用它,因为它看起来更像用AuthScript处理ACL赋值的一种更优雅的方式。谢谢,我将尝试实现此对话框并存储用户/组选择,然后将SetObjectPermissions应用于选择的每个项目。我会回来把这个标记为答案。总的来说,最好通过编写单个installscript代码块而不是Dos批处理文件来管理ACL权限。亲切的问候,快到了!在安装过程中调用SdLogonUserBrowse对话框,但单击浏览按钮后,将显示一个弹出窗口“ISNetApiRT.dll未加载或加载dll时出错。此操作需要加载此dll。请验证dll是否在SUPPORTDIR目录中”。正确!我完全忘了。您应该将其添加到项目中的“支持文件\独立于语言”部分(在Bahvior和Logic下)。从C:\Program Files(x86)\InstallShield\2015\Redist\Compressed Files\Language Independent\Intel 32\ISNetApiRT.dllI中复制它。我已经在IS project->Behavior and Logic->Support Files/Billboard中插入了上面的文件,但对话框中仍然出现相同的错误。为了调试,我创建了一个新的Installscript MSI项目,ISNetApiRT.dll已存在于支持文件/公告牌部分中。我已经修改了Build->设置并添加了netapart.obl引用。然后,我重载了行为和逻辑->安装脚本->移动数据之前->onfirstUI脚本之前。我已经构建并运行了简单的MSI项目,但当单击SdLogonUserBrowse对话框的Browse按钮时,仍然会出现“未加载dll”错误。
icacls C:\ProgramData\MYCOMPANY /T /grant *S-1-5-32-545:W