http://bugs.winehq.org/show_bug.cgi?id=9664
--- Comment #24 from Anastasius Focht focht@gmx.net 2010-03-02 15:31:41 --- Hello,
thanks for the german Office2K installation package, it was a matter of minutes to track it down ;-)
Fortunately Microsoft installer swiss army knife "ORCA" came once again to help.
Using ORCA's dialog preview feature one can quickly reproduce the problem (missing image on pushbutton control):
Load DATA1.MSI with ORCA. Menu: Tools -> Dialog Preview -> choose "ReadyToInstall" Dialog
You see the second "Customize" pushbutton image is indeed missing.
NOTE: If you choose "done" in dialog preview, the dialog gets ghosted (never closes). This seems to be another wine bug.
---
Dumping the "Control" table for "ReadyToInstall" dialog reveals the following:
--- snip --- ... Dialog_ Control Type X Y Width Height Attributes Property Text Control_Next Help s0 s0 s0 i2 i2 i2 i2 I4 S0 L0 S0 L0
ReadyToInstall BlackBar Bitmap 1 1 449 4 262145 BlackBar ReadyToInstall CornerGraphic Bitmap 1 4 126 48 262145 CornerGraphic InstallNowText ReadyToInstall WhiteBar Bitmap 1 1 126 280 262145 WhiteBar CornerGraphic ReadyToInstall Back PushButton 317 285 62 18 3 << &Zurück Cancel ReadyToInstall Cancel PushButton 204 285 62 18 3 Abbrechen HelpButton ReadyToInstall BarLabelSetup Text 4 57 121 18 65539 {\Tahoma8BlackBold}SETUP ReadyToInstall BLCollecting Text 4 75 121 25 65539 {\Tahoma8Black}Kundeninformationen ReadyToInstall BLEULA Text 4 100 121 25 65539 {\Tahoma8Black}Lizenzierung und Support ReadyToInstall BLInstalling Text 4 150 121 25 65539 {\Tahoma8Black}[ProductNameBase] wird installiert ReadyToInstall BLReady Text 4 125 121 25 65539 {\Tahoma8BlackBold}Zur Installation bereit ReadyToInstall BottomLine Line 1 279 449 2 1 line ReadyToInstall HelpButton PushButton 138 285 62 18 3 &Hilfe WhiteBar ReadyToInstall Next PushButton 383 285 62 18 1 &Weiter >> Back ReadyToInstall Label4 Text 139 12 305 25 65539 {\TahomaBold8}Das Setup-Programm ist bereit, [ProductName] zu installieren. ReadyToInstall Label25 Text 139 143 305 24 2 {\Tahoma8Black}...oder klicken Sie auf "Benutzerdefiniert" und machen Sie weitere Angaben zu Ihrer [ProductNameBase]-Installation. ReadyToInstall Label8 Text 139 38 305 22 2 {\Tahoma8Black}Klicken Sie auf "Jetzt installieren", um mit der Installation von [ProductNameBase] zu beginnen. ReadyToInstall InstallNowText Text 192 60 252 12 65539 {\TahomaBold8}[TYPICALINSTALLTEXT] InstallNow ReadyToInstall CustomInstallText Text 192 179 252 37 65539 {\Tahoma8Black}[CUSTOMINSTALLDESCRIPTION] ReadyToInstall Customize PushButton 139 167 45 45 7864323 {\Tahoma8Black}CustomIcon Next Benutzerdefiniert| ReadyToInstall CustomizeText Text 192 167 252 12 65539 {\TahomaBold8}[CUSTOMINSTALLTEXT] Customize ReadyToInstall IEInstallNoPrevText Text 192 72 252 13 65539 {\Tahoma8Black}[IEInstallNowText] ReadyToInstall IEInstallText Text 192 83 252 13 65539 {\Tahoma8Black}[IEInstallNowText] ReadyToInstall InstallNow PushButton 139 60 45 45 7864323 TypicalIcon CustomizeText Typisch| ReadyToInstall Label25Prop Text 139 143 305 24 2 {\Tahoma8Black}[CUSTOMINSTALLHEADER] ReadyToInstall Label8c Text 139 38 305 22 2 {\Tahoma8Black}Klicken Sie auf "Jetzt aktualisieren", um mit der Installation von [ProductNameBase] zu beginnen. ReadyToInstall Label8cProp Text 139 38 305 22 2 {\Tahoma8Black}[TYPICALUPGRADEHEADER] ReadyToInstall Label8Prop Text 139 38 305 22 2 {\Tahoma8Black}[TYPICALINSTALLHEADER] ReadyToInstall TypicalInstallText Text 192 72 252 37 65539 {\Tahoma8Black}[ProductNameNonQualifiedShort] nach [DefaultInstallLocation] installieren ReadyToInstall TypicalInstallText2 Text 192 83 252 37 65539 [ProductNameNonQualifiedShort] nach [DefaultInstallLocation] installieren ReadyToInstall TypicalInstallText3 Text 192 94 252 37 65539 [ProductNameNonQualifiedShort] nach [DefaultInstallLocation] installieren ReadyToInstall TypicalInstallTextProp Text 192 72 252 37 65539 {\Tahoma8Black}[TYPICALINSTALLDESCRIPTION] ReadyToInstall TypicalRemovePreviousText Text 192 72 252 12 65539 {\Tahoma8Black}Ältere Versionen von [ProductNameBase] entfernen ReadyToInstall UpgradeNowText Text 192 60 252 12 65539 {\TahomaBold8}[TYPICALUPGRADETEXT] ... --- snip ---
Tracing the "good" case for "InstallNow" pushbutton control:
--- snip --- ... 0045:trace:msi:msi_dialog_button_control 0x610d30 0x615f40 0045:trace:msi:msi_dialog_add_control L"BUTTON", L"InstallNow", 00780003, L"TypicalIcon", 00010040 ... 0045:Call user32.CreateWindowExW(00000000,686c31ee L"BUTTON",00619f98 L"TypicalIcon",50010040,000000b9,00000050,0000003c,0000003c,000903e6,00000000,00000000,00000000) ret=686622d8 ... 0045:trace:msi:msi_dialog_create_window Dialog L"ReadyToInstall" control L"TypicalIcon" hwnd 0x3032c ... 0045:trace:msi:msi_load_image 0x19b098 L"TypicalIcon" 48 48 00000010 ... 0045:trace:msi:MSI_DatabaseOpenViewW L"select * from Binary where `Name` = 'TypicalIcon'" 0x32e298 ... 0045:Call KERNEL32.lstrlenW(0061a3d8 L"Binary.TypicalIcon") ret=686a4d79 ... 0045:trace:msi:db_get_raw_stream L"\430b\4131\4735\3f7e\44fc\41ac\43e4\4192\4472" ... 0045:Call shlwapi.SHCreateStreamOnFileW(0061a108 L"C:\users\focht\Temp\msi7230.tmp",00000012,0032e274) ret=686906ea ... 0045:Call user32.LoadImageW(00000000,0061a108 L"C:\users\focht\Temp\msi7230.tmp",00000001,00000030,00000030,00000010) ret=68662622 ... 0045:Ret user32.LoadImageW() retval=00060328 ret=68662622 ... 0045:Call KERNEL32.DeleteFileW(0061a108 L"C:\users\focht\Temp\msi7230.tmp") ret=6866263e ... 0045:Call window proc 0x685c0e41 (hwnd=0x3032c,msg=BM_SETIMAGE,wp=00000001,lp=00060328) --- snip ---
Tracing the "bad" case for "Customize" pushbutton control:
--- snip --- ... 0045:trace:msi:msi_dialog_button_control 0x610d30 0x615f40 0045:trace:msi:msi_dialog_add_control L"BUTTON", L"Customize", 00780003, L"{\Tahoma8Black}CustomIcon", 00010040 ... 0045:Call user32.CreateWindowExW(00000000,686c31ee L"BUTTON",0061927e L"CustomIcon",50010040,000000b9,000000df,0000003c,0000003c,000903e6,00000000,00000000,00000000) ret=686622d8 ... 0045:trace:msi:msi_dialog_create_window Dialog L"ReadyToInstall" control L"{\Tahoma8Black}CustomIcon" hwnd 0x10034c ... 0045:trace:msi:msi_load_image 0x19b098 L"{\Tahoma8Black}CustomIcon" 48 48 00000010 ... 0045:trace:msi:MSI_DatabaseOpenViewW L"select * from Binary where `Name` = '{\Tahoma8Black}CustomIcon'" 0x32e298 ... 0045:Call window proc 0x685c0e41 (hwnd=0x10034c,msg=BM_SETIMAGE,wp=00000001,lp=00000000) --- snip ---
Wine must strip any RTF-ismns from string/text fields that are potentially used as lookup keys in tables (example: stream names in binary table).
E.g. text field "{\Tahoma8Black}CustomIcon" should become "CustomIcon" before lookup/query expression.
Also it would be helpful if an ERR is printed in case the icon resource can't be loaded - similar what's being done in dlls/dialog.c:msi_dialog_bitmap_control().
dlls/dialog.c:msi_dialog_button_control -> msi_load_icon -> msi_load_image
Regards