WiX настраиваемое действие с DTF ... довольно запутанный - PullRequest
0 голосов
/ 02 июня 2010

Хорошо, я решил, что единственный способ, которым я могу делать то, что я хочу сделать с 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>

И это ссылка на файл C #, который Visual Studio (2005) создал для меня:

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 Ответ

1 голос
/ 02 июня 2010

Можем ли мы вернуться к тому, почему вы думаете, что вам нужно на какое-то время настраиваемое действие?

В зависимости от проблемы, которую вы пытаетесь решить, вы должны быть в состоянии сделать одну из двух вещей

1) Поместите файл XML в его собственный компонент, помеченный как ключевой файл и установленный как постоянный.

2) Создайте фиктивную DLL и установите для нее версию 1.0.0.0. Никогда не увеличивайте номер версии этой DLL в будущем. Поместите DLL-файл и XML-файл в компонент, для которого DLL-файл имеет значение keyfile, а компонент - постоянный.

Теперь вы сможете выполнять крупные обновления и сохранять содержимое файла XML независимо от того, был ли он когда-либо изменен для включения пользовательских данных или нет.

...