Установка MSI прервана библиотекой пользовательских действий

Я использовал проект установки Visual Studio для создания MSI. Я отредактировал MSI в Orca, так что пользовательское действие выполняется через DLL при первом его открытии. Когда я запускаю MSI, msiexec регистрирует следующее:

MSI (c) (E4:BC) [15:28:14:453]: Doing action: CustomAction1
Action 15:28:14: CustomAction1.
Action start 15:28:14: CustomAction1.
MSI (c) (E4:BC) [15:28:14:453]: Note: 1: 2235 2:  3: ExtendedType 4: SELECT `Action`,`Type`,`Source`,`Target`, NULL, `ExtendedType` FROM `CustomAction` WHERE `Action` = 'CustomAction1'
MSI (c) (E4:BC) [15:28:14:453]: Creating MSIHANDLE (13) of type 790542 for thread 3260
MSI (c) (E4:B4) [15:28:14:453]: Invoking remote custom action. DLL: C:\DOCUME~1\USERNA~1\LOCALS~1\Temp\MSIA3.tmp, Entrypoint: SampleFunction
MSI (c) (E4:B4) [15:28:14:453]: Closing MSIHANDLE (13) of type 790542 for thread 3260
Action ended 15:28:14: CustomAction1. Return value 3.
MSI (c) (E4:BC) [15:28:14:468]: Doing action: FatalErrorForm
Action 15:28:14: FatalErrorForm.
Action start 15:28:14: FatalErrorForm.
MSI (c) (E4:BC) [15:28:14:468]: Note: 1: 2235 2:  3: ExtendedType 4: SELECT `Action`,`Type`,`Source`,`Target`, NULL, `ExtendedType` FROM `CustomAction` WHERE `Action` = 'FatalErrorForm'

Мастер установки установит сообщение об ошибке: The installer was interrupted before MyProduct could be installed. You need to restart the installer to try again.

Пользовательская DLL написана на C ++. Вот исходный код:

MyCustomAction.cpp:

// MyCustomAction.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
BOOL APIENTRY DllMain(HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
return TRUE;
}

UINT __stdcall SampleFunction(MSIHANDLE hModule)
{
//This is the function that is called by the MSI
//It is empty because I just want to check that it can be called without interrupting the installer, then I will add the actual functionality
}

MyCustomAction.def:

; MyCustomAction.def
;
; defines the exported functions which will be available to the MSI engine

LIBRARY      "MyCustomAction"DESCRIPTION  'Custom Action DLL'

EXPORTS
SampleFunction

Я также ссылался msi.lib в дополнительных зависимостях DLL. Почему настраиваемое действие прерывает установку, если в данный момент я явно не говорю, чтобы она что-нибудь делала? Любая помощь будет оценена.

ОБНОВИТЬ:

В Orca пользовательское действие находится в Binary таблица и тип 1 в CustomAction Таблица. Пользовательское действие Immediate и происходит после IsolateComponents и раньше WelcomeForm в InstallUISequence Таблица.

0

Решение

Вы должны обновить свой код и свое сообщение, чтобы указать, что вы на самом деле возвращаете ERROR_SUCCESS. Решает ли это проблему или нет, дело в том, что это правильно. Если он не возвращает значение, последовательность вызовов завершится с ошибкой и получит ошибку.

Ваш Dll, вероятно, не загружается из-за отсутствия зависимостей. Если вы вставите в свой код простой вызов в окне сообщения, вы по крайней мере увидите, действительно ли код начинает выполняться. C ++ потребует поддержки Dll во время выполнения, которая может отсутствовать в системе.

Если окажется, что у вас есть зависимости от времени выполнения C ++, вам нужно будет установить их перед запуском MSI. Это то, для чего нужен предварительный выбор: он создает файл setup.exe для установки зависимостей, а затем устанавливает MSI.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]