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>

このインストールは、管理者ユーザーによって実行されます。次に、2 番目のユーザー (標準) がアプリケーションを介してこのファイルを変更します。その後、3 番目のユーザーがログインしてアプリケーションを起動すると、Windows インストーラーの進行状況ダイアログが表示され、ファイルが元のファイルに復元されます。

「NeverOverwrite」でこれを防げると思ったのですが、うまくいきませんでした。

「NeverOverwrite」属性は適用されない可能性があると想定していますエレメント。

このファイルが Windows インストーラー サービスによって復元されないようにする方法を知っている人はいますか?

本当にありがとう..

4

1 に答える 1

0

iniファイルを変更しても、Windowsインストーラの復元力はトリガーされません。何が起こるかというと、そのキーパス(つまり、特定のファイルまたはレジストリエントリ)が消えると、コンポーネントが再インストールされます。

したがって、これらのことを理解する必要があります。

  1. どのコンポーネントがINIファイルをインストールしますか?(これは、 INIファイルのみを変更するため、質問で示したコンポーネントではないと思います。)
  2. そのコンポーネントのキーパスは何ですか?(明示的にマークされていない場合、wixはそのコンポーネントの最初のファイルまたはレジストリエントリを取得します。)
  3. キーパスファイルまたはレジストリエントリが消えて、そのコンポーネントの再インストールがトリガーされるのはなぜですか?

また、iniファイルを独自のコンポーネントに配置することを検討することもできます。このように、それはそれ自身のキーパスになり、実際に消えたとき(他のファイルやレジストリエントリが消えたときではなく)にWindowsインストーラの復元メカニズムによってのみ再インストールされます。

于 2012-04-20T14:03:56.383 に答える