Jump to content

kachunkachunk

Members
  • Posts

    4
  • Joined

  • Last visited

Everything posted by kachunkachunk

  1. Hey There, So not really much of a question per se, but I'm somewhat hopeful this will help someone one day. Basically I have had a few rare edge cases where games (their launchers, updaters, etc) don't "play nice" on a drive pool. One pretty known one is you can't reliably update or sometimes complete downloads for Windows Store / Xbox Games Pass for PC games on a Drive Pool. So the best solution is to just store those on the underlying drives. Or a more complex way is to create a vhdx on the pool, and mount that on startup. I abandoned this process because auto-mount tasks on start were unreliable. Another and more recent issue was a really vague .NET error upon trying to launch Vermintide 2 (or its launcher rather), and now recently the upcoming Darktide game release. Also its launcher. Unsurprising that both are built similarly and have the same underlying issue. Here's a .NET Runtime type 1026 error snippet: Application: launcher.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.IO.FileLoadException at Launcher.WebpageControl.InitializeComponent() at Launcher.WebpageControl..ctor() Exception Info: System.Windows.Markup.XamlParseException at System.Windows.Markup.WpfXamlLoader.Load(System.Xaml.XamlReader, System.Xaml.IXamlObjectWriterFactory, Boolean, System.Object, System.Xaml.XamlObjectWriterSettings, System.Uri) at System.Windows.Markup.WpfXamlLoader.LoadBaml(System.Xaml.XamlReader, Boolean, System.Object, System.Xaml.Permissions.XamlAccessLevel, System.Uri) at System.Windows.Markup.XamlReader.LoadBaml(System.IO.Stream, System.Windows.Markup.ParserContext, System.Object, Boolean) at System.Windows.Application.LoadBamlStreamWithSyncInfo(System.IO.Stream, System.Windows.Markup.ParserContext) at System.Windows.Application.LoadComponent(System.Uri, Boolean) at System.Windows.Application.DoStartup() at System.Windows.Application.<.ctor>b__1_0(System.Object) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate) at System.Windows.Threading.DispatcherOperation.InvokeImpl() at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object) at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) at MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object) at System.Windows.Threading.DispatcherOperation.Invoke() at System.Windows.Threading.Dispatcher.ProcessQueue() at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef) at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate) at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr) at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef) at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame) at System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame) at System.Windows.Application.RunDispatcher(System.Object) at System.Windows.Application.RunInternal(System.Windows.Window) at System.Windows.Application.Run(System.Windows.Window) at Launcher.App.Main() And an accompanying generic Application Error (1000): Faulting application name: launcher.exe_Vermintide 2, version: 1.0.524.0, time stamp: 0x62986a65 Faulting module name: KERNELBASE.dll, version: 10.0.22621.819, time stamp: 0x1355b9cf Exception code: 0xe0434352 Fault offset: 0x00147402 Faulting process id: 0x0x6AA0 Faulting application start time: 0x0x1D8FF0D9740A592 Faulting application path: D:\Games\SteamLibrary\steamapps\common\Warhammer Vermintide 2\launcher\launcher.exe Faulting module path: C:\Windows\System32\KERNELBASE.dll Report Id: a3224c03-9aec-4d47-a204-1d09af62180d Faulting package full name: Faulting package-relative application ID: That path / D: being the drive pool, with X, Y, and Z being a pretty typical pool comprised of three NVMes. NTFS, default cluster sizes, etc. Associated WER event: Fault bucket 2257353757522315808, type 5 Event Name: CLR20r3 Response: Not available Cab Id: 0 Problem signature: P1: launcher.exe P2: 1.0.524.0 P3: 62986a65 P4: Launcher P5: 1.0.524.0 P6: 62986a65 P7: ac P8: 32 P9: System.Windows.Markup.XamlParse P10: Attached files: \\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WER.1dd51168-9fc5-4a36-a0bc-9af7fa29d163.tmp.mdmp \\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WER.0d25c5e8-7112-4acf-af6c-6a3c7eb889e6.tmp.WERInternalMetadata.xml WPR_initiated_DiagTrackMiniLogger_OneTrace_User_Logger_20221002_1_EC_0_inject.etl \\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WER.8ac1f13e-b0c0-4233-aac7-e62d5d127872.tmp.etl WPR_initiated_DiagTrackMiniLogger_WPR System Collector_inject.etl \\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WER.a1360658-513c-4348-a0b1-63893be7c43f.tmp.etl \\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WER.e2911cc9-68d1-43fd-9ae1-54d8ce9aca1a.tmp.csv \\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WER.82c6eb73-9351-41d2-8b8c-15f17e264241.tmp.txt \\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WER.58330270-c9d8-4b11-aa75-af747f668d82.tmp.xml These files may be available here: \\?\C:\ProgramData\Microsoft\Windows\WER\ReportArchive\AppCrash_launcher.exe_879a726c111c41b74fd6edbb8a2bb72073c9fa4_653db52e_6bcbded9-15e1-46ab-a0b0-54dcb52093e4 Analysis symbol: Rechecking for solution: 0 Report Id: a3224c03-9aec-4d47-a204-1d09af62180d Report Status: 268435456 Hashed bucket: e63b9d47e4b06efbef53bb485182ca20 Cab Guid: 0 Troubleshooting recommendations immediately take you to running .NET installer 4.7.2, and failing that, "repairing" .NET. This actually led to breaking my .NET installs completely, causing immediate errors on opening up even basic installers (few weeks ago), so I ended up reinstalling Windows back then You can imagine my surprise when on a fresh OS deployment, the issue immediately reproduced itself with a clean install and only the bare mininimum requirements. At least Drivepool is amazing to get up and resuming where you left off, heh. Anyway, rather annoyingly, they fail to take into account that 4.7.2 was superceded by built-ins on Windows 10 since some time early last year, with 4.8. Let alone being on Windows 11 22H2 now. So you actually cannot feasibly install 4.7.2 and if you manage to, you'd probably break something. So this kinda stuff just wastes a ton of your time in troubleshooting. So the takeaway is that if you run into really odd anti-cheat failures, or inexplicable launch/post-install/update errors, it may relate to filesystem functions not working as expected (whatever esoteric calls or functions they may be making, or assuming results for). And these are probably quite poorly logged by the respective applications and host system by default. That said, System.IO.FileLoadException should have been a decent hint... I feel pretty dumb. Unless that's just hindsight being 20/20 here. So, while this is easy to reproduce, do you think is this a Drivepool thing to possibly look into, track, and fix? Let me know if you want the dumps. Or is this isolated to Fatshark and the way they wrote their launcher in .NET 4.7.2? I don't mind raising this with them on their forums, but doubt it'd go far. At the very least, I'm hoping this post will help someone else one day.
  2. Sorry from myself as well, haha - I'm not against checking out Cloud Drive for this use case as well, especially if it simplifies things and still pools space and allows for some duplication/redundancy. The vhd-mount stuff can be a bit fickle for inexplicable reasons, just rarely and randomly. I sometimes still see update issues as well, but it could be unrelated. Nevertheless, can you elaborate on how Store apps would behave in contrast, on Cloud Drive, Drashna?
  3. Oh, I didn't realize you needed the Hyper-V role installed to mount vhd/vhdx files/disks, but I suppose it makes some sense if you squint hard enough. I just had it enabled before-hand for other reasons. If you haven't already, be sure you perform a reboot test and ensure the disk auto-mounts on boot (after you set up that scheduled task, per step 7). Related to the Hyper-V role - If it's enabled nowadays, Virtualization Based Security (VBS) can prevent other hypervisors from working properly in it (VT extensions don't get exposed to the other hypervisor). Mainly you just need to ensure you're on a current update level for the now "nested" hypervisor (like VMware Workstation 15.5 and later). Some Android emulators like Nox (technically on VirtualBox) might not run well without updating it as well, mainly because it's running without its desired passed-through VT extension. Anyway, happy that helped you! It's been a while but so far everything is running strong. I haven't had any update hiccups since, and reboots are completely uneventful. Edit: Okay, I think I narrowed it down to a specific feature: "Hyper-V Module for Windows PowerShell," nestled within the Hyper-V feature tree, so I've made an edit in my previous comment. You otherwise shouldn't need to enable the entire Hyper-V feature if you don't want to. There may be other commands to mount a .vhd/vhdx file without using that particular PowerShell commandlet as well. This is a bigger issue/concern for Home edition users since Hyper-V is not available for them without upgrading.
  4. Hey gang, I searched around and wanted to see if I could find the best topic to reply to, rather than submitting a new thread. But I can do that if preferred. TL;DR - there's a decent workaround: Create a virtual disk (.vhdx / dynamically sized) on your Drive Pool via Windows Disk Management, format it as NTFS with a 4K cluster size, assign it a drive letter, then install your apps to it. Longer version: From my understanding from this, the EFS implementation in Windows produces far too many unreasonable hurdles for filters and other filesystems to interoperate with Windows Store Apps (inclusive of Xbox Games Pass content). Among other things. The EFS... stack? also makes the assumption that the filesystem's cluster size is 4KB. So if you're using something other than that, it leads to update errors eventually, even if you seemingly had no issues downloading and installing store apps originally. From Googling the original error code, it appeared that it was somewhat common on cloud gaming service VMs, as they often deploy with disks formatted with >4KB cluster sizes, which is the root of this archaic issue. I had the same errors on a Storage Space formatted as NTFS with 16KB sectors (all before I moved to Drive Pool!). Sidenote - I don't know why that was the default allocation unit size, but by the time I discovered this, there was no way I was going to evacuate the filesystem to reformat it. My guesses are that it's due to volume size (20TB), or simply because Storage Space defaults are that way out of some memory or I/O management efficiency. [Edit: 2021-01-07] So, the workaround that seemed to work for everyone was to create a virtual disk. You might have issues mounting the disk without the "Hyper-V Module for Windows PowerShell" feature installed/enabled. This comes with Hyper-V if you choose to install that, but the specific module should be installable without, I imagine. Still, the biggest concern is that I'm not sure if this is available in Home edition users or not. So, in case it helps, here's a link to a bunch of ways to mount a virtual disk: https://www.tenforums.com/tutorials/61391-mount-unmount-vhd-vhdx-file-windows-10-a.html. You mainly want to try to find a process that can be done via command-line, so you can automate it in a startup task. You really want this disk mounting on startup. Creating your virtual disk and auto-mounting it: Open Disk Management in Windows. Select a Drive Pool, or another desired volume to store your virtual disk. Under the Action menu, click Create VHD. Follow the simple steps to create and size the disk. Locate the new disk in Disk Management (at the bottom, probably. It'll have a blue icon). Initialize the disk (likely GPT), then create a new Simple volume. NTFS, 4096-byte allocation unit size (4K clusters). Optionally give it a label, assign it a drive letter. [Edit: 2020-10-15] Create a scheduled task to auto-mount your .vhdx file on startup. I used the steps documented here: https://www.tenforums.com/tutorials/138629-auto-mount-vhd-vhdx-file-startup-windows-10-a.html However if you're running Windows 10 Home edition, you may need to refer to the other link above in section 3, for more options. Finally, start using the disk. In the Xbox app, go to Settings -> General, then under Game Install options, specify your new virtual drive's letter under "Change where this app installs games by default." Go start downloading and installing games. In the Apps & Features settings page, you can also right-click and move preexisting Xbox/Store Apps if you need to.
×
×
  • Create New...