わかりました、私は Minecraft.exe によって起動される Java プログラムである Minecraft のコピーを持っています。
同じフォルダー内には、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 フォルダー内からカスタム メモリ割り当てを使用して起動します。2 つのコマンド ウィンドウも表示されます。1 つは Minecraft が閉じるときに閉じますが、もう 1 つは閉じず、ユーザーが閉じる必要があります。
私の質問は: Windows ショートカットの代わりに VB.net で同じ結果を得るにはどうすればよいですか? また、コマンド ウィンドウの表示を停止するか、両方を自動的に閉じるように設定する方法はありますか?
私の目標はサブフォルダーから minecraft を起動することなので、ローカル ファイルパスはグローバル ファイルパスよりもはるかに好ましいですが、実行時にアプリケーションの場所を把握し、サブフォルダーから作業することも問題ありません。
Shell() コマンド内で同じコードを使用して同じ効果を生成できると思っていましたが、そうではないようです。
理想的には、Minecraft を実行するプログラムを次のように作成したいと考えています。
- カスタムメモリ割り当て
- 移植可能に実行できるようにするためのローカルファイルパス
- 移植可能に実行できるように、appdata フォルダーがサブフォルダーに変更されました
- これらのコマンド ウィンドウは消えるか最小化され、ユーザーが minecraft を閉じると自動的に閉じます。
これが大きな質問であることは承知していますが、私はプログラミング コースを始めて 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)
誰かが私が間違っているところを見ていますか?