getMainModule 出现意外的 Win32Exception
Unexpected Win32Exception on getMainModule
我有如下一段代码。
string currentDir = Directory.GetCurrentDirectory();
Process mcProcess = new Process();
mcProcess.StartInfo.WorkingDirectory = currentDir;
//mcProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
mcProcess.StartInfo.UseShellExecute = true;
mcProcess.StartInfo.FileName = "java.exe";
mcProcess.StartInfo.Arguments = @"-jar Minecraft\forge.jar -Xms2G -Xmx2G";
//mcProcess.StartInfo.RedirectStandardOutput = true;
mcProcess.Start();
//MetroMessageBox.Show(this, mcProcess.StandardOutput.ReadToEnd());
//mcProcess.WaitForExit();
这会在进程启动时抛出 Win32Exception,我已经检查了目标体系结构,它是 x64。 Java 路径设置正确,如果我 运行 在控制台上的命令,它工作正常。但是这行不通。
消息:只完成了 readprocessmemory 或 writeprocessmemory 请求的一部分(经过翻译,因此可能不是 100% 准确)
堆栈跟踪:
'mcProcess.MainModule' threw an exception of type 'System.ComponentModel.Win32Exception'
at System.Diagnostics.NtProcessManager.GetModuleInfos(Int32 processId, Boolean firstModuleOnly)
at System.Diagnostics.NtProcessManager.GetFirstModuleInfo(Int32 processId)
at System.Diagnostics.Process.get_MainModule()
本机错误代码是 299 AKA ERROR_OPLOCK_NOT_GRANTED
编辑:这似乎是一个权限问题,因为以管理员身份运行编译后的可执行文件工作正常。
我怎样才能让它适用于非提升用户?
不出所料,这是一个权限问题。
我解决它的方法是从注册表中获取 JAVA_HOME 变量并将“\bin\java.exe”附加到它以获得完整路径。
我有如下一段代码。
string currentDir = Directory.GetCurrentDirectory();
Process mcProcess = new Process();
mcProcess.StartInfo.WorkingDirectory = currentDir;
//mcProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
mcProcess.StartInfo.UseShellExecute = true;
mcProcess.StartInfo.FileName = "java.exe";
mcProcess.StartInfo.Arguments = @"-jar Minecraft\forge.jar -Xms2G -Xmx2G";
//mcProcess.StartInfo.RedirectStandardOutput = true;
mcProcess.Start();
//MetroMessageBox.Show(this, mcProcess.StandardOutput.ReadToEnd());
//mcProcess.WaitForExit();
这会在进程启动时抛出 Win32Exception,我已经检查了目标体系结构,它是 x64。 Java 路径设置正确,如果我 运行 在控制台上的命令,它工作正常。但是这行不通。
消息:只完成了 readprocessmemory 或 writeprocessmemory 请求的一部分(经过翻译,因此可能不是 100% 准确)
堆栈跟踪:
'mcProcess.MainModule' threw an exception of type 'System.ComponentModel.Win32Exception'
at System.Diagnostics.NtProcessManager.GetModuleInfos(Int32 processId, Boolean firstModuleOnly)
at System.Diagnostics.NtProcessManager.GetFirstModuleInfo(Int32 processId)
at System.Diagnostics.Process.get_MainModule()
本机错误代码是 299 AKA ERROR_OPLOCK_NOT_GRANTED
编辑:这似乎是一个权限问题,因为以管理员身份运行编译后的可执行文件工作正常。 我怎样才能让它适用于非提升用户?
不出所料,这是一个权限问题。
我解决它的方法是从注册表中获取 JAVA_HOME 变量并将“\bin\java.exe”附加到它以获得完整路径。