У меня возникли проблемы с пользовательскими действиями в моем проекте. Некоторые работают, а некоторые нет. У меня есть два проекта проекта C# CustomAction Project и Setup Project в VS 2012. Мои пользовательские действия выглядят так. Эти два первых действия не вызывают проблемы. Только третий не работает.Пользовательские действия в WiX 3.8
[CustomAction]
public static ActionResult WriteToConfigStore(Session session)
{
...
}
[CustomAction]
public static ActionResult CleanConfigStore(Session session)
{
...
}
[CustomAction]
public static ActionResult CheckPrograms(Session session)
{
string s = "";
Process[] p = Process.GetProcesses();
foreach (Process ps in p)
{
s += ps.ProcessName + ";";
}
MessageBox.Show(s);
return ActionResult.Success;
}
I, определяющие пользовательские действия, как это:
<Binary Id="CustomActionsId" SourceFile="$(var.ResourcesDir)\DriverCA.CA.dll" />
<CustomAction Id="ca_writeToConfigStoreId" BinaryKey="CustomActionsId" DllEntry="WriteToConfigStore" Execute="deferred" Return="check" />
<CustomAction Id="ca_cleanConfigStoreId" BinaryKey="CustomActionsId" DllEntry="CleanConfigStore" Execute="deferred" Return="check" />
<CustomAction Id="ca_setParameter" Return="check" Property="ca_writeToConfigStoreId" Value="param1=.;param2=;param3=;param4=;param5=IviDriver1.0, IviSwtch1.0" />
<CustomAction Id="ca_setCleanParameter" Return="check" Property="ca_cleanConfigStoreId" Value="param1=;" />
<CustomAction Id="ca_checkProgramsId" BinaryKey="CustomActionsId" DllEntry="CheckPrograms" Execute="deferred" Return="check" />
Моя установить последовательность вида:
<InstallExecuteSequence>
<Custom Action="ca_setParameter" Before="InstallFinalize" />
<Custom Action="ca_setCleanParameter" Before="InstallFinalize" />
<!--Call only when not uninstall (install, change, repair)-->
<Custom Action="ca_writeToConfigStoreId" After="ca_setParameter">NOT(REMOVE="ALL")</Custom>
<!--Call only when uninstall or upgrade-->
<Custom Action="ca_cleanConfigStoreId" After="ca_setCleanParameter">REMOVE="ALL"</Custom>
<!--Call only when not install-->
<Custom Action="ca_checkProgramsId" After="MsiUnpublishAssemblies">Installed</Custom>
</InstallExecuteSequence>
Когда я комментирую <Custom Action="ca_checkProgramsId" After="MsiUnpublishAssemblies">Installed</Custom>
все работает отлично. Но когда эта часть не комментируется, тогда при удалении программы я получил ошибку There is problem with this Windows Installer package. A DLL required for this install to complete could not be run.
. Я не вижу никакой ошибки. Каждое имя и идентификатор верны. Я не использую PInvoke или что-то в этом роде.
UPDATE: Цель пользовательского действия, чтобы проверить, если некоторые процессы выполняются или нет, и interrup процесс удаления в соответствии с ним. Настройка для каждой системы, и у меня не было проблем с ящиками сообщений в любых других пользовательских действиях. Я решил это с другим проектом пользовательских действий, который сам по себе имеет проблемы с настраиваемыми действиями, но в остальном я использую точно такие же методы и определения установки (исключая, конечно, другое определение dll). Однако не знаю, в чем проблема.
Это поможет понять, какова ваша конечная цель. Часто пользовательские действия не нужны. –
Мне нужно проверить, запущены ли какие-либо процессы или нет, и переустановить процесс в соответствии с ним. Я обновил свой вопрос. – benderto