[Bug 48974] New: Multiple MSI-based installers show 'newBinaryXX' text instead of bitmap on button controls (missing support for 'msidbControlAttributesBitmap')
WineHQ Bugzilla
wine-bugs at winehq.org
Sun Apr 19 16:17:03 CDT 2020
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 at winehq.org
Reporter: focht at 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/downloads/tname-290275cb0f191/software/eDrawingsAllX64.exe
* eDrawings 2020 (.NET 4.7 app) ->
https://web.archive.org/web/20200419211103/https://dl-ak.solidworks.com/nonsecure/edrawings/e2020sp02/28.2.0.0046-C97JWRIC/pfw//eDrawingsFullAllX64.exe
--- 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-automation/hyperic-hq-builds/os/hyperic-hq-installer-4.5.0-win32.wxs
--- 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/59987bc9ecdd0dbafd768a95c21a14884bc77c07:/dlls/msi/dialog.c#l1017
--- 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
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
More information about the wine-bugs
mailing list