9

新しいバージョンをインストールする前に、メジャー アップグレードを実行し、既存の製品をアンインストールしています。しかし、既存の構成ファイルを保持したい。

以前のバージョンには Permanent="yes" がなかったため、アンインストール時に構成ファイルが削除されます。

そして、アンインストールする前に、「app.config」を「app.config.bak」としてコピーする方法を教えてください。アンインストール後、「app.config.bak」から「app.config」に戻します。

<DirectoryRef Id="INSTALLDIR">
  <Component Id="BackupConfigComponent" Guid="87368AF7-4BA2-4302-891A-B163ADDB7E9C">
    <CopyFile Id="BackupConfigFile" SourceDirectory="INSTALLFOLDER" SourceName="app.config" DestinationDirectory="INSTALLFOLDER" DestinationName="app.config.bak" />
  </Component>
</DirectoryRef>

<DirectoryRef Id="INSTALLDIR">
  <Component Id="RestoreConfigComponent" Guid="87368AF7-4BA2-4302-891A-B163ADDB7E9C">
    <CopyFile Id="RestoreConfigFile" SourceDirectory="INSTALLFOLDER" SourceName="app.config.bak" DestinationDirectory="INSTALLFOLDER" DestinationName="app.config" />
  </Component>
</DirectoryRef>


<InstallExecuteSequence>
  <Custom Action="BackupConfigFile" After="InstallInitialize" />
  <RemoveExistingProducts After="InstallInitialize" />
  <Custom Action="RestoreConfigFile" After="InstallInitialize" />
</InstallExecuteSequence>

ありがとう

4

1 に答える 1

4

あなたがしなければならないのは<Custom Action="RestoreConfigFile" After="InstallInitialize" /><Custom Action="RestoreConfigFile" After="RemoveExistingProducts " />

それは単にタイミングの問題です。InstallInitialize の後に 3 つのアクションすべてを実行するように指示しているため、記述された順序にとどまらない可能性が非常に高くなります。必要な順序を明示的にリストすることを常にお勧めします。より良い、完全な修正は次のようになります。

<Custom Action="BackupConfigFile" After="InstallInitialize" />
<RemoveExistingProducts After="BackupConfigFile" />
<Custom Action="RestoreConfigFile" After="RemoveExistingProducts " />

編集: (コメントに基づく) MSI でカスタム アクションを作成するには、CustomAction 要素を作成する必要があります。カスタム アクションを作成するためのコード ビハインドも必要です。ただし、ファイルをコピーするだけの場合は、CopyFile要素を使用することをお勧めします。すべてのカスタム アクション手順を実行して、目的を達成するよりもはるかに簡単でクリーンです。

于 2013-06-21T11:22:15.937 に答える