https://bugs.winehq.org/show_bug.cgi?id=48974
Bug ID: 48974 Summary: Multiple MSI-based installers show 'newBinaryXX' text instead of bitmap on button controls (missing support for 'msidbControlAttributesBitmap') Product: Wine Version: 5.6 Hardware: x86-64 OS: Linux Status: NEW Severity: normal Priority: P2 Component: msi Assignee: wine-bugs@winehq.org Reporter: focht@gmx.net Distribution: ---
Hello folks,
as it says. It doesn't affect the installation but it definitely looks weird to end users.
Installers found being affected:
* eDrawings 2015 (.NET 4.0 app) -> https://web.archive.org/web/20200419191626/http://fs3.softfamous.com/downloa...
* eDrawings 2020 (.NET 4.7 app) -> https://web.archive.org/web/20200419211103/https://dl-ak.solidworks.com/nons...
--- snip --- $ WINEDEBUG=+seh,+relay,+msi wine ./eDrawingsFullAllX64.exe >>log.txt 2>&1 ... 0066:Call KERNEL32.CreateProcessW(00000000,015080b4 L"C:\users\focht\Temp\{0D020572-72F5-42E1-8F1C-56B791E26D06}\eDrawingsFullAllX64.exe /q"Z:\home\focht\Downloads\eDrawingsFullAllX64.exe" /tempdisk1folder"C:\users\focht\Temp\{0D020572-72F5-42E1-8F1C-56B791E26D06}"
/IS_temp",00000000,00000000,00000000,00000020,00000000,00000000,0032edc0,0032ee20) ret=004527d6 ... 0066:Ret KERNEL32.CreateProcessW() retval=00000001 ret=004527d6 ... 0068:Call KERNEL32.CreateProcessW(00000000,01d13d1c L""C:\windows\system32\MSIEXEC.EXE" /i "C:\users\focht\Temp\{0D020572-72F5-42E1-8F1C-56B791E26D06}\eDrawings.msi"
TRANSFORMS="C:\users\focht\Temp\{0D020572-72F5-42E1-8F1C-56B791E26D06}\1033.MST" SETUPEXEDIR="Z:\home\focht\Downloads" SETUPEXENAME="eDrawingsFullAllX6"...,00000000,00000000,00000000,00000020,00000000,00000000,0032a9d4,0032aa34) ret=004527d6 ... 0068:Ret KERNEL32.CreateProcessW() retval=00000001 ret=004527d6 ... 006a:trace:msi:msi_dialog_button_control 0000000001C921B0 0000000001C8D380 ... 006a:trace:msi:msi_dialog_add_control L"BUTTON", L"PushButton1", 00140003, L"NewBinary18", 00010000 ... 006a:trace:msi:MSI_DatabaseOpenViewW L"SELECT * FROM `EventMapping` WHERE `Dialog_` = 'Registration' AND `Control_` = 'PushButton1'" 000000000022E280 ... 006a:Call user32.CreateWindowExW(00000000,1800a24f0 L"BUTTON",01ea59e0 L"NewBinary18",50010000,00000273,000000ac,00000060,00000019,00080070,00000000,00000000,00000000) ret=180033929 ... 006a:Call winex11.drv.SetWindowText(00040064,01ea5940 L"NewBinary18") ret=7f8f47f1865e 006a:Ret winex11.drv.SetWindowText() retval=00000000 ret=7f8f47f1865e ... 006a:trace:msi:dialog_create_window Dialog L"Registration" control L"NewBinary18" hwnd 0000000000040064 ... --- snip ---
Dumping the 'Binary' table with ORCA:
--- snip --- Name Data s72 v0 Binary Name ... NewBinary18 NewBinary18 --- snip ---
Dumping 'Control' table with ORCA:
--- snip --- Dialog_ Control Type X Y Width Height Attributes Property Text Control_Next Help s72 s50 s20 i2 i2 i2 i2 I4 S50 L0 S50 L50 Control Dialog_ Control ... Registration PushButton1 PushButton 470 129 72 19 1310723 NewBinary18 Text2 --- snip ---
Text = 'NewBinary18' Attributes = 1310723 -> 0x140003
* msidbControlAttributesVisible = 0x00000001 * msidbControlAttributesEnabled = 0x00000002 * msidbControlAttributesBitmap = 0x00040000 * msidbControlAttributesFixedSize = 0x00100000
Another example from github:
https://github.com/hyperic/hq/blob/master/dist/hyperic-hq-installer/msi-auto...
--- snip --- <Binary Id="NewBinary18" SourceFile="$(var.HQ_binary_path)\InstallStateMenu.ico" /> ... <Control Id="InstallStateMenu" Type="Icon" X="21" Y="52" Width="24" Height="24" Text="NewBinary18" TabSkip="yes" Disabled="yes" IconSize="32" FixedSize="yes" /> ... --- snip ---
Microsoft docs:
https://docs.microsoft.com/en-us/windows/win32/msi/binary-table
--- quote --- The Binary table holds the binary data for items such as bitmaps, animations, and icons. The binary table is also used to store data for custom actions. See OLE Limitations on Streams. ... If the binary data is for a control, the key appears in the Text column of the associated control in the Control table. This key must be unique among all controls requiring binary data. --- quote ---
Wine source:
https://source.winehq.org/git/wine.git/blob/59987bc9ecdd0dbafd768a95c21a1488...
--- snip --- 1017 static UINT msi_dialog_button_control( msi_dialog *dialog, MSIRECORD *rec ) 1018 { 1019 msi_control *control; 1020 UINT attributes, style; 1021 1022 TRACE("%p %p\n", dialog, rec); 1023 1024 style = WS_TABSTOP; 1025 attributes = MSI_RecordGetInteger( rec, 8 ); 1026 if( attributes & msidbControlAttributesIcon ) 1027 style |= BS_ICON; 1028 1029 control = msi_dialog_add_control( dialog, rec, szButton, style ); 1030 if( !control ) 1031 return ERROR_FUNCTION_FAILED; 1032 1033 control->handler = msi_dialog_button_handler; 1034 1035 if (attributes & msidbControlAttributesIcon) 1036 { 1037 /* set the icon */ 1038 LPWSTR name = msi_get_binary_name( dialog->package, rec ); 1039 control->hIcon = msi_load_icon( dialog->package->db, name, attributes ); 1040 if (control->hIcon) 1041 { 1042 SendMessageW( control->hwnd, BM_SETIMAGE, IMAGE_ICON, (LPARAM) control->hIcon ); 1043 } 1044 else 1045 ERR("Failed to load icon %s\n", debugstr_w(name)); 1046 msi_free( name ); 1047 } 1048 1049 return ERROR_SUCCESS; 1050 } --- snip ---
$ sha1sum eDrawingsFullAllX64.exe 1e44983b92a034e318618cd882c6ce7f7043951e eDrawingsFullAllX64.exe
$ du -sh eDrawingsFullAllX64.exe 228M eDrawingsFullAllX64.exe
$ wine --version wine-5.6-193-g59987bc9ec
Regards