【问题标题】:VB.net - Running a java application using Shell() and set its appdata folder. multiple commands?VB.net - 使用 Shell() 运行 java 应用程序并设置其 appdata 文件夹。多个命令?
【发布时间】:2012-07-24 11:49:21
【问题描述】:

好吧,伙计们,我有一份我的世界,它是一个由 Minecraft.exe 启动的 Java 程序。

在同一个文件夹中是我在 VB.net 中编程的程序(我们称之为 launcher.exe)和一个名为 LocalAppData 的文件夹。

如果我将快捷方式放置在与 Minecraft.exe 相同的文件夹中,请清除“开始于”字段并将其放入目标字段:

C:\Windows\System32\cmd.exe /c start cd LocalAppData&& set APPDATA=%cd%\LocalAppData&& javaw -Xms4096M -Xmx4096M -cp LocalAppData\Minecraft.exe net.minecraft.LauncherFrame

然后 minecraft 从 LocalAppData 文件夹中使用我的自定义内存分配启动。两个命令窗口也会出现。一个在 minecraft 关闭时关闭,但另一个没有,需要用户关闭

我的问题是:我如何在 VB.net 中获得相同的结果,而不是使用 Windows 快捷方式,有没有办法阻止命令窗口出现或将它们都设置为自动关闭?

我的目标是从子文件夹启动 minecraft,因此本地文件路径比全局文件路径更可取,但在运行时确定应用程序的位置并从子文件夹工作也可以。

我以为我可以在 Shell() 命令中使用相同的代码来产生相同的效果,但事实并非如此。

理想情况下,我想创建一个运行我的世界的程序:

  • 自定义内存分配
  • 本地文件路径,以便可移植地运行
  • appdata 文件夹更改为子文件夹,以便可移植地运行它
  • 这些命令窗口要么消失要么最小化,然后在用户关闭我的世​​界时自动关闭。

我知道这是一个很大的问题,但我已经学习了 6 个月的编程课程,我承认我不是最好的程序员。 一旦我知道如何做到这一点,我就可以创建程序的其余部分,在单独的子文件夹中管理多个安装,并让您选择启动哪个,但我只需要实际启动 java 应用程序本身的帮助。

注意: 我应该澄清一下,Minecraft.exe 不是我制作的,我不会编写 java 程序。我只是在 VB.Net 中寻找解决方案。

感谢您阅读所有这些内容,很抱歉发了这么长的帖子。

编辑

感谢您的帮助。这是我到目前为止所拥有的,但它会产生错误“错误:无法创建 JavaVirtualMachine。错误:发生了致命异常。程序将退出”

'Declare Processes
Dim appDataStartInfo As ProcessStartInfo = New ProcessStartInfo()
Dim javaStartInfo As ProcessStartInfo = New ProcessStartInfo()
Dim appPath As String = Application.StartupPath()
'Launch appdata relocation process
appDataStartInfo.FileName = "cmd.exe"
appDataStartInfo.Arguments = "/c start cd " & appPath & "&& set APPDATA=" & appPath & "\LocalAppData"
appDataStartInfo.UseShellExecute = True
Process.Start(appDataStartInfo)
'Launch Minecraft
javaStartInfo.FileName = "javaw.exe"
javaStartInfo.Arguments = "-Xms4096M -Xmx4096M -cp " & appPath & "\LocalAppData\.minecraft\bin\Minecraft.jar net.minecraft.LauncherFrame"
javaStartInfo.UseShellExecute = True
Process.Start(javaStartInfo)

有人知道我哪里出错了吗?

【问题讨论】:

    标签: vb.net process command-line-arguments appdata


    【解决方案1】:

    Process 类 (http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx) 允许您启动一个进程。您使用 ProcessStartInfo 实例 (http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo(v=vs.80).aspx ) 设置它。

    我没有时间告诉你所有的细节,但是这个伪代码应该可以帮助你开始:

    Dim startInfo As ProcessStartInfo = new ProcessStartInfo()
    startInfo.FileName = "javaw.exe" 'That's the name of your executable
    startInfo.Arguments = "your argument line" 
    startInfo.UseShellExecute = true 'Needed to open a command window   
    Process.Start(startInfo)
    

    【讨论】:

    • 好的,这就是我目前所拥有的:
    • 哦,抱歉 - 帖子太长了。到目前为止的代码现在在问题的描述中。
    • 您正在启动 2 个进程,一个用于设置一些环境变量,另一个用于启动 java。你确定你的修改是持久的吗?如果它们在您的第一个过程中是本地的,我不会感到惊讶。如果这是问题,解决它的一种方法是使用 vb.Net 生成一个批处理(dos)文件,然后使用 vb.net 启动批处理
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多