1

我们这里有点情况。我们正在使用以下代码段在安装时编写一个 ini 文件:

<Component Id="_CFG" Guid="{CADE766F-3AF0-40A6-9D35-12AC4FD5B278}" Feature="DefaultFeature" KeyPath="yes" Location="either" NeverOverwrite="yes">
 <CreateFolder Directory="CFG" />
 <Environment Id="SharedAppend" Name="Path" Value="[CommonFilesFolder]Company Shared\MyDir" Separator=";" Action="set" Part="last" Permanent="yes" System="yes" />
 <IniFile Id="MyCFG.ini1" Action="addLine" Directory="CFG" Key="LOCAL_ROOT" Name="ata.ini" Section="ALIAS" Value="[CommonAppDataFolder]Company\MyDir" />
  <IniFile Id="MyCFG.ini73" Action="addLine" Directory="CFG" Key="APPLICATIONS" Name="ata.ini" Section="GENERAL" Value="Product1;Product2;Product3;Product4;" />
 <RegistryValue Id="Registry47asdf" Root="HKLM" Key="SOFTWARE\Company\MyProd" Name="LocalRoot" Value="[CommonAppDataFolder]Company\MyDir\" Type="string" />
</Component>

此安装由管理员用户执行。现在第二个用户(标准)通过一些应用程序修改这个文件。之后,当第三个用户登录并启动应用程序时,会出现 Windows 安装程序进度对话框,这会将文件恢复到原始文件。

我想,“NeverOverwrite”会阻止这种情况,但它没有奏效。

我假设“NeverOverwrite”属性可能不适用于元素。

任何人都知道如何防止此文件通过 Windows 安装程序服务恢复?

多谢了。。

4

1 回答 1

0

修改 ini 文件不应触发Windows Installer Resiliency发生的情况是,当组件的密钥路径(即某个文件或注册表项)消失时,将重新安装组件。

所以你需要弄清楚这些事情:

  1. 哪个组件安装INI 文件?(我想这不是您在问题中显示的组件,因为它只修改INI 文件。)
  2. 该组件的密钥路径是什么?(如果没有明确标记,wix 将采用该组件中的第一个文件或注册表项。)
  3. 为什么 keypath 文件或注册表项会消失,从而触发重新安装该组件?

此外,您可能需要考虑将 ini 文件放在它自己的组件中。这样,它将是它自己的密钥路径,并且只有在它实际消失时(而不是在某些其他文件或注册表项消失时)才会由 Windows 安装程序弹性机制重新安装。

于 2012-04-20T14:03:56.383 回答