0

さて、私は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タグもありますが、すでに存在するファイルをバックアップする必要があります。

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

どんな助けでも大いに感謝します。ありがとうございました!

4

1 に答える 1

1

カスタム アクションが必要だと思われる理由について少しお話しいただけますか?

解決しようとしている問題に応じて、次の2つのいずれかを実行できるはずです

1) XML ファイルを独自のコンポーネントに入れ、キーファイルとしてマークし、永続的に設定します。

2) ダミーの DLL を作成し、バージョンを 1.0.0.0 にします。今後、この DLL のバージョン番号をインクリメントしないでください。DLL をキーファイルに設定し、コンポーネントを永続的に設定して、DLL と XML ファイルをコンポーネントに配置します。

これで、メジャー アップグレードを実行し、ユーザー データを含めるように変更されたかどうかに関係なく、XML ファイルの内容を保持できるようになります。

于 2010-06-01T23:57:37.190 に答える