WiX是否更改了我的Notes.ini文件的权限?

时间:2018-03-16 15:37:19

标签: wix windows-installer installer

我正在使用WiX安装程序来安装Notes插件。我使用IniFile操作设置notes.ini中的字段,告诉Notes加载我的插件。我正在使用WiX 3.7.1224.0

<IniFile Id="HLBridgeDLLINI" Action="addTag" Directory="LOTUSNOTESINIDIRECTORY" Name="Notes.ini" Section="Notes" Key="AddInMenus" Value="HLBridge.dll"/>
<IniFile Id="HLClientDLLINI" Action="addTag" Directory="LOTUSNOTESINIDIRECTORY" Name="Notes.ini" Section="Notes" Key="EXTMGR_ADDINS" Value="HLClient.dll"/>

在运行安装程序之前,Everyone可以写入notes.ini文件。安装后,安全属性中缺少Everyone用户。 WiX是否会这样做,大概是出于安全考虑?如果是这样,有没有办法禁用它?如果必须的话,我可以写一个自定义动作来改变安全性。

1 个答案:

答案 0 :(得分:0)

短版

自定义权限似乎在安装过程中通过WiX元素或自定义操作(意外地)应用 (下面讨论的其他可能原因 - 也许检查主要特别是升级文件还原可能性 - 或者组策略可能性。)

可以在 WiX源已编译的MSI文件详细日志文件中找到

调试线索 (举几个地方开始)。以下每个选项的详细信息。

以下内容非常简洁,有机地#34; - 它进化了一点 - 所以它有点多余。我会保持原样。

其他可能原因

主要升级文件还原 :安装后文件的权限较少,这很奇怪。也许这表示在安装期间重新创建组策略或文件?对于如此重要​​的文件,后者听起来不太可能 - 但是如果更新是主要升级并且原始MSI将INI文件作为文件(而不是作为INI文件条目)安装并且将其设置为非永久性文件。

在这种情况下,INI文件将被卸载然后重新安装 - 可能会剥夺任何自定义ACL权限 (ACL权限非常复杂,它们可以继承和覆盖,拒绝或授予等...)。添加到旧文件的任何自定义INI条目也将被清除 - 安装后检查缺少的自定义条目。

这是一个常见问题( 主要升级文件还原 ):主要升级文件卸载并重新安装,使文件在清除和安装后显示为还原或覆盖相反,可以触发许多其他问题而不是ACL问题。

意外许可的其他潜在来源也是可能的:

  • 修复/修改针对同一INI文件的另一个与Lotus Notes相关的MSI包的操作?
  • 另一个MSI作为同一设置包的一部分进行了许可吗?
  • 组策略/活动目录进程强制执行标准ACL? (sample
  • 以管理模式运行的可执行文件/服务做一些时髦的事情?
  • 预定任务干扰? (some possibilities
  • 登录脚本做一些时髦的事情? (在你的情况下非常不可能,但是登录脚本可以做很多事情&#34;任何东西&#34; - 他们这样做)
  • 其他一些意想不到的消息来源。 具有管理员权限的东西可以做到这一点 - 这是明显的共同点

我的2美分:如果这是一个内部的企业软件包,use group policy to apply permissioning而是从您的软件包中删除操作(除非您部署到组策略控制之外的计算机 - 但是那么你可以拥有一个特殊的包,它只进行许可并保持对主包的许可 - 使其不易出错。

的ACL

您描述的问题非常有趣。我不知道WiX中会自动干扰ACL,但我不能保证。但是,有一些构造用于在显式指定ACL时更改ACL - 您需要检查MSI以获取这些构造(如下所述)

但首先:我使用WiX MSI进行了快速的冒烟测试以查看是否可以复制问题,我无法复制。我担心这可能会在最近的Windows Update中发生变化。换句话说,某种安全修复程序在没有任何人的意识的情况下分发,从而改变了Windows Installer(it wouldn't be the first one)中的核心功能。

ACL-的权限管理

有关如何在MSI中实施ACL权限的一些信息。基本上,您可以使用现成的WiX元素,或运行您自己的自定义操作

有几个WiX元素处理ACL权限,它们可以在添加到标准内置MSI表的设置中生成,也可以在自定义WiX表中添加条目。 在您的WiX源中查找这些元素(如果有)samples):

我不确定为什么WiX家伙决定支持所有这些不同的许可选项 - 肯定有充分的理由 - 因为必须为他们维护很多工作。我自己编写了许可代码,在我看来,这是一个处理吸气复杂性的定时炸弹。权限置换就像你不会相信,但这不是主题。在我的浓缩视图中,很少有权限有任何意义,但ACL许可允许完全的灵活性 - 你需要用脚射击自己所需的所有绳索。我更喜欢通用&#34;宏&#34;:GenericAll="yes"GenericExecute="yes"GenericRead="yes"GenericRead="no"等...

此外,您可以使用自定义操作来调用命令行权限工具,例如subinacl.execacls.exexcacls.exe,{ {3}}或其他几个 - 出于可靠性和安全性原因,我绝对不会推荐。当有其他选项时,自定义操作永远不会更好:icacls.exe

由于技术原因我不会使用的Permission元素,我从未测试过的内置MsiLockPermissionsEx表。特定于WiX的PermissionEx元素可能是我在需要此ACL权限时选择使用的。

检查MSI

如果您具有WiX源访问权限,则应该能够找到导致问题的权限元素或自定义操作元素。

但是,如果您没有WiX源访问,您还可以检查实际的已编译MSI文件,以查找可应用自定义权限的任何自定义功能。我将重点关注Why is it a good idea to limit the use of custom actions in my WiX / MSI setups?以及MSI中找到的任何自定义WiX / MSI表。

换句话说:检查用于安装的已编译MSI文件,用于设置ACL的自定义操作自定义表Custom Action table。您找不到的任何表都有自定义。

要检查MSI,请使用Orca或同等工具。请参阅此答案(向下)以获取可以使用的工具列表(商业或免费):See MSDN for a list of standard MSI tables

详细记录

您也可以执行我一直以来的操作:为有问题的MSI安装创建正确,详细的日志。这给你一些东西开始弄清楚发生了什么 - 因此在某些情况下它可能比检查MSI更好。 How can I compare the content of two (or more) MSI files?

或者,您可以为所有MSI安装启用日志记录。有关如何执行此操作,请参阅You can find some information on how to do logging here(部分&#34; 全球所有机器上的设置&#34;)。我更喜欢为开发和测试框启用此默认日志记录,但它确实会影响安装性能并将大量日志文件添加到临时文件夹(您可以暂时删除一次)。通常情况下,您会突然看到MSI错误并希望您有一个日志 - 现在您可以随时在%tmp%准备好。

我还会记下您所使用的操作系统,并确定是否仅在此操作系统上看到问题?这还涉及确定您是否安装了最新的修补程序。