使用DTF的WiX自定义动作......相当困惑

时间:2010-06-01 21:10:15

标签: wix custom-action dtf

好的,我已经决定了我能用WiX做的事情的唯一方法(感谢旧的安装程序,我没有写,我现在必须升级)是一些CUSTOM ACTIONS。

基本上,我需要在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标签,虽然我需要备份已存在的文件:

<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;
        }
    }
}

任何帮助都非常适合。谢谢!

1 个答案:

答案 0 :(得分:1)

我们可以回过头来看你为什么认为你需要一个自定义动作吗?

根据您尝试解决的问题,您应该能够做两件事之一

1)将XML文件放在它自己的组件中,标记为keyfile并设置为permanent。

2)创建一个虚拟DLL并为其提供1.0.0.0版本。永远不要增加此DLL的版本号。将DLL和XML文件放在一个组件中,DLL设置为keyfile,组件设置为permanent。

您现在应该能够进行重大升级并保留XML文件的内容,无论它是否曾被修改为包含用户数据。