【问题标题】:How to set permissions to IniFile in WiX?如何在 WiX 中设置 IniFile 的权限?
【发布时间】:2020-02-29 20:58:45
【问题描述】:

我的 WiX 脚本中有一个带有 IniFile 元素的组件。当应用程序在此帐户下运行时,我需要将本地服务的读取和写入权限设置为生成的 ini 文件,并且必须能够读取和写入 ini 文件。 Permission(Ex) 元素不能将 IniFile 作为父元素,因此我看不到 WiX 中设置 IniFile 元素权限的本机方式,有人可以提出解决方案吗?该文件安装到 CommonAppData 的子文件夹中。

在发行版中包含准备好的ini文件并将其简单地安装为文件的选项对我不利,因为文件的内容取决于单独的安装(路径、计算机名称等)。

【问题讨论】:

  • 在 Component 元素下,您将同时嵌套 元素。您将在 元素下嵌套您的 Permission(ex) 元素。你试过这个吗?
  • 我刚刚尝试过,但链接器会查找 File/@Name 中指定的文件,但显然没有找到它,因为该文件仅在安装 msi 包时创建,而不是在安装时创建已建成。

标签: wix


【解决方案1】:

您使用的是什么版本的 Wix?我正在使用 Wix v3.9 并且可以让它工作。好吧,我不明白为什么 PermissionEx 元素会关心“文件”选项卡的“名称”属性,尤其是当 PermissionEx 本身是嵌套/文件标签的子标签时。

这是我的示例项目。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="INIFile" Language="1033" Version="1.0.0.0" Manufacturer="Test" UpgradeCode="4549f852-c012-4180-ab66-5d972f3faf53">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate />

    <Feature Id="ProductFeature" Title="INIFile" Level="1">
        <ComponentGroupRef Id="ProductComponents" />
    </Feature>
</Product>

<Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="INSTALLFOLDER" Name="INIFile" />
        </Directory>
    </Directory>
</Fragment>

<Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">

     <Component Id="ProductComponent">
   <File Id="TestFile" KeyPath="yes" Source="E:\Learning\Test Projects\Files\test.txt"   Name="test.txt">
     <PermissionEx Id="Blah" Sddl="O-AB-C" />
   </File>
   <IniFile Id="TestIni" Action="addLine" Directory="INSTALLFOLDER" Key="Test" Name="Test" Section="Test" Value="Test"/>
    </Component> 
    </ComponentGroup>
</Fragment>
</Wix>

【讨论】:

  • 确实,我没有意识到我可以使用 安装一个空文件并立即通过 在同一组件中添加条目。我以为我必须通过 安装一个完整的 ini 文件,然后通过自定义操作以某种方式对其进行处理,或者仅使用 元素生成整个文件。因此,在我对原始帖子的评论中,我只是将 设置为相同的文件名,而没有这样的源文件,希望 WiX 会找出我需要的东西,但显然这违反了安装程序规则所以发生了错误。
  • 完整的评论太长了,所以这里是上面评论的第二部分:我可以确定一个组件中的多个元素总是按照它们在 WiX 文件中出现的顺序执行吗?我已经搜索过,但没有找到这个问题的明确答案。
  • 每个元素都由 InstallExecuteSequence 表中的特定操作处理。例如:在 IniFile 标签的 Wix 文档中,有一个名为 Windows Installer references 的部分。 IniFile 标记的 Windows 安装程序引用是 IniFile Table、RemoveIniFile Table。这意味着 IniFile 标记连接到 IniFile Table RemoveIniFile Table 。此外,阅读 IniFile 表 (msdn.microsoft.com/en-us/library/aa369282(v=vs.85).aspx) 的 MSDN 文档,还有另一条评论说明将调用哪个特定的标准操作
  • 您将看到以下注释:执行 WriteIniValues 操作或 RemoveIniValues 操作时会引用此表。因此,这意味着使用 IniFile 标记将填充 IniFile 表中的条目。 IniFile 表中的条目在 InstallExecuteSequence 表中由 WriteIniValues 操作或 RemoveIniValues 操作处理。 在构建的 msi 包中这些操作的顺序与您在 Wix 文件中声明元素的顺序没有任何关系。它们的顺序是由 Wix 工具根据 中规定的指南设置的
  • Windows 安装程序 SDK。有关建议的序列号列表,请查看:msdn.microsoft.com/en-us/library/aa372038(v=vs.85).aspx。当然,您可以随意更改这些标准动作的序列号,但如果您不确定自己在做什么,则不建议这样做。要查看在最终构建的 msi 包中分配的序列号,请使用名为 Orca 的 Windows 安装程序编辑器打开构建的 msi 包。 Orca 是 Windows 安装程序 SDK 的一部分。打开后,检查 InstallExecuteSequence 表中的序列号。
猜你喜欢
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 2011-05-15
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多