Hi all,

I am trying to detect whether a user cancels within a custom action by doing

the following

UINT __stdcall CA()
{
    int retVal = 0;
    PMSIHANDLE hRecord = MsiCreateRecord(1);
    ...
     SomeLongOperation(); // trigger cancellation while this function is
running

    MsiRecordSetString(hRecord, 0, L"[1]");
    MsiRecordSetString(hRecord, 1, L"Some Message");
    retVal = MsiProcessMessage(hInstall, INSTALLMESSAGE_INFO, hRecord);
    if(retVal == IDCANCEL)
    {
        MsiLogWrapper(L"User cancellation is detected!");
        return ERROR_USER_EXIT;
    }
    else
    {
        MsiLogWrapper(L"MsiProcessMessage() returned %d", retVal);
    }
    ...
}

The problem is that the value returned by MsiProcessMessage() is always 0.
And I've confirmed that the installation was cancelled during the
SomeLongOperation() was running,and the string L"Some Message" is properly
logged. What is wrong in this
case? am I missing anything? The CA is scheduled to be a deferred and
no-impersonate action.
I wanted to detect it so that I could return ERROR_USER_EXIT from the CA.
------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have 
the opportunity to enter the BlackBerry Developer Challenge. See full prize 
details at: http://p.sf.net/sfu/blackberry
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to