1

我使用热量来收集我需要的文件作为我的安装程序中的组件,并将它们写入一个单独的 wxs 文件,它工作得很好。

生成文件示例:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="AppData_dir_ref">
            <Directory Id="GUID" Name="C" />
            <Directory Id="GUID" Name="OLD" />
        </DirectoryRef>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="AppData_ComponentGroupId">
            <Component Id="GUID" Directory="GUID" Guid="{GUID}">
                <File Id="GUID" KeyPath="yes" Source="$(var.test)\C" />
            </Component> ...

... 等等....

现在我在我的 SetupMain 中使用它们:

  <?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

        <Product Id="*" 
                Name="SETUP TEST 1.0" 
                Language="1031"
                Version="1.0.0.0" 
                Manufacturer="bla" 
                UpgradeCode="ID">

            <Package Id="*"
                     Keywords="Installer"
                     InstallerVersion="300" 
                     Compressed="yes"
                     Languages='1031'
                     SummaryCodepage='1252'
                     Manufacturer="bla"
                     Description="Setup"
                     Comments="bla" 
                     InstallScope="perMachine"/>

            <Media Id="1" Cabinet="myapplication.cab" EmbedCab="yes" />

            <Directory Id="TARGETDIR" Name="SourceDir" >
                <Directory Id="LocalAppDataFolder" >
                    <Directory Id="AppData_dir_ref" Name="Test" />

                </Directory>
            </Directory>

            <Feature Id="F.Core" Title="bla" Level="1">
                <Feature Id="F.Data">
                    <ComponentGroupRef Id="AppData_ComponentGroupId" />
                </Feature>
            </Feature>

        </Product>
    </Wix>

不幸的是,我的所有组件和目录都出现了 ICE64 错误:

ICE64 错误:目录 XX 在用户配置文件中,但未在 RemoveFile 表中列出 ICE64 错误:组件 xxenter code here安装到用户配置文件它必须在 HKCU 下注册一个注册表项作为其密钥路径,而不是文件...

我该如何解决?我在互联网上搜索了一段时间,但找不到提示。这似乎是一件非常简单的事情,基本上我忘了在我的 main.js 中定义。我的目标是构建一个简单的安装程序,它在安装时使用 heat 命令复制文件构建中定义的目录结构,并在卸载时将其删除。

更新 1: 小更新我如何使用 RemoveFolder 和 RegistryValue 标签在以下答案的帮助下修复错误:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="AppData_dir_ref">
            <Directory Id="dir1" Name="C" />
            <Directory Id="dir2" Name="OLD" />
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="Cg.R">
            <Component Id="test" Directory="Data" Guid="...">
                <RemoveFolder Id="Data" On="uninstall" Directory="AppData_dir_ref"/>
                <RemoveFolder Id="Rf.1" On="uninstall" Directory="C"/>
                <RemoveFolder Id="Rf.2" On="uninstall" Directory="OLD"/>
                <RegistryValue Root="HKCU" Key="Software\...\..." Name="installed" Type="integer" Value="1" KeyPath="yes"/>
            </Component>
        </ComponentGroup>    
    </Fragment>

    <Fragment>
        <ComponentGroup Id="Cg.D">
            <Component Id="cmp5" Directory="dirC23" Guid="...">
                <File Id="fil2" Source="Bla\...\...\...xml" />
                <RemoveFolder Id="Rf.b" On="uninstall" Directory="dirC23"/>
                <RegistryValue Root="HKCU" Key="Software\...\..." Name="installed" Type="integer" Value="1" KeyPath="yes"/>
            </Component>

...我不知道这是否是最好的方法,但它现在可以工作。感谢您在将其与heat.exe 自动化一起使用时的任何改进建议或最佳实践。

最后一点是我仍然有警告:

ICE91:文件 x 将安装到每个用户目录 y 中,该目录不会根据 ALLUSERS 值而变化。即使需要按机器安装,此文件也不会复制到每个用户的配置文件中。

我读到这个警告是无害的。但无论如何,很高兴了解将来某个时候可能解决警告的原因。

4

1 回答 1

2

这两个验证错误都与安装到用户配置文件或在表达式中安装每个用户的数据有关。简而言之,为每个用户安装在磁盘上重复的文件: C:\Users\ User1 \MyFile.txt 、 C:\Users\ User2 \MyFile.txt 等...

您需要为安装到每个用户文件夹路径的所有文件夹添加删除文件夹条目,以便通过 MSI 验证。在您的情况下,这是 AppData_dir_ref。

同样,您还需要为安装到用户配置文件的组件设置HKCU 注册表项路径。因此,您无需设置C:\Users\User1\MyPath ,而是将安装到用户配置文件的组件的密钥路径设置为HKCU\Software\YourCompany\YourProduct之类的东西。

我没有设置 Wix 来测试编译,但这里有一个你需要的大致模型:

   <Component Id="RemoveFolder">
      <RemoveFolder Id="MyUserProfileFolder" On="uninstall" Directory="AppData_dir_ref"/>
      Your content here...
    </Component>

     ...

   <Component Id="UserProfile">
      <RegistryValue Root="HKCU" Key="SOFTWARE\YOURCOMPANY\YOURPRODUCT" Name="Complete" 
                     Value="TestValue" Type="string" KeyPath="yes"/>
      Your content here...
    </Component>
于 2016-09-10T19:26:53.797 回答