Хорошо, я решил, что единственный способ, которым я могу делать то, что я хочу сделать с 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;
}
}
}
Любая помощь очень ценится. Спасибо!