[Bug 50809] New: Multiple .NET 4.x application installers fail due to 'MsiNetAssemblySupport' property returning incorrect version (IronPython 2.7.5)

WineHQ Bugzilla wine-bugs at winehq.org
Mon Mar 15 12:53:15 CDT 2021


https://bugs.winehq.org/show_bug.cgi?id=50809

            Bug ID: 50809
           Summary: Multiple .NET 4.x application installers fail due to
                    'MsiNetAssemblySupport' property returning incorrect
                    version (IronPython 2.7.5)
           Product: Wine
           Version: 6.4
          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. Found while checking Atmel Studio 7 full installer logs after
running in silent install mode.

The 'IronPython' sub-installer is reported to have failed, although the failure
is not treated as critical for overall install result.

Main installer log:

--- snip ---
...
[0020:0024][2021-03-15T17:41:16]i323: Registering package dependency provider:
{08B74EC9-BC55-418A-A5AA-E589DA2B96C0}, version: 2.7.51000.0, package:
IronPython
[0100:0104][2021-03-15T17:41:16]i000: VisualInstaller : Message:
ExecutePackageBegin
[0020:0024][2021-03-15T17:41:16]i301: Applying execute package: IronPython,
action: Install, path: C:\ProgramData\Package
Cache\{08B74EC9-BC55-418A-A5AA-E589DA2B96C0}v2.7.51000.0\IronPython-2.7.5.msi,
arguments: ' ALLUSERS="1" MSIFASTINSTALL="7"'
[0020:0024][2021-03-15T17:41:16]e000: Error 0x80070643: Failed to install MSI
package.
[0020:0024][2021-03-15T17:41:16]e000: Error 0x80070643: Failed to execute MSI
package.
[0100:0104][2021-03-15T17:41:16]e000: Error 0x80070643: Failed to configure
per-machine MSI package.
[0100:0104][2021-03-15T17:41:16]i000: VisualInstaller : Message:
ExecutePackageComplete
[0100:0104][2021-03-15T17:41:16]i000: VisualInstaller : Message: Setting result
for package: IronPython, Status=-2147023293
[0100:0104][2021-03-15T17:41:16]w350: Applied non-vital package: IronPython,
encountered error: 0x80070643. Continuing...
--- snip ---

Single installer package can be found here:

https://github.com/IronLanguages/main/releases/tag/ipy-2.7.5

https://github.com/IronLanguages/main/releases/download/ipy-2.7.5/IronPython-2.7.5.msi

Created stable download link via Internet Archive:

https://web.archive.org/web/20210315174711/https://github.com/IronLanguages/main/releases/download/ipy-2.7.5/IronPython-2.7.5.msi

Running the installer results in a message box 'IronPython 2.7.5 requires .NET
Framework 4.0 or later.' even though native .NET Framework 4.x (4.8) is
installed in the 64-WINEPREFIX.

Dumping the Launch condition from 'IronPython-2.7.5.msi' with ORCA:

--- snip ---
Installed OR MsiNetAssemblySupport >= "4.0.0.0"    [ProductName] requires .NET
Framework 4.0 or later.
--- snip ---

Relevant part of trace log:

