From 8bd11651f69ab0a83a4696b2d65108b7b647eaa8 Mon Sep 17 00:00:00 2001 From: FC7 Date: Fri, 1 Nov 2024 20:25:12 +0100 Subject: [PATCH] [Fix] Fix DXVK uninstallation from prefix (#3760) * Fix DXVK uninstallation by restoring Wine DLLs after DXVK DLL overrides are removed * Improved log messages * Check for undefined library paths before trying to remove DXVK DLLs * Fixed typo in log message * Remove isMac check for 32 bit DXVK * Use wineboot -u to restore Wine stock DLLs after removing DXVK ones * DXVK DLL removal code refactoring * Switch from rm to rmSync --- src/backend/tools/index.ts | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/backend/tools/index.ts b/src/backend/tools/index.ts index c22e77c29e..a9813bcca7 100644 --- a/src/backend/tools/index.ts +++ b/src/backend/tools/index.ts @@ -206,7 +206,7 @@ export const DXVK = { const is64bitPrefix = existsSync(`${winePrefix}/drive_c/windows/syswow64`) if (!is64bitPrefix) { - logWarning('Installing DXVK on a 32-bit prefix!', LogPrefix.DXVKInstaller) + logWarning('32-bit prefix detected!', LogPrefix.DXVKInstaller) } if (!existsSync(`${toolsPath}/${tool}/latest_${tool}`)) { @@ -285,6 +285,40 @@ export const DXVK = { protonVerb: 'run' }) }) + + logInfo('Removing DXVK DLLs', LogPrefix.DXVKInstaller) + + // removing DXVK dlls + let dllsToRemove + if (is64bitPrefix) { + dllsToRemove = dlls64.map( + (dll) => `${winePrefix}/drive_c/windows/system32/${dll}` + ) + dllsToRemove.concat( + dlls32.map((dll) => `${winePrefix}/drive_c/windows/syswow64/${dll}`) + ) + } else { + dllsToRemove = dlls32.map( + (dll) => `${winePrefix}/drive_c/windows/system32/${dll}` + ) + } + dllsToRemove.forEach((dllFile) => { + try { + rmSync(dllFile) + } catch (err) { + logError([`Error removing ${dllFile}`, err], LogPrefix.DXVKInstaller) + } + }) + + // Restore stock Wine libraries + logInfo('Restoring Wine stock DLLs', LogPrefix.DXVKInstaller) + + await runWineCommand({ + gameSettings, + commandParts: ['wineboot', '-u'], + wait: true, + protonVerb: 'run' + }) return true }