Как получить доступ к данным пользовательского действия сессии (свойства) во время установки и удаления в Wix?

Можно ли сказать мне что не так со следующим кодом? Я могу получить доступ к данным пользовательского действия во время установки, и я добавляю их значения к набору пользовательского действия сессии. Однако во время удаления I пары значения не находятся в наборе.

public class CustomActions
{
    //This action is only called during application install
    [CustomAction]
    public static ActionResult CreateToolbar(Session session)       
    {
        //This works fine the value is properly sent from wix script
        //The variable toolbarName has the expected value
        string toolbarName = session["VSTOCustomAction_ToolbarName"];

        //Save the value for uninstaller
        session.CustomActionData.Add("VSTOCustomAction_ToolbarName", toolbarName);
        ...
    }

    //This action is only called during application uninstall
    [CustomAction]
    public static ActionResult RemoveToolbar(Session session)
    {
        //Get the toolbar name and remove it
        //Why does the following call return null?
        string toolbarName = session.CustomActionData["VSTOCustomAction_ToolbarName"];          
        ...
    }
}

Below is the WIX part that calls the above custom action.

<!-- Include the VSTO Custom action  -->
<Binary Id="VSTOCustomAction" SourceFile="CustomAction.CA.dll"/>
<CustomAction Id="CreateToolbar" BinaryKey="VSTOCustomAction" DllEntry="CreateToolbar" Execute="immediate"/>
<CustomAction Id="RemoveToolbar" BinaryKey="VSTOCustomAction" DllEntry="RemoveToolbar" Execute="immediate"/>
...
<CustomAction Id="PropertyAssign_ToolbarName" Property="VSTOCustomAction_ToolbarName" Value="MyToolBarName"/>
...
<!-- Modify the install sequence to call our custom action -->
<InstallExecuteSequence>
  <Custom Action="PropertyAssign_ToolbarName" Before="CreateToolbar"><![CDATA[(&ToolbarComponent = 3) AND NOT (!ToolbarComponent = 3)]]></Custom>
  <Custom Action="CreateToolbar" After="InstallFinalize"><![CDATA[(&ToolbarComponent = 3) AND NOT (!ToolbarComponent = 3)]]></Custom>
  <Custom Action="RemoveToolbar" After="InstallFinalize"><![CDATA[(&ToolbarComponent = 2) AND NOT (!ToolbarComponent = 2)]]></Custom>
</InstallExecuteSequence>   
1
задан Brian Tompsett - 汤莱恩 18 January 2016 в 12:25
поделиться

2 ответа

MSI не сохраняет свойства после установки. Прочтите следующее, чтобы найти хорошее решение.

"Шаблон" Запомнить свойство "в наборе инструментов WiX." http://robmensching.com/blog/posts/2010/5/2/The-WiX-toolsets-Remember-Property-pattern

2
ответ дан 2 September 2019 в 22:39
поделиться

Похоже, что вы создаете свойство VSTOCustomAction_ToolbarName только при установке ToolbarComponent, поэтому при попытке удаления свойство VSTOCustomAction_ToolbarName не создается и не устанавливается.

Одним из способов решения этой проблемы может быть сохранение имени панели инструментов в ключе реестра Windows вместо создания свойства, содержащего это значение, чтобы его можно было прочитать при попытке деинсталляции продукта.

0
ответ дан 2 September 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: