dotnet40: fails to install on GE-Proton, works on vanilla 8.18. Help?

Questions about Wine on Linux
Locked
pickworthi
Level 1
Level 1
Posts: 7
Joined: Sun Oct 15, 2023 3:03 am

dotnet40: fails to install on GE-Proton, works on vanilla 8.18. Help?

Post by pickworthi »

I am following the WineHQ .NET Framework 4.8 guide https://appdb.winehq.org/objectManager. ... &iId=38203

I am on a Gentoo system, if that is relevant, kernel 6.5.7

When I do the 'winetricks --force dotnet40' step in a vanilla environment, the MS installer finishes saying it has installed.

However, if I try the same on the Proton environment supplied by GE-Proton8-17 the installer fails. It gives the following log file:

Code: Select all

OS Version = 5.2.3790, Platform 2, Service Pack 2
OS Description = WinXP64 - x64 Professional Service Pack 2
CommandLine = C:\6666de0ad686ae9d4bf6514a550cd2\\Setup.exe /x86 /x64
TimeZone = GMT Daylight Time
Initial LCID = 2057
Using Simultaneous Download and Install mechanism
Operation: Installing
Package Name = Microsoft .NET Framework 4 Setup
Package Version = 4.0.30319
User Experience Data Collection Policy: UserControlled
Number of applicable items: 8
MSI (C:\6666de0ad686ae9d4bf6514a550cd2\RGB9RAST_x64.msi) Installation succeeded. Msi Log: Microsoft .NET Framework 4 Setup_20231015_210619605-MSI_RGB9RAST_x64.msi.txt
MSI (C:\6666de0ad686ae9d4bf6514a550cd2\netfx_Core_x64.msi) Installation failed. Msi Log: Microsoft .NET Framework 4 Setup_20231015_210619605-MSI_netfx_Core_x64.msi.txt
Final Result: Installation failed with error code: (0x80070643), "Installation failure. " (Elapsed time: 0 00:01:04).
The two MSI log files referred to contain:

Code: Select all

1: RGB9RAST 2: {C106C9CF-3B7C-4F7D-88DD-82661E01414E} 
1: RGB9RAST 2: {C106C9CF-3B7C-4F7D-88DD-82661E01414E} 3: 1 
and

Code: Select all

1: Microsoft .NET Framework 4 Client Profile 2: {F5B09CFD-F0B2-36AF-8DF4-1DF6B63FC7B4} 
1: Microsoft .NET Framework 4 Client Profile 2: {F5B09CFD-F0B2-36AF-8DF4-1DF6B63FC7B4} 3: 0 
respectively.

None of this looks particularly helpful to me, and MS responses to the error code (0x80070643) basically amount to "shrug", try rebooting. :-(

I know GE-Proton and Proton are not produced by wine HQ, but, the program I want to run with my games (WeMod) needs dotnet48, and I have a need for assistance from people who understand Wine or ideally have done things with the dotnet components.

I have found two GE-Proton environments where just installing dotnet48 (so running ndp48-x86-x64-allos-enu.exe without first removing Mono) actually works (in that WeMod will actually run). This seems like a fluke.

I am hoping that someone can suggest some things to try (like registry hacking maybe) that might allow me to work out what the difference is between vanilla Wine and GE-Proton wine that is causing the dotnet40 installer to fail.
jkfloris
Level 12
Level 12
Posts: 3201
Joined: Thu Aug 14, 2014 10:10 am

Re: dotnet40: fails to install on GE-Proton, works on vanilla 8.18. Help?

Post by jkfloris »

Does it make a difference if you use the "quiet" option?

Code: Select all

winetricks -q -f dotnet48
pickworthi
Level 1
Level 1
Posts: 7
Joined: Sun Oct 15, 2023 3:03 am

Re: dotnet40: fails to install on GE-Proton, works on vanilla 8.18. Help?

Post by pickworthi »

jkfloris wrote: Mon Oct 16, 2023 10:44 am Does it make a difference if you use the "quiet" option?

Code: Select all

winetricks -q -f dotnet48
Unfortunately, that still fails with this message:

Code: Select all

 warning: Note: command wine dotNetFx40_Full_x86_x64.exe /q /c:install.exe /q returned status 67. Aborting. 
I've been digging (playing?) and have found that the Proton and GE-Proton environments use lots of symlinks from the wineprefix back to their templates. I found this while just trying the MS C++ 2010 redistributable - it failed with a "Permissions denied" message. This is caused by one of the .dll files it was trying to replace being a symlink back to the a template .dll file, and that file had read and execute permissions only.

Is this how the "builtin" behaviour is implemented for .dll's? Assuming it is, I and digging into whether any of the .dll's in these dotnet install files are actually symlinks in the Proton environment. I don't know if it's relevant or might help, but it's all I've got to got so far!
pickworthi
Level 1
Level 1
Posts: 7
Joined: Sun Oct 15, 2023 3:03 am

Re: dotnet40: fails to install on GE-Proton, works on vanilla 8.18. Help?

Post by pickworthi »

As a quick followup,

Code: Select all

winetricks -q -f dotnet48
works on a clean wineprefix for wine-8.18 It completely eradicates wine-mono, and leaves the environment with just a dotnet 4.8 installation. Prior to installation there were .NET files for versions 2, 3 and 4, which are coming from wine-mono I think.

The program I am wanting to use (WeMod) also runs correctly on the vanilla environment, which almost made me fall out of my chair :-)

Looking at the wine-8.18 prefix, it has no symlinks (either before or after), and at the end it has just one .dll exception showing in winecfg - for mscoree.dll as native.

Clearly, Proton environments are heavily modified to get games to work, so I'd understand if this forum would feel it's out of scope.
Last edited by pickworthi on Mon Oct 16, 2023 11:50 am, edited 1 time in total.
pickworthi
Level 1
Level 1
Posts: 7
Joined: Sun Oct 15, 2023 3:03 am

Re: dotnet40: fails to install on GE-Proton, works on vanilla 8.18. Help?

Post by pickworthi »

It appears that my idea about symlinks is correct. I have now successfully installed dotnet48 on GE-Proton-19 (latest as of this post), and the WeMod application starts correctly, along with the game.

Steps as follows:

Code: Select all

    Make a backup copy of the ../<gameid>/pfx folder     	#That is the wineprefix for the proton environment
    rm -r ../<gameid>pfx/dosdevices 				#This is all symolic links that we don't want to dereference
    cp -RLv ../<gameid> ../<gameid>.dereferenced		#Makes a copy with all symlinks replaced by their target files
    copy the ../dosdevices directory from ../<gameid>.backup to ../<gameid>.derefereced
    rm -r ../<gameid>						#Remove the original
    Copy ../<gameid>.derefereced ../<gameid>			#Now the wineprefix only contains files, no symlinks
    
    winetricks -q -f dotnet48
... and it works. And WeMod loads correctly, and the game runs correctly.

Only downside is that dereferenced wineprefix is 1.5GB, whereeas the original is 262MB (which is probably why Valve went this way)

I am now going to try codify this approach, and test it on a bunch of other Proton versions. Happy days.
carolynquin
Newbie
Newbie
Posts: 1
Joined: Mon Oct 30, 2023 3:31 am

Re: dotnet40: fails to install on GE-Proton, works on vanilla 8.18. Help?

Post by carolynquin »

Try installing just .NET 4.0 first without other winetricks packages. Simplify dependencies.
pickworthi
Level 1
Level 1
Posts: 7
Joined: Sun Oct 15, 2023 3:03 am

Re: dotnet40: fails to install on GE-Proton, works on vanilla 8.18. Help?

Post by pickworthi »

carolynquin wrote: Mon Oct 30, 2023 3:33 am Try installing just .NET 4.0 first without other winetricks packages. Simplify dependencies.
I did that during the process I went through above. On a Proton WINEPREFIX it fails as well, same reason - .dll's effectively read only due to symlinks Proton put in place when doing it's (very) custom version of wineboot.
Locked