This website uses cookies. By clicking Accept, you consent to the use of cookies. Click Here to learn more about how we use cookies.
Turn on suggestions
Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.
- Revenera Community
- :
- InstallShield
- :
- InstallShield Forum
- :
- Simple Custom action in merge module errors
Subscribe
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Subscribe
- Mute
- Printer Friendly Page
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Oct 21, 2011
04:15 AM
Simple Custom action in merge module errors
😞 Am I missing a step ?
I have created a merge module and an Installscript MSI project to call into it.
In the merge module I created a custom action:
As a 'New Installscript' typed one, which calls a script function which invokes a dialog as below.
N.B. The dialog is a custom one created in the merge module.
export prototype ShowDialog(HWND);
[HTML]function ShowDialog(hInst)
begin
MessageBox( "SetProp being called", INFORMATION );
MsiSetProperty(hInst,"TESTPROP", "25");
end;
function PLSetup(hInst)
HWND hwndDlg;
STRING szDlg;
NUMBER nCtrl;
BOOL bDone;
LIST listLogging;
STRING svRestartAttempts;
NUMBER nResult;
begin
szDlg = "PLSetup";
if(!bSdInit) then
SdInit();
endif;
if (EzDefineDialog( szDlg, "", "", 1000) = DLG_ERR) then
return -1;
endif;
bDone = FALSE;
while (!bDone)
nCtrl = WaitOnDialog(szDlg);
MessageBox( "WaitOnDialog been called", INFORMATION );
switch (nCtrl)
case DLG_ERR:
MessageBox ("Unable to display dialog. Setup canceled.", SEVERE);
abort;
case DLG_INIT:
hwndDlg = CmdGetHwndDlg(szDlg);
SdGeneralInit(szDlg, hwndDlg, 0, "");
case DLG_CLOSE:
SdCloseDlg( hwndDlg, nCtrl, bDone );
default:
if (SdIsStdButton(nCtrl) && SdDoStdButton(nCtrl)) then
bDone = TRUE;
endif;
endswitch;
endwhile;
EndDialog(szDlg);
ReleaseDialog(szDlg);
SdUnInit();
return nCtrl;
end;
[/HTML]
However, the WaitOnDialog call returns a -1 (DLG_ERR)
Does anyone have any idea why this call fails ?
This is a key mechanism I need to get working or find an alternative.
Does anyone see a problem with doing this ?
I have created a merge module and an Installscript MSI project to call into it.
In the merge module I created a custom action:
As a 'New Installscript' typed one, which calls a script function which invokes a dialog as below.
N.B. The dialog is a custom one created in the merge module.
export prototype ShowDialog(HWND);
[HTML]function ShowDialog(hInst)
begin
MessageBox( "SetProp being called", INFORMATION );
MsiSetProperty(hInst,"TESTPROP", "25");
end;
function PLSetup(hInst)
HWND hwndDlg;
STRING szDlg;
NUMBER nCtrl;
BOOL bDone;
LIST listLogging;
STRING svRestartAttempts;
NUMBER nResult;
begin
szDlg = "PLSetup";
if(!bSdInit) then
SdInit();
endif;
if (EzDefineDialog( szDlg, "", "", 1000) = DLG_ERR) then
return -1;
endif;
bDone = FALSE;
while (!bDone)
nCtrl = WaitOnDialog(szDlg);
MessageBox( "WaitOnDialog been called", INFORMATION );
switch (nCtrl)
case DLG_ERR:
MessageBox ("Unable to display dialog. Setup canceled.", SEVERE);
abort;
case DLG_INIT:
hwndDlg = CmdGetHwndDlg(szDlg);
SdGeneralInit(szDlg, hwndDlg, 0, "");
case DLG_CLOSE:
SdCloseDlg( hwndDlg, nCtrl, bDone );
default:
if (SdIsStdButton(nCtrl) && SdDoStdButton(nCtrl)) then
bDone = TRUE;
endif;
endswitch;
endwhile;
EndDialog(szDlg);
ReleaseDialog(szDlg);
SdUnInit();
return nCtrl;
end;
[/HTML]
However, the WaitOnDialog call returns a -1 (DLG_ERR)
Does anyone have any idea why this call fails ?
This is a key mechanism I need to get working or find an alternative.
Does anyone see a problem with doing this ?
(2) Replies
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Oct 21, 2011
06:08 AM
This must I feel be a resources issue as I have now managed to use the exact same mechanism to call source code (in the merge module) for the sdWelcome dialog.
The dialog displays and completes without fault.
I placed this code in the merge module scripts and invoked through an identical custom action being called from the main project.
[HTML]function JHSdWelcome(hInst)
string szDlg, szTemp;
number nId, nMessage, nTemp, nSdDialog;
HWND hwndDlg;
BOOL bDone;
string szTitle;
string szMsg;
begin
szTitle = "Title";
szMsg = "Message";
szDlg = SD_DLG_WELCOME;
nSdDialog = SD_NDLG_WELCOME;
if(!bSdInit) then
SdInit();
endif;
if(EzDefineDialog( szDlg, "", "", SD_NDLG_WELCOME ) = DLG_ERR) then
return -1;
endif;
bDone = FALSE;
while (!bDone)
nId = WaitOnDialog( szDlg );
switch(nId)
case DLG_INIT:
if( szMsg != "" ) then
SdSetStatic(szDlg, SD_STA_MSG, szMsg);
endif;
hwndDlg = CmdGetHwndDlg( szDlg );
SdGeneralInit( szDlg, hwndDlg, STYLE_NORMAL, szSdProduct );
SdSetDlgTitle(szDlg, hwndDlg, szTitle);
case NEXT:
nId = NEXT;
bDone = TRUE;
case BACK:
nId = BACK;
bDone = TRUE;
case DLG_ERR:
SdError( -1, "SdWelcome" );
nId = -1;
bDone = TRUE;
case DLG_CLOSE:
SdCloseDlg( hwndDlg, nId, bDone );
default:
if(SdIsStdButton( nId ) && SdDoStdButton( nId )) then
bDone = TRUE;
endif;
endswitch;
endwhile;
// Cleanup Dialog
EndDialog( szDlg );
ReleaseDialog( szDlg );
SdUnInit();
end;[/HTML]
The dialog displays and completes without fault.
I placed this code in the merge module scripts and invoked through an identical custom action being called from the main project.
[HTML]function JHSdWelcome(hInst)
string szDlg, szTemp;
number nId, nMessage, nTemp, nSdDialog;
HWND hwndDlg;
BOOL bDone;
string szTitle;
string szMsg;
begin
szTitle = "Title";
szMsg = "Message";
szDlg = SD_DLG_WELCOME;
nSdDialog = SD_NDLG_WELCOME;
if(!bSdInit) then
SdInit();
endif;
if(EzDefineDialog( szDlg, "", "", SD_NDLG_WELCOME ) = DLG_ERR) then
return -1;
endif;
bDone = FALSE;
while (!bDone)
nId = WaitOnDialog( szDlg );
switch(nId)
case DLG_INIT:
if( szMsg != "" ) then
SdSetStatic(szDlg, SD_STA_MSG, szMsg);
endif;
hwndDlg = CmdGetHwndDlg( szDlg );
SdGeneralInit( szDlg, hwndDlg, STYLE_NORMAL, szSdProduct );
SdSetDlgTitle(szDlg, hwndDlg, szTitle);
case NEXT:
nId = NEXT;
bDone = TRUE;
case BACK:
nId = BACK;
bDone = TRUE;
case DLG_ERR:
SdError( -1, "SdWelcome" );
nId = -1;
bDone = TRUE;
case DLG_CLOSE:
SdCloseDlg( hwndDlg, nId, bDone );
default:
if(SdIsStdButton( nId ) && SdDoStdButton( nId )) then
bDone = TRUE;
endif;
endswitch;
endwhile;
// Cleanup Dialog
EndDialog( szDlg );
ReleaseDialog( szDlg );
SdUnInit();
end;[/HTML]
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
‎Oct 21, 2011
09:43 AM
:mad: Please help, this one is driving me mad.
I have now tried just about every possible combination of parameteres to the EzDefineDialog and WaitOnDialog functions including trying DefineDialog.
But I can get nothin but -1 back from the WaitOnDialog.
This seems like a very popular scenario where an install has functionality for a feature encapsulated within a merge module and it can all be accessed from the main project.
I am quite simply trying to invoke a custom dialog, implemented in the merge module, by calling a merge module custom action from the main project.
No dodgy background hacks of tables or extra dlls or third party fixes.
This should be boiler plate stuff and a detailed help article demonstrating it.
So if anyone can spot the obvious or has any suggestions I am all ears.
I have now tried just about every possible combination of parameteres to the EzDefineDialog and WaitOnDialog functions including trying DefineDialog.
But I can get nothin but -1 back from the WaitOnDialog.
This seems like a very popular scenario where an install has functionality for a feature encapsulated within a merge module and it can all be accessed from the main project.
I am quite simply trying to invoke a custom dialog, implemented in the merge module, by calling a merge module custom action from the main project.
No dodgy background hacks of tables or extra dlls or third party fixes.
This should be boiler plate stuff and a detailed help article demonstrating it.
So if anyone can spot the obvious or has any suggestions I am all ears.
![](/skins/images/D60DF682EA37BF37032955CE10F3F0BB/responsive_peak/images/icon_anonymous_message.png)