【问题标题】:How to set ACL for directory in msi installer with vb script?如何使用 vb 脚本为 msi 安装程序中的目录设置 ACL?
【发布时间】:2012-03-05 15:13:00
【问题描述】:

我想在安装运行时修改 C:\ProgramData 中用户的权限。只需添加 WRITE 权限。我正在使用 vb 脚本来编辑 msi 表。

此查询运行正常,正在添加行,但安装程序未设置权限。我这里使用的是 ALL 权限设置,我不知道正确的通用读/写值是什么。

query = "INSERT INTO LockPermissions (LockObject, Table, User, Permission) VALUES ('COMMONAPPDATAFOLDER', 'Directory', 'Users', 268435456)”

我找不到一个可行的例子,这一定是一个很常见的场景。我认为 COMMONAPPDATAFOLDER 解析为这样的路径:

C:\ProgramData\CompanyFoo\Foo 产品名称

但我不确定。我想在“CompanyFoo”目录上设置权限,但我不知道如何。

编辑:这是用于构建脚本,而不是自定义 msi 操作。我的问题是我没有使用像 installshield 这样的安装框架,我正在修改 Visual Studio 部署项目的残缺输出。

【问题讨论】:

  • 不,更改系统文件夹的权限并不常见。也不推荐。
  • 我已经在 CommonAppDataFolder/Company/Product 级别做过几次。问题是,当您进入锁定环境并且应用程序保存预期可用于机器上的其他配置文件的文件时,您究竟可以/应该将它放在哪里?还有其他我不知道的位置吗?
  • 我试图建议开发人员编写一个可以将文档上传和下载到虚拟商店的服务,但他们不想这样做。他们只是打开了产品数据文件夹。基本上我们需要一个 Public Documents\Company\Product 类型结构。
  • @michael:谢谢你的回答。我的研究表明并非如此。请参考stackoverflow.com/questions/5116911/…(标注答案)。这正是我想要做的。我还看到主要的软件供应商也在这样做。
  • 迈克尔在一般情况下是正确的。我见过许多主要的软件供应商做了他们不应该做的事情。

标签: vbscript windows-installer orca


【解决方案1】:

我终于让它工作了。对于 vs2010 安装项目,COMMONAPPDATAFOLDER 实际上不是 c:\programdata,它是你在项目设置中设置 foocompany 的 c:\programdata\foocompany。所以这是正确的。 268435456 = 所有权限。

'COMMONAPPDATAFOLDER
query = "INSERT INTO `LockPermissions` (`LockObject`, `Table` , `User`, `Permission`) VALUES ('COMMONAPPDATAFOLDER', 'CreateFolder', 'Everyone',  268435456)" 
Set view = database.OpenView (query)         
view.Execute

query = "INSERT INTO `LockPermissions` (`LockObject`, `Table` , `User`, `Permission`) VALUES ('COMMONAPPDATAFOLDER', 'CreateFolder', 'Administrators',  268435456)" 
Set view = database.OpenView (query)         
view.Execute

【讨论】:

    【解决方案2】:

    为什么需要自定义操作来将行插入到 lockpermissions 表中?只需将其直接写入 MSI,因为域和用户列是可格式化的。

    【讨论】:

    • 每次需要执行此操作时,我都无法使用 orca 编辑 msi。这是用于自动构建。
    • 这也不是“动作”。它是构建脚本的一部分。
    • 您使用什么工具来构建原始 MSI?
    • 我正在为 Windows 窗体应用程序使用 vanilla Visual Studio 部署项目。一切正常,除非用户打开了 UAC。然后他们的数据写入到不符合“所有用户”要求的爆破虚拟存储中。
    • 啊,这说明了您需要在构建后调整 MSI。我可以建议看两件事。 1) 使用 WiX DTF 的 Microsoft.Deployment.WindowsInstaller 库编写 C#/VB 类来更新 MSI。与其维护 SQL 语句列表,不如考虑生成一个转换,然后简单地使用 postbuild 将转换应用到基本 MSI。这样您就可以在 Orca 而不是 SQL 中维护转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多