好的,我已经决定使用 WiX 做我想做的事情的唯一方法(感谢我没有写的旧安装程序,我现在必须升级)是使用一些自定义操作。
基本上,我需要在 RemoveExistingProducts 之前备份一个文件,并在 RemoveExistingProducts 之后再次恢复该文件。我认为这就是所谓的“类型 2 自定义操作”。
我想我理解的顺序,但是,我不明白的首先是我如何将数据传递给我的 C# 操作(文件所在的目录来自 WiX)以及如何引用我的 C#(DTF?)操作Binary 和 CustomAction 标记。
另外,所有这些都需要在标签中吗?所有的例子都表明了这一点。
这是我到目前为止在 .WXS 文件中的内容...
<Binary Id="backupSettingsAction.dll"
SourceFile="backupSettingsAction.CA.dll"/>
<CustomAction
Id="BackupSettingsAction"
BinaryKey="backupSettingsAction.dll"
DllEntry="CustomAction"
Execute="immediate" />
<InstallExecuteSequence>
<Custom Action="backupSettingsAction.dll" Before="InstallInitialize"/>
<RemoveExistingProducts After="InstallFinalize" />
<Custom Action="restoreSettingsAction.dll" After="RemoveExistingFiles"/>
</InstallExecuteSequence>
我需要备份的文件是以前安装的设置文件(需要保持完整),它位于目录中:
<Directory Id="CommonAppDataFolder" Name="CommonAppData">
<Directory Id="CommonAppDataPathways" Name="Pathways" />
</Directory>
甚至有一个组件标签,虽然我需要备份已经存在的文件:
<Component Id="Settings" Guid="A3513208-4F12-4496-B609-197812B4A953" NeverOverwrite="yes" >
<File Id="settingsXml" ShortName="SETTINGS.XML" Name="Settings.xml" DiskId="1" Source="\\fileserver\Release\Pathways\Dependencies\Settings\settings.xml" Vital="yes" />
</Component>
这是引用 Visual Studio (2005) 为我创建的 C# 文件:
namespace backupSettingsAction
{
public class CustomActions
{
[CustomAction]
public static ActionResult CustomAction1(Session session)
{
session.Log("backing up settings file");
//do I hardcode the directory and name of the file in here, or can I pass them in?
return ActionResult.Success;
}
}
}
非常感谢任何帮助。谢谢!