WeMod on Steam Deck

Hi there,

I would like to use WeMod on Steam Deck and share my current experience. I have read several guides (several long videos, picture series, sharing gigabytes of fully installed file structures on Github), but I don’t feel that the problem is fully understood. It feels like it is more of a guessing game.

  1. I created a new “Add Non-Steam Games to a Library” entry and installed “Proton-6.19-GE-2” with ProtonUp-Qt (from the Discover package manager) to extract the file https://api.wemod.com/client/download and changed the Steam compatibility setting to use this version of Proton for the created “Non-Steam Game” entry in the Steam library. Extraction of the files was then successful.

  2. I then installed the .NET Framework 4.8 “Free Download Offline Installer (69.4 MB)” from WineHQ - .NET Framework 4.8 successfully (it seems).

  3. Then I upgraded to Windows 7 using Protontricks (also from the Discover package manager).

  4. Now I changed the Steam entry again, first the link to the created compatdata folder to start “[…path_to_folder…]/pfx/drive_c/users/steameuser/AppData/Local/WeMod” 2> /home/deck/Desktop/WeMod.txt
    and secondly to switch to the Proton version “Proton Experimental”.

  5. I now see error messages on the desktop when I try to start WeMod.

Here are the errors:

[288:1103/173621.995:ERROR:network_change_notifier_win.cc(143)] WSALookupServiceBegin failed with: 0
Fossilize INFO: Overriding serialization path: "/home/deck/.local/share/Steam/steamapps/shadercache/.../fozpipelinesv6/steamapprun_pipeline_cache".
[408:1103/173622.943:ERROR:network_change_notifier_win.cc(143)] WSALookupServiceBegin failed with: 0
Error occurred in handler for 'ACTION_CHECK_FOR_UPDATE': Error: Command failed: 4294967295
System.AggregateException: One or more errors occurred. (The type initializer for 'System.Uri' threw an exception.) ---> System.TypeInitializationException: The type initializer for 'System.Uri' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.UriParser' threw an exception. ---> System.MissingMethodException: Method not found: bool System.Runtime.Versioning.BinaryCompatibility.get_TargetsAtLeast_Desktop_V4_5()
   --- End of inner exception stack trace ---
  at (wrapper managed-to-native) System.Object.__icall_wrapper_mono_generic_class_init(intptr)
  at System.Uri..cctor () [0x00000] in <f5c1cf7e75a94ccaa98b39898fde8d44>:0 
   --- End of inner exception stack trace ---
  at Squirrel.UpdateManager+CheckForUpdateImpl.CheckForUpdate (Squirrel.UpdaterIntention intention, System.String localReleaseFile, System.String updateUrlOrPath, System.Boolean ignoreDeltaUpdates, System.Action`1[T] progress, Squirrel.IFileDownloader urlDownloader) [0x00159] in <c962294560ee4362aca054b870bed731>:0 
  at Squirrel.UpdateManager.CheckForUpdate (System.Boolean ignoreDeltaUpdates, System.Action`1[T] progress, Squirrel.UpdaterIntention intention) [0x00107] in <c962294560ee4362aca054b870bed731>:0 
  at Squirrel.Update.Program.CheckForUpdate (System.String updateUrl, System.String appName) [0x000e7] in <c962294560ee4362aca054b870bed731>:0 
   --- End of inner exception stack trace ---
  at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00011] in <69ebfd1fc56040acade074e61bd61307>:0 
  at System.Threading.Tasks.Task`1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x0002b] in <69ebfd1fc56040acade074e61bd61307>:0 
  at System.Threading.Tasks.Task`1[TResult].get_Result () [0x0000f] in <69ebfd1fc56040acade074e61bd61307>:0 
  at Squirrel.Update.Program.executeCommandLine (System.String[] args) [0x0018f] in <c962294560ee4362aca054b870bed731>:0 
  at Squirrel.Update.Program.main (System.String[] args) [0x00113] in <c962294560ee4362aca054b870bed731>:0 
  at Squirrel.Update.Program.Main (System.String[] args) [0x00006] in <c962294560ee4362aca054b870bed731>:0 
