2015-07-23 3 views
0

У меня есть установочное решение в visual studio, которое содержит загрузчик приложений Windows C# и два проекта msi. Я хочу запланировать настраиваемое действие для одного из двух msis для запуска во время последовательности удаления, поэтому я сначала добавил проекты CustomActions в одно и то же решение (называемое «CustomActions»), у которого есть файл CustomAction.cs, который определяет пользовательскую функцию для быть запланированным. Эта функция должна просто написать что-то в файл журнала на данный момент:Невозможно запланировать мое пользовательское действие WiX в msi

namespace CustomActions 
{ 
    public class CustomActions 
    { 
     [CustomAction] 
     public static ActionResult UninstallSecondaryMsi(Session session) 
     { 
      session.Log("Begin CustomAction1"); 

     /* Search for ProductCode of the secondary msi here; run msiexec to uninstall it */ 

      return ActionResult.Success; 
     } 
    } 

Я добавил ссылку CustomActions проекта на мой проект MSI, а затем добавил следующее моих product.wxs:

<!-- Custom Actions --> 
    <Fragment> 
     <Binary Id="customActionDLL" SourceFile="$(var.CustomActions.TargetDir)\CustomActions.CA.dll" /> 
     <CustomAction Id="CustomAction_GetRegistryKey" 
     BinaryKey="customActionDLL" 
     DllEntry="UninstallSecondaryMsi" 
     Execute="immediate" 
     Return="check" /> 

    <InstallExecuteSequence> 
     <Custom Action="CustomAction_GetRegistryKey" 
       After="InstallFinalize"></Custom> 
    </InstallExecuteSequence> 
    </Fragment> 

I запустил загрузчик, который запускает msi, но строка «Begin CustomAction1» не была в файле журнала. Я подумал, что, возможно, это была не просто регистрация должным образом, но когда я просмотрел сгенерированный msi с Orca.exe, я увидел, что мое пользовательское действие не было, запланированное в таблице CustomActions или в таблице InstallExecuteSequence.

Есть что-то, что мне здесь не хватает? Я также догадался, что путь к CustomActions.CA.dll неверен и попробовал жестко кодировать путь к DLL, но это тоже не сработало. Любая помощь будет принята с благодарностью, спасибо заранее!

ответ

1

А, мои элементы пользовательских действий были в основном файле Product.wxs, но в другом фрагменте, и этот фрагмент не получил ссылки в любом месте. Я включил компонентную группу под этим фрагментом и сделал ссылку на его идентификатор в элементе Feature - и он сработал. Мои извинения.

Смежные вопросы