[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