【问题标题】:Unexpected Win32Exception on getMainModulegetMainModule 上出现意外的 Win32Exception
【发布时间】:2020-03-24 17:38:01
【问题描述】:

我有以下代码。

    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

编辑:这似乎是一个权限问题,因为以管理员身份运行编译的可执行文件可以正常工作。 如何使其适用于非提升用户?

【问题讨论】:

    标签: c# .net jar process permissions


    【解决方案1】:

    正如预期的那样,这是一个权限问题。

    我解决它的方法是从注册表中获取 JAVA_HOME 变量并将“\bin\java.exe”附加到它以获取完整路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多