--- snip ---
$ WINEDEBUG=+seh,+relay,+msi,+reg,+server wine msiexec -i IronPython-2.7.5.msi
>>log.txt 2>&1
...
0024:Call advapi32.RegOpenKeyExW(ffffffff80000002,1800ad2ac
L"Software\\Microsoft\\NET Framework Setup\\NDP",00000000,00000004,0022ea58)
ret=18005c327 
...
0024:Ret  advapi32.RegOpenKeyExW() retval=00000000 ret=18005c327
0024:Call advapi32.RegCreateKeyExW(00000098,1800ad302
L"v4\\Client",00000000,00000000,00000000,00000001,00000000,0022ea68,00000000)
ret=18005c374
...
0024:Ret  advapi32.RegCreateKeyExW() retval=00000000 ret=18005c374 
...
0024:Call advapi32.RegQueryValueExW(0000009c,1800ad316
L"InstallPath",00000000,0022ea7c,0022f080,0022ea74) ret=18005c3b2
...
0024:Call
ntdll.NtQueryValueKey(0000009c,0022e7a0,00000002,0022e7b0,00000100,0022e79c)
ret=7b046a18
0024:trace:reg:NtQueryValueKey (0x9c,L"InstallPath",2,0x22e7b0,256)
0024: get_key_value( hkey=009c, name=L"InstallPath" )
0024: get_key_value() = 0 { type=1, total=98,
data={43,00,3a,00,5c,00,77,00,69,00,6e,00,64,00,6f,00,77,00,73,00,5c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,2e,00,4e,00,45,00,54,00,5c,00,46,00,72,00,61,00,6d,00,65,00,77,00,6f,00,72,00,6b,00,36,00,34,00,5c,00,76,00,34,00,2e,00,30,00,2e,00,33,00,30,00,33,00,31,00,39,00,5c,00,00,00}
}
0024:Ret  ntdll.NtQueryValueKey() retval=00000000 ret=7b046a18
0024:Call ntdll.memcpy(0022f080,0022e7bc,00000062) ret=7b046b01
0024:Ret  ntdll.memcpy() retval=0022f080 ret=7b046b01
0024:Call ntdll.RtlNtStatusToDosError(00000000) ret=7b046b8d
0024:Ret  ntdll.RtlNtStatusToDosError() retval=00000000 ret=7b046b8d
0024:Ret  kernelbase.RegQueryValueExW() retval=00000000 ret=7bc437cf
0024:Ret  advapi32.RegQueryValueExW() retval=00000000 ret=18005c3b2
0024:Call ntdll.RtlAllocateHeap(00020000,00000000,00000078) ret=18005c9bf
0024:Ret  ntdll.RtlAllocateHeap() retval=00100eb0 ret=18005c9bf
0024:Call KERNEL32.GetFileAttributesW(00100eb0 L"\\fusion.dll") ret=18005ca06
...
0024:Ret  KERNEL32.GetFileAttributesW() retval=ffffffff ret=18005ca06
0024:Call advapi32.RegCloseKey(0000009c) ret=18005c3c4
...
0024:Ret  advapi32.RegCloseKey() retval=00000000 ret=18005c3c4 
...
0024:trace:msi:msi_set_property 00000000000C61F0 L"MsiNetAssemblySupport"
L"2.0.50727.4016" -1 
...
0024:Call user32.MessageBoxW(00000000,0010c850 L"IronPython 2.7.5 requires .NET
Framework 4.0 or later.",18009f418 L"Install Failed",00000000) ret=18000f47e 
--- snip ---

Wine source:

https://source.winehq.org/git/wine.git/blob/4336ed0b84b3dd3097bbbbf8e4b9de2e4d444ad7:/dlls/msi/package.c#l516

--- snip ---
 516 static LPWSTR get_fusion_filename(MSIPACKAGE *package)
 517 {
 518     HKEY netsetup, hkey;
 519     LONG res;
 520     DWORD size, len, type;
 521     WCHAR windir[MAX_PATH], path[MAX_PATH], *filename = NULL;
 522 
 523     res = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\NET
Framework Setup\\NDP", 0, KEY_CREATE_SUB_KEY,
 524                         &netsetup);
 525     if (res != ERROR_SUCCESS)
 526         return NULL;
 527 
 528     if (!RegCreateKeyExW(netsetup, L"v4\\Client", 0, NULL, 0,
KEY_QUERY_VALUE, NULL, &hkey, NULL))
 529     {
 530         size = ARRAY_SIZE(path);
 531         if (!RegQueryValueExW(hkey, L"InstallPath", NULL, &type, (BYTE
*)path, &size))
 532         {
 533             len = lstrlenW(path) + lstrlenW(L"fusion.dll") + 2;
 534             if (!(filename = msi_alloc(len * sizeof(WCHAR)))) return NULL;
 535 
 536             lstrcpyW(filename, path);
 537             lstrcpyW(filename, L"\\");
 538             lstrcatW(filename, L"fusion.dll");
 539             if (GetFileAttributesW(filename) != INVALID_FILE_ATTRIBUTES)
 540             {
 541                 TRACE( "found %s\n", debugstr_w(filename) );
 542                 RegCloseKey(hkey);
 543                 RegCloseKey(netsetup);
 544                 return filename;
 545             }
 546         }
 547         RegCloseKey(hkey);
 548     }
 549 
 550     if (!RegCreateKeyExW(netsetup, L"v2.0.50727", 0, NULL, 0,
KEY_QUERY_VALUE, NULL, &hkey, NULL))
 551     {
 552         RegCloseKey(hkey);
 553         GetWindowsDirectoryW(windir, MAX_PATH);
 554         len = lstrlenW(windir) + lstrlenW(L"Microsoft.NET\\Framework\\") +
lstrlenW(L"v2.0.50727") +
 555               lstrlenW(L"fusion.dll") + 3;
 556         if (!(filename = msi_alloc(len * sizeof(WCHAR)))) return NULL;
 557 
 558         lstrcpyW(filename, windir);
 559         lstrcatW(filename, L"\\");
 560         lstrcatW(filename, L"Microsoft.NET\\Framework\\");
 561         lstrcatW(filename, L"v2.0.50727");
 562         lstrcatW(filename, L"\\");
 563         lstrcatW(filename, L"fusion.dll");
 564         if (GetFileAttributesW(filename) != INVALID_FILE_ATTRIBUTES)
 565         {
 566             TRACE( "found %s\n", debugstr_w(filename) );
 567             RegCloseKey(netsetup);
 568             return filename;
 569         }
 570     }
 571 
 572     RegCloseKey(netsetup);
 573     return filename;
 574 }
--- snip ---

The .NET Framework 4.x base install path queried from registry is overwritten
by the copying of backslash into filename buffer. Line 537 should have been
'lstrcatW'.

This is a regression introduced by commit
https://source.winehq.org/git/wine.git/commitdiff/731bb72c3d00b089ee23297efdfe0496733e96a4
("msi: Use wide character string literals in package.c.").

Part of Wine 5.21 release.

I'm surprised it took that long until someone ran into this problem.

$ sha1sum IronPython-2.7.5.msi 
8f51858be07d58f5d713eeb76a60268684d1471c  IronPython-2.7.5.msi

$ du -sh IronPython-2.7.5.msi 
16M    IronPython-2.7.5.msi

$ wine --version
wine-6.4

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