From 9d4bc4192277dd89119147dc6f4188ba47df5fa2 Mon Sep 17 00:00:00 2001 From: crschnick Date: Mon, 1 Sep 2025 11:42:25 +0000 Subject: [PATCH] Improve registry init --- .../java/io/xpipe/app/core/mode/BaseMode.java | 1 + .../java/io/xpipe/app/util/WindowsRegistry.java | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java b/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java index 3ee033f95..f8f4f4b3e 100644 --- a/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java +++ b/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java @@ -66,6 +66,7 @@ public class BaseMode extends OperationMode { AppSid.init(); AppBeaconServer.init(); AppLayoutModel.init(); + WindowsRegistry.init(); if (OperationMode.getStartupMode() == XPipeDaemonMode.GUI) { AppPtbDialog.showIfNeeded(); diff --git a/app/src/main/java/io/xpipe/app/util/WindowsRegistry.java b/app/src/main/java/io/xpipe/app/util/WindowsRegistry.java index 913c4f345..1435a8ac2 100644 --- a/app/src/main/java/io/xpipe/app/util/WindowsRegistry.java +++ b/app/src/main/java/io/xpipe/app/util/WindowsRegistry.java @@ -9,6 +9,7 @@ import com.sun.jna.platform.win32.Advapi32; import com.sun.jna.platform.win32.Advapi32Util; import com.sun.jna.platform.win32.WinReg; import com.sun.jna.win32.W32APIOptions; +import io.xpipe.core.OsType; import lombok.Value; import java.util.*; @@ -18,6 +19,15 @@ public abstract class WindowsRegistry { public static final int HKEY_CURRENT_USER = 0x80000001; public static final int HKEY_LOCAL_MACHINE = 0x80000002; + public static void init() { + if (OsType.getLocal() != OsType.WINDOWS) { + return; + } + + // Load lib + Local.isLibrarySupported(); + } + public static WindowsRegistry.Local local() { return new Local(); } @@ -59,7 +69,7 @@ public abstract class WindowsRegistry { private static Boolean libraryLoaded; - private static boolean isLibrarySupported() { + private static synchronized boolean isLibrarySupported() { if (libraryLoaded != null) { return libraryLoaded; } @@ -68,11 +78,12 @@ public abstract class WindowsRegistry { Native.load("Advapi32", Advapi32.class, W32APIOptions.DEFAULT_OPTIONS); return (libraryLoaded = true); } catch (Throwable t) { + libraryLoaded = false; ErrorEventFactory.fromThrowable(t) .description("Unable to load native library Advapi32.dll for registry queries." + " Registry queries will fail and some functionality will be unavailable") .handle(); - return (libraryLoaded = false); + return false; } }