DLL-библиотека последовательной проверки расширенных программ установки

Я работаю над проектом установки в Advanced Installer 10.2. Я обнаружил, что я могу использовать DLL для последовательной проверки, затем я обнаружил, этот ресурс на их сайте.

Мне удалось построить эту DLL, вот мой код:

// SerialValidationLib.cpp: Определяет экспортируемые функции для приложения DLL.
//

#include "stdafx.h"#include "SerialValidationLib.h"#include <Msi.h>
#include <MsiQuery.h>
#include <MsiDefs.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif// The one and only application object

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;

HMODULE hModule = ::GetModuleHandle(NULL);

if (hModule != NULL)
{
// initialize MFC and print and error on failure
if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
_tprintf(_T("Fatal Error: MFC initialization failed\n"));
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
}
}
else
{
// TODO: change error code to suit your needs
_tprintf(_T("Fatal Error: GetModuleHandle failed\n"));
nRetCode = 1;
}

return nRetCode;
}UINT __stdcall ValidateSerial_Sample(MSIHANDLE hInstall)
{
TCHAR szPidKey[256];
DWORD dwLen = sizeof(szPidKey)/sizeof(szPidKey[0]);
//retrive the text entered by the user
UINT res = MsiGetProperty(hInstall, _T("PIDKEY"), szPidKey, &dwLen);
if(res != ERROR_SUCCESS)
{
//fail the installation
return 1;
}
bool snIsValid = false;
//validate the text from szPidKey according to your algorithm
//put the result in snIsValid
TCHAR * serialValid;
if(snIsValid)
serialValid = _T("TRUE");
else
{
//eventually say something to the user
MessageBox(0, _T("Serial invalid!"), _T("Message"), MB_ICONSTOP);
serialValid = _T("FALSE");
}
res = MsiSetProperty(hInstall, _T("SERIAL_VALIDATION"), serialValid);
if(res != ERROR_SUCCESS)
{
return 1;
}
//the validation succeeded - even the serial is wrong
//if the SERIAL_VALIDATION was set to FALSE the installation
//will not continue
return 0;
}

Я также импортировал его в Advanced Installer, смотрите здесь:

введите описание изображения здесь

Но когда я запускаю установщик и пытаюсь продолжить установку, после точки последовательной вставки я получаю следующее сообщение об ошибке:

введите описание изображения здесь

Где моя ошибка? Кто-нибудь знает хороший учебник по этому поводу? Я искал в интернете, но мне ничего не помогает …

0

Решение

У вас могут быть две проблемы:

  • либо вы ввели имя метода вместо того, чтобы выбирать его из комбо, загруженного Advanced Installer. В этом случае установщик не может вызвать метод из DLL, так как не может его найти.

  • или есть проблема с вашим кодом, и в этом случае вам нужно отладить его, как вы бы делали с обычным настраиваемым действием, присоединяющимся из VS (добавьте блок сообщений с точкой останова после него).

1

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

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