http://bugs.winehq.org/show_bug.cgi?id=21744
Summary: msi.MsiGetMode( MSIRUNMODE_MAINTENANCE) case should return false on new installs (TecDoc CATALOG 1/2010 installer) Product: Wine Version: 1.1.38 Platform: x86 URL: http://www.tecdoc.de OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: msi AssignedTo: wine-bugs@winehq.org ReportedBy: focht@gmx.net
Hello,
TecDoc CATALOG 1/2010 DVD installer fails because Wine msi doesn't explicitly handle MsiGetMode( ... MSIRUNMODE_MAINTENANCE), returning "true" by default. This lets the app installer assume an already installed product (id) which doesn't exist, leading to subsequent failure. On new installs, msi must not return MSIRUNMODE_MAINTENANCE == true.
--- snip --- ... 0040:Call msi.MsiGetMode(00000002,00000002) ret=10007cd0 0040:Call KERNEL32.InterlockedIncrement(001802b0) ret=6894088f 0040:Ret KERNEL32.InterlockedIncrement() retval=00000002 ret=6894088f 0040:fixme:msi:MsiGetMode 2 2 0040:Ret msi.MsiGetMode() retval=00000001 ret=10007cd0 ... 0040:Call KERNEL32.MultiByteToWideChar(00000000,00000000,017208c8 "INSTALLSCRIPT(2-16-2010 22:04:44)-> bRunModeMAINTENANCE [1]",00000400,0143ed2e,00000400) ret=10005f1d ... --- snip ---
Installer log (c:\windows\OfflineCatalogue_1_2010_TECDOC_CD.log):
------------SystemInfo---------------------- ... INSTALLSCRIPT(2-16-2010 22:04:44)-> Command line [] INSTALLSCRIPT(2-16-2010 22:04:44)-> Product code [{02DBE211-1FE3-4644-A386-1B2F3366D92F}] INSTALLSCRIPT(2-16-2010 22:04:44)-> Start <InitializationSetup()> INSTALLSCRIPT(2-16-2010 22:04:44)-> Start <GetCompanyName()> INSTALLSCRIPT(2-16-2010 22:04:44)-> Finish <GetCompanyName(TECDOC)> INSTALLSCRIPT(2-16-2010 22:04:44)-> COMPANY_NAME [TECDOC] INSTALLSCRIPT(2-16-2010 22:04:44)-> bRunModeMAINTENANCE [1] INSTALLSCRIPT(2-16-2010 22:04:44)-> MAINTENANCE [0] ... INSTALLSCRIPT(2-16-2010 22:04:44)-> Finish <CheckRelease()>. Return code [0] INSTALLSCRIPT(2-16-2010 22:04:44)-> Will be uinstalled [TECDOC CD 1.2010] INSTALLSCRIPT(2-16-2010 22:04:44)-> Start <GetSetupTypeProduct ({02DBE211-1FE3-4644-A386-1B2F3366D92F},0)> INSTALLSCRIPT(2-16-2010 22:04:44)-> Return code MsiQueryProductState [-1] INSTALLSCRIPT(2-16-2010 22:04:44)-> Finish <GetSetupTypeProduct ({02DBE211-1FE3-4644-A386-1B2F3366D92F},-1)>. Return code [-1] INSTALLSCRIPT(2-16-2010 22:04:44)-> Installed setup type [-1] INSTALLSCRIPT(2-16-2010 22:04:44)-> Setup type current installation [303] INSTALLSCRIPT(2-16-2010 22:04:44)-> Start <GetLocateProduct({02DBE211-1FE3-4644-A386-1B2F3366D92F},,1,1)> INSTALLSCRIPT(2-16-2010 22:04:44)-> Start <GetProductVersion ({02DBE211-1FE3-4644-A386-1B2F3366D92F},,_)> INSTALLSCRIPT(2-16-2010 22:04:44)-> Finish <GetProductVersion ({02DBE211-1FE3-4644-A386-1B2F3366D92F},1_2010,_)> INSTALLSCRIPT(2-16-2010 22:04:44)-> Return code MsiEnumComponents(0,) [259] INSTALLSCRIPT(2-16-2010 22:04:44)-> Finish <GetLocateProduct({02DBE211-1FE3-4644-A386-1B2F3366D92F},,1,1)>. Return code [-1] INSTALLSCRIPT(2-16-2010 22:04:44)-> Install dir and Product ID uninstalled product [],[] User aborts the installation, ready to launch __OnAbort. ------------------------------------------ SETUP WAS ABORTED The following actions were occured after abort. ------------------------------------------ INSTALLSCRIPT(2-16-2010 22:04:44)-> Start <OnAbort()> INSTALLSCRIPT(2-16-2010 22:04:44)-> Finish <OnAbort()> --- snip ---
--- snip dlls/msi/install.c --- BOOL WINAPI MsiGetMode(MSIHANDLE hInstall, MSIRUNMODE iRunMode) { ... default: FIXME("%d %d\n", hInstall, iRunMode); r = TRUE; }
return r; } --- snip dlls/msi/install.c ---
Returning false for msi.MsiGetMode( MSIRUNMODE_MAINTENANCE) on new installs lets the installer proceed.
Regards