2010-06-01 2 views
0

Хорошо, я решил, что единственный способ сделать то, что я хочу делать с WiX (благодаря старому установщику, я не писал, что мне сейчас нужно обновить) с некоторыми ТАМОЖЕННЫМИ ДЕЙСТВИЯМИ.WiX custom action with DTF ... довольно смущен

В принципе, мне нужно создать резервную копию файла перед 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> 

И это ссылки на 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; 
     } 
    } 
} 

Любая помощь очень apprecaited. Спасибо!

ответ

1

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

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

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

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

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

+0

За исключением проблемы со старым установщиком, который я не писал, который хочет удалить файл XML при удалении. Вот продвижение, которое привело меня к этому вопросу ... http://stackoverflow.com/questions/2768701/stuck-on-preserving-config-file-in-wix-major-upgrade http: // stackoverflow.com/questions/2775763/problem-with-wix-major-upgrade http://stackoverflow.com/questions/2868218/wix-major-upgrade-refuses-to-replace-existing-file http: //stackoverflow.com/questions/2951355/wix-major-upgrade-need-different-behaviors-for-different-components – Joshua

+0

А, я вижу сейчас. Раньше у меня была эта проблема, и я сделал «патч» старого установщика, чтобы изменить его поведение, прежде чем вызывать мой установщик для серьезного обновления. Таким образом, когда RemoveExistingProducts вызывает старый продукт для удаления, плохое поведение не произойдет. –