---> (Inner Exception #0) System.TypeInitializationException: The type initializer for 'System.Uri' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.UriParser' threw an exception. ---> System.MissingMethodException: Method not found: bool System.Runtime.Versioning.BinaryCompatibility.get_TargetsAtLeast_Desktop_V4_5()
   --- End of inner exception stack trace ---
  at (wrapper managed-to-native) System.Object.__icall_wrapper_mono_generic_class_init(intptr)
  at System.Uri..cctor () [0x00000] in <f5c1cf7e75a94ccaa98b39898fde8d44>:0 
   --- End of inner exception stack trace ---
  at Squirrel.UpdateManager+CheckForUpdateImpl.CheckForUpdate (Squirrel.UpdaterIntention intention, System.String localReleaseFile, System.String updateUrlOrPath, System.Boolean ignoreDeltaUpdates, System.Action`1[T] progress, Squirrel.IFileDownloader urlDownloader) [0x00159] in <c962294560ee4362aca054b870bed731>:0 
  at Squirrel.UpdateManager.CheckForUpdate (System.Boolean ignoreDeltaUpdates, System.Action`1[T] progress, Squirrel.UpdaterIntention intention) [0x00107] in <c962294560ee4362aca054b870bed731>:0 
  at Squirrel.Update.Program.CheckForUpdate (System.String updateUrl, System.String appName) [0x000e7] in <c962294560ee4362aca054b870bed731>:0 <---


    at ChildProcess.<anonymous> (C:\users\steamuser\AppData\Local\WeMod\app-8.11.6\resources\app.asar\index.js:1:18426)
    at ChildProcess.emit (node:events:513:28)
    at ChildProcess._handle.onexit (node:internal/child_process:291:12)

My understanding is that there seem to be problems with the network request ‘ACTION_CHECK_FOR_UPDATE’. According to google (uploaded WeMod.log - how to create these?) this might be some request to “https://api.w_emod.com/client/channels/[channel]” (modified to prevent link clicking)

My understanding is that there are problems with installing dotnet in a wine environment, which Microsoft could fix, but I don’t think they will. Maybe something is missing in the Windows registry after switching from one version of Proton to another.

I was going to suggest using PublishSingleFile to make a “portable” version of WeMod, but I understand that this is not supported in dotnet 4.8, which WeMod uses.

I hope there is another solution, as the alternatives (CE, Memory-Deck) somehow work with SteamTinkerLauncher, but don’t provide the same experience.

Best,

Thank you for reaching out to us.

Firstly, we would like to clarify that while we do not officially provide support for the Steam Deck at this time. We encourage you to join our Discord channel. There, you can interact with the community and receive guidance from fellow users who may have successfully addressed similar challenges. Please note that our Discord channel includes a guide and guide feedback section where two dedicated individuals actively monitor and assist users with WeMod-related inquiries.

We appreciate your patience and understanding as we continue to explore compatibility options for different platforms. Feel free to join the Discord channel, share your experience, and collaborate with other users to enhance your WeMod experience on the Steam Deck.

Guide

Guide-Feedback

Sure. That seems to be some kind of auto-text. I read it several times. Discord, of course, has the advantage of not being searchable by Google. This is more of a sharing statement of the current situation for other users (potential customers) who already spend their time (hours) getting your product up and running.

1 Like

Sorry you feel that way, Most of our Steam deck and linux users are on discord and not the forums.

This is just a description of the steps that helped me get WeMod up and running.

 

This is not a guide. If a reader decides to repeat some steps: What you do is your own. I take no responsibility. Files might be deleted, the device might stop working. I don’t know. What you do is at your own risk! I can give no support.

 

I recently discovered this description Steam Community :: Guide :: Installing a Windows application as a non-Steam game : Vortex Mod Manager and have adapted it to WeMod for my own purposes.

  1. I installed “ProtonUp-Qt” and “Protontricks” from the Discover package manager.

  2. I installed “Proton-6.19-GE-2” with ProtonUp-Qt.

  3. I created a new “Add Non-Steam Games to a Library” entry for WeMod-8.11.6.exe - source: https://api.wemod.com/client/download - and executed the created Steam entry to extract the files in the bottle.

  4. I launched Protontricks to determine the number of the new created Steam entry (it was the highest number) and selected the entry. I ignored the warning “Your version of wine 6.19 is no longer supported…”. I selected “Choose the default wineprefix”.

  5. I changed the Steam entry to run

"/home/deck/.steam/steam/steamapps/compatdata/[number from step 4]/pfx/drive_c/users/steamuser/AppData/Local/WeMod/WeMod.exe" 2> /home/deck/Desktop/WeMod.txt

working directory:

"/home/deck/.steam/steam/steamapps/compatdata/[number from step 4]/pfx/drive_c/users/steamuser/AppData/Local/WeMod

I changed the compatibility to “Proton-6.19-GE-2”.

  1. Protontricks / “Run winecfg”: I changed the Windows version to “Windows XP”.

  2. Protontricks / “Run uninstaller”: I removed “Wine Mono” and closed “Add/Remove Programs”.

  3. I removed (I feared to delete wrong files/directories):

/home/deck/.steam/steam/steamapps/compatdata/[number from step 4]/pfx/drive_c/windows/Microsoft.NET/

/home/deck/.steam/steam/steamapps/compatdata/[number from step 4]/pfx/drive_c/windows/system32/mscoree.dll

/home/deck/.steam/steam/steamapps/compatdata/[number from step 4]/pfx/drive_c/windows/syswow64/mscoree.dll

  1. I closed Protontricks (and all applications in this bottle, the above link mentioned, process “mscorsvw.exe” must be stopped, this might be possible by stopping the Steam entry from the Steam app?)

  2. Protontricks / “Run uninstaller”: I installed “dotNetFx40_Full_x86_x64.exe” (~48 MB) from Z:/home/deck/Downloads (mapping of the usual downloads folder outside the bottle).

  3. Protontricks / “Run winecfg”: I set the Windows version to “Windows 7”.

  4. Protontricks / “Run uninstaller”: I installed “ndp48-x86-x64-allos-enu.exe” (~115 MB, this is different as the file from my above posting) from Z:/home/deck/Downloads. At the end, I clicked on “Restart now” in the installer to (only) restart the Proton bottle.

  5. Protontricks / “Run winecfg”: I added a library override for: *mscoree. It was then shown as “*mscoree (native, builtin)” in the “Existing overrides” list.

  6. Protontricks / “Run taskmgr”: I ran “cmd” (“File” / “New Task”).

In the cmd window:

c:
cd windows/microsoft.net/framework/v4.0.30319
ngen update
cd windows/microsoft.net/framework64/v4.0.30319
ngen update

For both folders: I had read under the above link, that the last output line for both “ngen update” compilation processes must be “All compilation targets are up to date”. I had to repeat execution of “ngen update” several times.

  1. I closed all Protontricks windows and checked in Steam that the Steam Entry/bottle was no longer running.

  2. I changed the compatibility for the Steam entry to “Proton Experimental”.

  3. I launched the Steam entry.
    I ignored the warning “rundll32.exe This application could not be started.” which directed me to Fix .NET Framework 'This application could not be started' - .NET Framework | Microsoft Learn.

However, I was now able to launch WeMod without any .NET Framework/dotnet errors and login.

Later on, I didn’t notice any interesting warnings/errors in the file “WeMod.txt” on the Desktop and I removed the prefix 2> /home/deck/Desktop/WeMod.txt in the Steam entry.

As told, this is not a guide!

I now understand that the whole process can be speeded up by running this command in Terminal/Konsole:

PATH=$PATH:"/home/deck/.steam/root/compatibilitytools.d/Proton-6.19-GE-2/files/bin/" WINE="/home/deck/.steam/root/compatibilitytools.d/Proton-6.19-GE-2/files/bin/wine" WINEARCH=win64 WINEDEBUG="-all" WINEPREFIX="/home/deck/.local/share/Steam/steamapps/compatdata/[number from step 4]/pfx" /home/deck/.config/steamtinkerlaunch/downloads/winetricks/src/winetricks --force --unattended dotnet40 dotnet48 win7

And testing it with:
WINE="/home/deck/.steam/root/compatibilitytools.d/Proton-6.19-GE-2/files/bin/wine" WINEARCH=win64 WINEDEBUG="-all" WINEPREFIX="/home/deck/.local/share/Steam/steamapps/compatdata/[number from step 4]/pfx" /home/deck/.steam/root/compatibilitytools.d/Proton-6.19-GE-2/files/bin/wine winecfg

Is there any information on how to add or run a game off wemod?