卸载前复制Wix文件,卸载后还原。

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>

谢谢

1个回答

4
您只需要将<Custom Action="RestoreConfigFile" After="InstallInitialize" />更改为<Custom Action="RestoreConfigFile" After="RemoveExistingProducts " />即可。
这只是一个时间问题。您告诉所有三个操作在InstallInitialize之后进行,因此它们可能不按照编写顺序保持顺序。明确列出您想要的顺序总是一个更好的想法。更好、更完整的解决方法是:
<Custom Action="BackupConfigFile" After="InstallInitialize" />
<RemoveExistingProducts After="BackupConfigFile" />
<Custom Action="RestoreConfigFile" After="RemoveExistingProducts " />

编辑:(根据评论) 要在MSI中创建自定义操作,您需要创建一个CustomAction元素。还需要创建自定义操作的代码。但是,如果您只想复制文件,我建议使用 CopyFile元素。它比通过所有自定义操作步骤实现您所需的要容易得多。


错误 3:Custom/@After 属性的值 'RemoveExistingProducts' 不是合法标识符。标识符可以包含 ASCII 字符 A-Z、a-z、数字、下划线 (_) 或句点 (.)。每个标识符必须以字母或下划线开头。 - Ankit Sharma
好的,这是由于空间问题,但现在它显示:“在部分'Product:*'中未解决对符号'CustomAction:BackupConfigFile'的引用”。 - Ankit Sharma
1
你是否创建了一个名为BackupConfigFile的自定义操作?这不是Windows Installer将为您提供的标准自定义操作。 - Christopher B. Adkins
4
不行。如何通过调用copyfile函数来创建它? - Ankit Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接