- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 C# 创建一个客户端,该客户端使用一些指定启动 Minecraft 的参数来打开 javaw.exe
。是的,这毫无意义,但我这样做是为了我自己的研究。使用 javaw.exe 文件的文件路径时,我似乎无法使其工作。相反,它会抛出一个错误,指出
Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.
此错误并未准确说明发生了什么。如果有日志,请告诉我,但据我谷歌研究,它可能意味着 200 多件事。
但是如果我仅使用文件路径 javaw.exe
启动它而不定义它的位置,它可以工作,但我发现它不适用于其他 java 安装。有点想知道为什么会这样,但这是一个附带问题。
我已经用谷歌搜索了有关此错误的所有内容,但发生这种情况的原因有太多,因此我计划将其放在一些代码中,以便其他人帮助我弄清楚到底发生了什么。
Java 路径函数:(我对此没有任何功劳,又名“被盗代码”)
private string GetJavaInstallationPath()
{
string environmentPath = Environment.GetEnvironmentVariable("JAVA_HOME");
if (!string.IsNullOrEmpty(environmentPath))
{
return environmentPath;
}
string javaKey = "SOFTWARE\\JavaSoft\\Java Runtime Environment\\";
using (Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(javaKey))
{
string currentVersion = rk.GetValue("CurrentVersion").ToString();
using (Microsoft.Win32.RegistryKey key = rk.OpenSubKey(currentVersion))
{
return key.GetValue("JavaHome").ToString();
}
}
}
请注意,我从下面的列表中删除了很多库,只是为了更容易阅读参数。完整代码在更下方启动 Minecraft 功能:
private void StartMinecraft()
{
string installPath = GetJavaInstallationPath();
string filePath = System.IO.Path.Combine(installPath, "bin\\javaw.exe");
if (System.IO.File.Exists(filePath))
{
using (Process myProcess = new Process())
{
Environment.SetEnvironmentVariable("APPDATA", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)+ "\\AkumaMC\\");
string userpath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string libpath = userpath + "\\.AkumaMC";
string gamepath = libpath;
string assetdir = gamepath + "\\assets\\";
string accesstoken = accessToken;
string argument = "-XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -classpath "+ libpath + " -Djava.library.path=" + gamepath + @"\runGame -Dminecraft.launcher.brand=minecraft-launcher -Dminecraft.launcher.version=2.1.5387 -Dminecraft.client.jar=" + libpath + @"\versions\1.12.2\1.12.2.jar -cp " + libpath + @"\libraries\net\minecraftforge\forge\1.12.2-14.23.5.2838\forge-1.12.2-14.23.5.2838.jar;" + libpath + @"\libraries\net\minecraft\launchwrapper\1.12\launchwrapper-1.12.jar;" + libpath + @"\versions\1.12.2\1.12.2.jar -Xmx"+(SettingsUC.ramInt / 1024).ToString()+@"G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M -Dlog4j.configurationFile=" + libpath + @"\assets\log_configs\client-1.12.xml net.minecraft.launchwrapper.Launch --username " + uname + @" --version 1.12.2-forge --gameDir " + libpath + " --assetsDir " + libpath + @"\assets --assetIndex 1.12 --uuid " + uuidPlayer + @" --accessToken " + accesstoken + @" --userType mojang --tweakClass net.minecraftforge.fml.common.launcher.FMLTweaker --versionType Forge";
myProcess.StartInfo.UseShellExecute = false;
// You can start any process, HelloWorld is a do-nothing example.
myProcess.StartInfo.FileName = filePath;
myProcess.StartInfo.Verb = "runas";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.StartInfo.Arguments = argument;
Console.WriteLine(filePath + argument);
Console.WriteLine((SettingsUC.ramInt / 1024).ToString() + " Is the GB #");
myProcess.Start();
if (!SettingsUC.KeepLauncherOpen == true)
{
Application.Exit();
}
}
//Application.Exit();
}
else
{
MessageBox.Show("Cannot find Java installation. Please reinstall the latest version of Java and try again.", "AkumaMC Fatal Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
全面启动 Minecraft 功能:
private void StartMinecraft()
{
string installPath = GetJavaInstallationPath();
string filePath = System.IO.Path.Combine(installPath, "bin\\javaw.exe");
if (System.IO.File.Exists(filePath))
{
using (Process myProcess = new Process())
{
Environment.SetEnvironmentVariable("APPDATA", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)+ "\\AkumaMC\\");
string userpath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string libpath = userpath + "\\.AkumaMC";
string gamepath = libpath;
string assetdir = gamepath + "\\assets\\";
string accesstoken = accessToken;
string argument = "-XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -classpath "+ libpath + " -Djava.library.path=" + gamepath + @"\runGame -Dminecraft.launcher.brand=minecraft-launcher -Dminecraft.launcher.version=2.1.5387 -Dminecraft.client.jar=" + libpath + @"\versions\1.12.2\1.12.2.jar -cp " + libpath + @"\libraries\net\minecraftforge\forge\1.12.2-14.23.5.2838\forge-1.12.2-14.23.5.2838.jar;" + libpath + @"\libraries\net\minecraft\launchwrapper\1.12\launchwrapper-1.12.jar;" + libpath + @"\libraries\org\ow2\asm\asm-all\5.2\asm-all-5.2.jar;" + libpath + @"\libraries\org\jline\jline\3.5.1\jline-3.5.1.jar;" + libpath + @"\libraries\net\java\dev\jna\jna\4.4.0\jna-4.4.0.jar;" + libpath + @"\libraries\com\typesafe\akka\akka-actor_2.11\2.3.3\akka-actor_2.11-2.3.3.jar;" + libpath + @"\libraries\com\typesafe\config\1.2.1\config-1.2.1.jar;" + libpath + @"\libraries\org\scala-lang\scala-actors-migration_2.11\1.1.0\scala-actors-migration_2.11-1.1.0.jar;" + libpath + @"\libraries\org\scala-lang\scala-compiler\2.11.1\scala-compiler-2.11.1.jar;" + libpath + @"\libraries\org\scala-lang\plugins\scala-continuations-library_2.11\1.0.2\scala-continuations-library_2.11-1.0.2.jar;" + libpath + @"\libraries\org\scala-lang\plugins\scala-continuations-plugin_2.11.1\1.0.2\scala-continuations-plugin_2.11.1-1.0.2.jar;" + libpath + @"\libraries\org\scala-lang\scala-library\2.11.1\scala-library-2.11.1.jar;" + libpath + @"\libraries\org\scala-lang\scala-parser-combinators_2.11\1.0.1\scala-parser-combinators_2.11-1.0.1.jar;" + libpath + @"\libraries\org\scala-lang\scala-reflect\2.11.1\scala-reflect-2.11.1.jar;" + libpath + @"\libraries\org\scala-lang\scala-swing_2.11\1.0.1\scala-swing_2.11-1.0.1.jar;" + libpath + @"\libraries\org\scala-lang\scala-xml_2.11\1.0.2\scala-xml_2.11-1.0.2.jar;" + libpath + @"\libraries\lzma\lzma\0.0.1\lzma-0.0.1.jar;" + libpath + @"\libraries\net\sf\jopt-simple\jopt-simple\5.0.3\jopt-simple-5.0.3.jar;" + libpath + @"\libraries\java3d\vecmath\1.5.2\vecmath-1.5.2.jar;" + libpath + @"\libraries\net\sf\trove4j\trove4j\3.0.3\trove4j-3.0.3.jar;" + libpath + @"\libraries\org\apache\maven\maven-artifact\3.5.3\maven-artifact-3.5.3.jar;" + libpath + @"\libraries\com\mojang\patchy\1.1\patchy-1.1.jar;" + libpath + @"\libraries\oshi-project\oshi-core\1.1\oshi-core-1.1.jar;" + libpath + @"\libraries\net\java\dev\jna\jna\4.4.0\jna-4.4.0.jar;" + libpath + @"\libraries\net\java\dev\jna\platform\3.4.0\platform-3.4.0.jar;" + libpath + @"\libraries\com\ibm\icu\icu4j-core-mojang\51.2\icu4j-core-mojang-51.2.jar;" + libpath + @"\libraries\net\sf\jopt-simple\jopt-simple\5.0.3\jopt-simple-5.0.3.jar;" + libpath + @"\libraries\com\paulscode\codecjorbis\20101023\codecjorbis-20101023.jar;" + libpath + @"\libraries\com\paulscode\codecwav\20101023\codecwav-20101023.jar;" + libpath + @"\libraries\com\paulscode\libraryjavasound\20101123\libraryjavasound-20101123.jar;" + libpath + @"\libraries\com\paulscode\librarylwjglopenal\20100824\librarylwjglopenal-20100824.jar;" + libpath + @"\libraries\com\paulscode\soundsystem\20120107\soundsystem-20120107.jar;" + libpath + @"\libraries\io\netty\netty-all\4.1.9.Final\netty-all-4.1.9.Final.jar;" + libpath + @"\libraries\com\google\guava\guava\21.0\guava-21.0.jar;" + libpath + @"\libraries\org\apache\commons\commons-lang3\3.5\commons-lang3-3.5.jar;" + libpath + @"\libraries\commons-io\commons-io\2.5\commons-io-2.5.jar;" + libpath + @"\libraries\commons-codec\commons-codec\1.10\commons-codec-1.10.jar;" + libpath + @"\libraries\net\java\jinput\jinput\2.0.5\jinput-2.0.5.jar;" + libpath + @"\libraries\net\java\jutils\jutils\1.0.0\jutils-1.0.0.jar;" + libpath + @"\libraries\com\google\code\gson\gson\2.8.0\gson-2.8.0.jar;" + libpath + @"\libraries\com\mojang\authlib\1.5.25\authlib-1.5.25.jar;" + libpath + @"\libraries\com\mojang\realms\1.10.22\realms-1.10.22.jar;" + libpath + @"\libraries\org\apache\commons\commons-compress\1.8.1\commons-compress-1.8.1.jar;" + libpath + @"\libraries\org\apache\httpcomponents\httpclient\4.3.3\httpclient-4.3.3.jar;" + libpath + @"\libraries\commons-logging\commons-logging\1.1.3\commons-logging-1.1.3.jar;" + libpath + @"\libraries\org\apache\httpcomponents\httpcore\4.3.2\httpcore-4.3.2.jar;" + libpath + @"\libraries\it\unimi\dsi\fastutil\7.1.0\fastutil-7.1.0.jar;" + libpath + @"\libraries\org\apache\logging\log4j\log4j-api\2.8.1\log4j-api-2.8.1.jar;" + libpath + @"\libraries\org\apache\logging\log4j\log4j-core\2.8.1\log4j-core-2.8.1.jar;" + libpath + @"\libraries\org\lwjgl\lwjgl\lwjgl\2.9.4-nightly-20150209\lwjgl-2.9.4-nightly-20150209.jar;" + libpath + @"\libraries\org\lwjgl\lwjgl\lwjgl_util\2.9.4-nightly-20150209\lwjgl_util-2.9.4-nightly-20150209.jar;" + libpath + @"\libraries\com\mojang\text2speech\1.10.3\text2speech-1.10.3.jar;" + libpath + @"\versions\1.12.2\1.12.2.jar -Xmx"+(SettingsUC.ramInt / 1024).ToString()+@"G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M -Dlog4j.configurationFile=" + libpath + @"\assets\log_configs\client-1.12.xml net.minecraft.launchwrapper.Launch --username " + uname + @" --version 1.12.2-forge --gameDir " + libpath + " --assetsDir " + libpath + @"\assets --assetIndex 1.12 --uuid " + uuidPlayer + @" --accessToken " + accesstoken + @" --userType mojang --tweakClass net.minecraftforge.fml.common.launcher.FMLTweaker --versionType Forge";
myProcess.StartInfo.UseShellExecute = false;
// You can start any process, HelloWorld is a do-nothing example.
myProcess.StartInfo.FileName = filePath;
myProcess.StartInfo.Verb = "runas";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.StartInfo.Arguments = argument;
Console.WriteLine(filePath + argument);
Console.WriteLine((SettingsUC.ramInt / 1024).ToString() + " Is the GB #");
myProcess.Start();
if (!SettingsUC.KeepLauncherOpen == true)
{
Application.Exit();
}
}
//Application.Exit();
}
else
{
MessageBox.Show("Cannot find Java installation. Please reinstall the latest version of Java and try again.", "AkumaMC Fatal Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
我预计它会启动我的世界,但它只是抛出一个错误。虽然如果我改变
myProcess.StartInfo.FileName = filePath;
TO
myProcess.StartInfo.FileName = "javaw.exe";
它有效,但仅适用于我的java安装(我认为)
感谢您提供的所有帮助!
更新:经过反馈,我认为这是因为它位于一个带有空格的文件夹中。那么,有没有办法完全提取 regkey 值。经过搜索,我发现 key.GetValue().ToString() 只返回第一个单词的字符串,而不是“句子”或“完整路径”。
最佳答案
看起来通过帖子的评论,我能够缩小范围并解决问题。它正在为 java 位置寻找 32 位版本的注册表。大多数人此时都使用 64 位,因此我只是添加了对操作系统的检查,然后检查了该操作系统的注册表。
如果您有兴趣自己执行此操作,我建议使用下面更新的代码,以更好地跟踪正确的 java 文件夹。
private string GetJavaInstallationPath()
{
string environmentPath = Environment.GetEnvironmentVariable("JAVA_HOME");
if (!string.IsNullOrEmpty(environmentPath))
{
return environmentPath;
}
string javaKey = "SOFTWARE\\JavaSoft\\Java Runtime Environment\\";
if (!Environment.Is64BitOperatingSystem)
{
using (Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(javaKey))
{
string currentVersion = rk.GetValue("CurrentVersion").ToString();
using (Microsoft.Win32.RegistryKey key = rk.OpenSubKey(currentVersion))
{
return key.GetValue("JavaHome").ToString();//Not Pullying full string
}
}
}
else
{
using (var view64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
RegistryView.Registry64))
{
using (var clsid64 = view64.OpenSubKey(javaKey))
{
string currentVersion = clsid64.GetValue("CurrentVersion").ToString();
using (RegistryKey key = clsid64.OpenSubKey(currentVersion))
{
return key.GetValue("JavaHome").ToString();//Not Pullying full string
}
}
}
}
}
关于java - 无法创建 Java 虚拟机 javaw.exe。我的世界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57159073/
我正在努力处理不同的 R 可执行文件。在批处理文件中运行命令行时,R.exe(带或不带 CMD BATCH 选项)、Rcmd.exe、Rscript.exe 和 Rterm.exe 有什么区别? 两者
这个问题是我之前问题的一个答案的扩展:how to save user registration in the exe... (C#) . 这个想法本身对我来说仍然很新,但它似乎是合理的。我第一次尝试
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 12 年前。 Improve thi
我正在使用 React VR 制作一个 WebVR 应用程序。我将使用 Oculus Rift 和 HTC-Vive 测试该应用程序。我正在使用浏览器 Firefox Nightly 来访问 WebV
当我从 A.exe(位于 c:/my_software/FOLDER_A/A.exe)运行 B.exe(位于 c:/my_software/FOLDER_B/B.exe)时,两者均使用 cx_Free
我有一个以前的程序员留下的exe(GUI),它是在cpp中完成的,但是我需要禁用程序中的一些键盘键,因为当它们被意外击中时,这是不可取的。我正在使用 Windows。 我能否编写一个程序来在 Wind
这不是以下 SO 问题的重复: How do I tell if a win32 application uses the .NET runtime . 如果给定的 exe 文件是 .net exe
我刚刚安装了 ActivePython 3.6 的 64 位版本,发现它包含三个可执行文件,它们报告相同的版本信息,大小相同,但不完全相同,即peer fc.exe。我有 python.exe pyt
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
有哪些方法可以保护exe文件免遭逆向工程。有很多打包工具可以打包exe文件。这种方法在http://c-madeeasy.blogspot.com/2011/07/protecting-your-c-
仅当应用“X”(Inspect.exe | Narrator.exe | Magnify.exe)正在运行时,我才能在 Windows 应用程序中获取一些 IUIAutomationElements。
我正在编写一个创建 Windows 服务的程序。所以我需要两个 .exe 文件——一个用于程序,创建服务,另一个用于服务本身。但是我想将这两个文件合二为一。我有以下想法 - 打开 .exe 文件,我想
我有一个 UWP 应用,我需要从 users %appdata% 文件夹中启动一个 .Exe 文件。 我不知道如何找到 %appdata% 或如何启动 Exe 文件。 我已经查看了所有解决方案,但没有
我最近安装了 Visual Studio 2017,MSBuild.exe 不是应该自带的吗? bash 脚本之一正在调用它,但找不到任何东西。 这是 build.bat 产生错误的部分(您可以看到整
我正在我自己的代码中尝试来自 Mad-collections(用于在 exe 中添加/删除或更新资源的单元)中 Madres 单元的不同功能。这适用于小型资源(小于 50 MB),但对于较大的资源(大
什么是PreEmptive Protection Dotfuscator exe文件的Map.Xml和Dotfuscator1.Xml文件。我应该出于某种原因保留它们,还是项目 exe 文件组装需要它
我最近接手了一个项目,我不确定最后一个人是如何调试这个的......我有两个可执行文件,一个最终运行另一个。我将它们称为 exe1 和 exe2。这些是用 C# 创建的,我使用 Visual Stud
如何从 REBOL 脚本创建 Windows 可执行文件 (.exe)?有任何说明或视频吗? 最佳答案 使用 Rebol 2 最简单的方法是使用 SDK - 尽管这需要花钱购买许可证。该方法称为封装。
我正在尝试打开下载的 .exe 文件,但它在打开后立即关闭。有什么可能的方法可以让我打开它更长的时间来阅读内容。 最佳答案 它可能是一个控制台应用程序而不是一个 GUI 应用程序。使用命令提示符运行
我想运行一个位于以下目录中的应用程序: C:\LCR 12\stu.exe 使用 AutoIt,运行上述 stu.exe 文件的代码是什么? 最佳答案 像这样: Run("C:\LCR 12\stu.
我是一名优秀的程序员,十分优秀!