http://bugs.winehq.org/show_bug.cgi?id=26484
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |focht@gmx.net
--- Comment #4 from Anastasius Focht focht@gmx.net 2011-03-20 18:12:17 CDT --- Hello,
looks like a property which processed in RelocateMM custom action is missing a part, leading to invocation of crash handler.
--- snip --- 0009:trace:msi:msi_get_property returning L"MM;C:\strawberry\;" for property L"CA_Relocate_msm.BC4B680E_4871_31E7_9883_3E2C74EA4F3C" 0009:trace:msi:msi_set_property 0x1315c0 L"CustomActionData" L"MM;C:\strawberry\;" --- snip ---
The source of the CA can be found here:
http://cpansearch.perl.org/src/CSJEWELL/Perl-Dist-WiX-1.500/src/ClearFolderC...
Copy of "sRelocationFile" parameter fails due to previous tokenizer failure:
--- snip --- UINT __stdcall RelocateMM( MSIHANDLE hModule) // Handle of MSI being installed. [in] // Passed to most other routines. { TCHAR sInstallDirectory[MAX_PATH + 1]; TCHAR sRelocationFile[MAX_PATH + 1]; TCHAR sCAData[MAX_PATH * 2 + 6]; UINT uiAnswer; DWORD dwPropLength;
// Get directory to relocate to. dwPropLength = MAX_PATH * 2 + 5; uiAnswer = ::MsiGetProperty(hModule, TEXT("CustomActionData"), sCAData, &dwPropLength); MSI_OK(uiAnswer)
TCHAR *sTokenContext = NULL; TCHAR *sToken = NULL;
sToken = _tcstok_s(sCAData, _T(";"), &sTokenContext); if (0 != _tcscmp(sToken, _T("MM"))) { return ERROR_INSTALL_FAILURE; } sToken = _tcstok_s(NULL, _T(";"), &sTokenContext); _tcscpy_s(sInstallDirectory, _MAX_PATH, sToken); sToken = _tcstok_s(NULL, _T(";"), &sTokenContext); _tcscpy_s(sRelocationFile, _MAX_PATH, sToken); <--- sToken == NULL -> invoke crash handler
return Relocate_Worker(hModule, sInstallDirectory, sRelocationFile);
} --- snip ---
The CA_Relocate_msm property is defined here:
http://cpansearch.perl.org/src/CSJEWELL/Perl-Dist-WiX-1.500/share/default/Me...
--- snip --- ... [% IF dist.relocatable %] [% IF dist.use_dll_relocation %] <CustomAction Id="CA_FileList_msm" Property="CA_Relocate_msm" Value="MM;[INSTALLDIR];[% dist.assert.msm_relocation_idlist %]" Return="check" /> <CustomAction Id="CA_Relocate_msm" BinaryKey="B_ClearFolder" DllEntry="RelocateMM" Execute="deferred" Return="check" />
<InstallExecuteSequence> <Custom Action="CA_FileList_msm" After="InstallFiles" /> <Custom Action="CA_Relocate_msm" After="CA_FileList_msm"> <![CDATA[NOT (NO_RELOCATE OR Installed)]]> </Custom> </InstallExecuteSequence> --- snip ---
Interestingly I didn't find any "dist.assert.msm_relocation_idlist" reference in the class documentation and source code.
http://search.cpan.org/~csjewell/Perl-Dist-WiX-1.500/lib/Perl/Dist/WiX.pm
This looks like some bug in Perl Wix installer module hence this this installer might be broken on Windows too.
Can someone test this installer on Windows and check if there is any crash reporting tool invoked during install?
Regards