У меня есть установочное решение в 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, но это тоже не сработало. Любая помощь будет принята с благодарностью, спасибо заранее!