我正在使用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是否会这样做,大概是出于安全考虑?如果是这样,有没有办法禁用它?如果必须的话,我可以写一个自定义动作来改变安全性。
答案 0 :(得分:0)
自定义权限似乎在安装过程中通过WiX元素或自定义操作(意外地)应用 (下面讨论的其他可能原因 - 也许检查主要特别是升级文件还原可能性 - 或者组策略可能性。)
可以在 WiX源或已编译的MSI文件或详细日志文件中找到调试线索
(举几个地方开始)。以下每个选项的详细信息。以下内容非常简洁,有机地#34; - 它进化了一点 - 所以它有点多余。我会保持原样。
主要升级文件还原 :安装后文件的权限较少,这很奇怪。也许这表示在安装期间重新创建组策略或文件?对于如此重要的文件,后者听起来不太可能 - 但是如果更新是主要升级并且原始MSI将INI文件作为文件(而不是作为INI文件条目)安装并且将其设置为非永久性文件。
在这种情况下,INI文件将被卸载然后重新安装 - 可能会剥夺任何自定义ACL权限 (ACL权限非常复杂,它们可以继承和覆盖,拒绝或授予等...)。添加到旧文件的任何自定义INI条目也将被清除 - 安装后检查缺少的自定义条目。
这是一个常见问题( 主要升级文件还原 ):主要升级文件卸载并重新安装,使文件在清除和安装后显示为还原或覆盖相反,可以触发许多其他问题而不是ACL问题。
意外许可的其他潜在来源也是可能的:
我的2美分:如果这是一个内部的企业软件包,use group policy to apply permissioning而是从您的软件包中删除操作(除非您部署到组策略控制之外的计算机 - 但是那么你可以拥有一个特殊的包,它只进行许可并保持对主包的许可 - 使其不易出错。
您描述的问题非常有趣。我不知道WiX中会自动干扰ACL,但我不能保证。但是,有一些构造用于在显式指定ACL时更改ACL - 您需要检查MSI以获取这些构造(如下所述)
但首先:我使用WiX MSI进行了快速的冒烟测试以查看是否可以复制问题,我无法复制。我担心这可能会在最近的Windows Update中发生变化。换句话说,某种安全修复程序在没有任何人的意识的情况下分发,从而改变了Windows Installer(it wouldn't be the first one)中的核心功能。
有关如何在MSI中实施ACL权限的一些信息。基本上,您可以使用现成的WiX元素,或运行您自己的自定义操作。
有几个WiX元素处理ACL权限,它们可以在添加到标准内置MSI表的设置中生成,也可以在自定义WiX表中添加条目。 在您的WiX源中查找这些元素(如果有)(samples):
我不确定为什么WiX家伙决定支持所有这些不同的许可选项 - 肯定有充分的理由 - 因为必须为他们维护很多工作。我自己编写了许可代码,在我看来,这是一个处理吸气复杂性的定时炸弹。权限置换就像你不会相信,但这不是主题。在我的浓缩视图中,很少有权限有任何意义,但ACL许可允许完全的灵活性 - 你需要用脚射击自己所需的所有绳索。我更喜欢通用&#34;宏&#34;:GenericAll="yes"
,GenericExecute="yes"
,GenericRead="yes"
,GenericRead="no"
等...
此外,您可以使用自定义操作来调用命令行权限工具,例如subinacl.exe,cacls.exe,xcacls.exe,{ {3}}或其他几个 - 出于可靠性和安全性原因,我绝对不会推荐。当有其他选项时,自定义操作永远不会更好:icacls.exe
由于技术原因我不会使用的Permission
元素,我从未测试过的内置MsiLockPermissionsEx
表。特定于WiX的PermissionEx
元素可能是我在需要此ACL权限时选择使用的。
如果您具有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%
准备好。
我还会记下您所使用的操作系统,并确定是否仅在此操作系统上看到问题?这还涉及确定您是否安装了最新的修补程序。