Exported functions in tests

Zebediah Figura z.figura12 at gmail.com
Thu Oct 12 23:09:06 CDT 2017

Hello all,

I was working on a test for MSI type 1 custom actions, i.e. functions 
exported from a given DLL and called by the install script. I've tested 
both with an independent file and in the Wine test environment, and I've 
found that I can successfully export functions from the executable 
itself with DECLSPEC_EXPORT, and MSI will successfully execute the 
function, as the attached patch demonstrates.

The function returns ERROR_SUCCESS, and changing this to other values 
gets reflected in the install's error code appropriately. However, as 
soon as I add a function call to the custom action, the install fails 
with ERROR_INSTALL_FAILURE, and the function is never called—making it 
look, in all probability, like a page fault occurred. This is the case 
when compiling with mingw-w64, both inside the Wine test environment and 
in an independent file.

Notably I have no trouble calling DLLs taken from real MSI packages in 
this way. I also have no trouble calling the function if I use 
GetModuleHandle() and GetProcAddress() directly, nor do I run into any 
trouble whatsoever running the custom action on Linux. It is 
specifically this environment—running this function as part of a custom 
action, on Windows.

Does anyone know, or have a hunch, as to what the problem might be here? 
For what it's worth, it's known that native MSI uses a separate process 
to execute custom actions, although I don't know how this would lend any 
clue to what's going wrong.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: msi_patch.diff
Type: text/x-patch
Size: 2968 bytes
Desc: not available
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20171012/6d2205b2/attachment.bin>

More information about the wine-devel mailing list