Same for me. Uninstall/reinstall hasn't helped. I am an administrator but I also tried running as a Standard user on a local account but no joy.It will not start due Elevated Privileges and "Run as Administrator" is not checked in the Properties.
There is no solution to it as it is still unknown what is preventing it from being applied to some systems. a manual workaround is posted in the #information channel on the discord server if you install it in the default location: https://discord.com/channels/897226095299010600/1110492920668237855/1372959540236255303Hello, I'm having problems with EDOMH not showing the FC inventory. It is said that you should register the application to allow handling edomh links but whenever I click the button, it tries for a while, asks permission to registry console tool, which I allow, but then comes back as unregistered again. This has been going on for 2 years now, I checked the web and this was only talked once here in 2022 and that guy could not find any solution either.
Since three years have passed, I want to ask again, is there something I can do? I am on W11 64bit, EDOMH is installed on the same SSD with the game with its own folder at F: path, so it's not in Program Files or something.
Add-Type @"
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
public class UnelevatedProcess {
[DllImport("user32.dll")]
public static extern IntPtr GetShellWindow();
[DllImport("user32.dll", SetLastError=true)]
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
[DllImport("kernel32.dll", SetLastError=true)]
public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId);
[DllImport("advapi32.dll", SetLastError=true)]
public static extern bool OpenProcessToken(IntPtr ProcessHandle, uint DesiredAccess, out IntPtr TokenHandle);
[DllImport("advapi32.dll", SetLastError=true)]
public static extern bool DuplicateTokenEx(
IntPtr hExistingToken,
uint dwDesiredAccess,
IntPtr lpTokenAttributes,
int ImpersonationLevel,
int TokenType,
out IntPtr phNewToken);
[DllImport("advapi32.dll", SetLastError=true, CharSet=CharSet.Unicode)]
public static extern bool CreateProcessWithTokenW(
IntPtr hToken,
int dwLogonFlags,
string lpApplicationName,
string lpCommandLine,
int dwCreationFlags,
IntPtr lpEnvironment,
string lpCurrentDirectory,
ref STARTUPINFO lpStartupInfo,
out PROCESS_INFORMATION lpProcessInformation);
[StructLayout(LayoutKind.Sequential)]
public struct STARTUPINFO {
public int cb;
public string lpReserved;
public string lpDesktop;
public string lpTitle;
public int dwX;
public int dwY;
public int dwXSize;
public int dwYSize;
public int dwXCountChars;
public int dwYCountChars;
public int dwFillAttribute;
public int dwFlags;
public short wShowWindow;
public short cbReserved2;
public IntPtr lpReserved2;
public IntPtr hStdInput;
public IntPtr hStdOutput;
public IntPtr hStdError;
}
[StructLayout(LayoutKind.Sequential)]
public struct PROCESS_INFORMATION {
public IntPtr hProcess;
public IntPtr hThread;
public int dwProcessId;
public int dwThreadId;
}
const uint PROCESS_QUERY_INFORMATION = 0x0400;
const uint TOKEN_DUPLICATE = 0x0002;
const uint TOKEN_ASSIGN_PRIMARY = 0x0001;
const uint TOKEN_QUERY = 0x0008;
const uint TOKEN_ALL_ACCESS = 0xF01FF;
const int SecurityImpersonation = 2;
const int TokenPrimary = 1;
public static bool Start(string exe, string args, string workingDir = null) {
IntPtr hShellWnd = GetShellWindow();
if (hShellWnd == IntPtr.Zero) return false;
uint shellPID;
GetWindowThreadProcessId(hShellWnd, out shellPID);
IntPtr hShellProcess = OpenProcess(PROCESS_QUERY_INFORMATION, false, shellPID);
if (hShellProcess == IntPtr.Zero) return false;
IntPtr hShellToken;
if (!OpenProcessToken(hShellProcess, TOKEN_DUPLICATE | TOKEN_ASSIGN_PRIMARY | TOKEN_QUERY, out hShellToken))
return false;
IntPtr hUserToken;
if (!DuplicateTokenEx(hShellToken, TOKEN_ALL_ACCESS, IntPtr.Zero, SecurityImpersonation, TokenPrimary, out hUserToken))
return false;
STARTUPINFO si = new STARTUPINFO();
si.cb = Marshal.SizeOf(si);
PROCESS_INFORMATION pi;
bool result = CreateProcessWithTokenW(
hUserToken,
0,
exe,
args,
0,
IntPtr.Zero,
workingDir, // <-- pass working directory here
ref si,
out pi
);
return result;
}
}
"@
# Example: launch EDOMH unelevated, even from elevated PowerShell
[UnelevatedProcess]::Start("C:\Users\jixxed\AppData\Local\Elite Dangerous Odyssey Materials Helper Launcher\Elite Dangerous Odyssey Materials Helper Launcher.exe", $null, "C:\Users\jixxed\AppData\Local\Elite Dangerous Odyssey Materials Helper Launcher")
A lot of people run as regular user, but when something doesn't work for whatever reason, they try to start as administrator. This can cause issues later on when running again without admin privileges. this app is intended to never be ran as admin, it does not need that kind of access to your system. When it does need it, like when registering the app for edomh:// urls, it will ask for it.
You can try this powershell script to launch an unelevated program from an elevated shell, adjust accordingly.
Code:Add-Type @" using System; using System.Diagnostics; using System.Runtime.InteropServices; public class UnelevatedProcess { [DllImport("user32.dll")] public static extern IntPtr GetShellWindow(); [DllImport("user32.dll", SetLastError=true)] public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); [DllImport("kernel32.dll", SetLastError=true)] public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId); [DllImport("advapi32.dll", SetLastError=true)] public static extern bool OpenProcessToken(IntPtr ProcessHandle, uint DesiredAccess, out IntPtr TokenHandle); [DllImport("advapi32.dll", SetLastError=true)] public static extern bool DuplicateTokenEx( IntPtr hExistingToken, uint dwDesiredAccess, IntPtr lpTokenAttributes, int ImpersonationLevel, int TokenType, out IntPtr phNewToken); [DllImport("advapi32.dll", SetLastError=true, CharSet=CharSet.Unicode)] public static extern bool CreateProcessWithTokenW( IntPtr hToken, int dwLogonFlags, string lpApplicationName, string lpCommandLine, int dwCreationFlags, IntPtr lpEnvironment, string lpCurrentDirectory, ref STARTUPINFO lpStartupInfo, out PROCESS_INFORMATION lpProcessInformation); [StructLayout(LayoutKind.Sequential)] public struct STARTUPINFO { public int cb; public string lpReserved; public string lpDesktop; public string lpTitle; public int dwX; public int dwY; public int dwXSize; public int dwYSize; public int dwXCountChars; public int dwYCountChars; public int dwFillAttribute; public int dwFlags; public short wShowWindow; public short cbReserved2; public IntPtr lpReserved2; public IntPtr hStdInput; public IntPtr hStdOutput; public IntPtr hStdError; } [StructLayout(LayoutKind.Sequential)] public struct PROCESS_INFORMATION { public IntPtr hProcess; public IntPtr hThread; public int dwProcessId; public int dwThreadId; } const uint PROCESS_QUERY_INFORMATION = 0x0400; const uint TOKEN_DUPLICATE = 0x0002; const uint TOKEN_ASSIGN_PRIMARY = 0x0001; const uint TOKEN_QUERY = 0x0008; const uint TOKEN_ALL_ACCESS = 0xF01FF; const int SecurityImpersonation = 2; const int TokenPrimary = 1; public static bool Start(string exe, string args) { IntPtr hShellWnd = GetShellWindow(); if (hShellWnd == IntPtr.Zero) return false; uint shellPID; GetWindowThreadProcessId(hShellWnd, out shellPID); IntPtr hShellProcess = OpenProcess(PROCESS_QUERY_INFORMATION, false, shellPID); if (hShellProcess == IntPtr.Zero) return false; IntPtr hShellToken; if (!OpenProcessToken(hShellProcess, TOKEN_DUPLICATE | TOKEN_ASSIGN_PRIMARY | TOKEN_QUERY, out hShellToken)) return false; IntPtr hUserToken; if (!DuplicateTokenEx(hShellToken, TOKEN_ALL_ACCESS, IntPtr.Zero, SecurityImpersonation, TokenPrimary, out hUserToken)) return false; STARTUPINFO si = new STARTUPINFO(); si.cb = Marshal.SizeOf(si); PROCESS_INFORMATION pi; bool result = CreateProcessWithTokenW( hUserToken, 0, exe, args, 0, IntPtr.Zero, null, ref si, out pi); return result; } } "@ # Example: launch EDOMH unelevated, even from elevated PowerShell [UnelevatedProcess]::Start("C:\Users\USERNAME\AppData\Local\Elite Dangerous Odyssey Materials Helper Launcher\Elite Dangerous Odyssey Materials Helper Launcher.exe", $null)
Thanks a lot for sharing the script. After running it, I got the following message:I've changed and tested the script and made some adjustments to the auto updater so everything launches correctly. make sure to update the auto updater manually to 2.234
it should not work with the built in admin account, but other accounts should work fineThanks a lot for sharing the script. After running it, I got the following message:
View attachment 437394
there is a registry script that can add it on the discord.Hello! Portable version can not handle EDOMH links? I click "register application", it requests access to registry, i allow it, app "checking" for a second or two and then it shows, that application is unregistered.
I believe that would be too much of a niche playstyle to supportHi.
Love this app.
I'd really like the ability to create a custom wishlist using the individual materials (ie not upgrade, mod or unlock recipes) and overlay a specific colour and the context "Custom Wishlist" or some such.
Yes? No? Maybe?
Clicker
Sell screen is not supported@jixxed Hi Jixxed, I have one question regarding the overlay. On this screen I can see it working:
View attachment 440377
But on the Sell screen it doesn't. Any idea, why? e.g. Blur is off.
this bug should now be fixedHi, thank you a lot for this wonderful tool, a true masterpiece!
Its working really good, the only minor issue I have is with the Wishlist not being 100% accurate in the Materials tab.
For example, my wishlist says I need 18 Ionized Gas, but in the Materials tab, hovering over Ionized Gas, only says I need 9.
Am I doing something wrong?
Thanks in advance for the help!
View attachment 440500
View attachment 440498