存在这样的问题:点击 button5 后, java.exe 运行不起来。结束掉进程后才会运行起来,这问题要怎么改?
private void button5_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart(Start));
th.Start();
}
static void Start()
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false; //是否使用操作系统 shell 启动
p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
p.StartInfo.CreateNoWindow = true;//不显示程序窗口
p.Start();//启动程序
p.StandardInput.WriteLine("cd game");
p.StandardInput.WriteLine("java.exe -XX:+IgnoreUnrecognizedVMOptions -XX:MaxDirectMemorySize=92m -XX:PermSize=64m -XX:MaxPermSize=128m -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:MaxGCPauseMillis=30 -XX:MaxTenuringThreshold=0 -XX:+UseTLAB -XX:+DoEscapeAnalysis -Dsun.awt.noerasebackground=true -Dsun.java2d.noddraw=true -Djava.net.preferIPv4Stack=true -Xmx536870912 -Xms177167401 -d32 -cp core.jar -Djava.library.path=natives/win32/x86 com.ankamagames.wakfu.client.WakfuClient -L zh -C CN");
}
1
lechenging 2015-11-08 09:54:23 +08:00
做成后台线程试一下, th.IsBackground = true;
|
2
plqws 2015-11-08 10:01:31 +08:00 via Android
这是在做 mc 的启动器吗。。
|
3
aivier 2015-11-08 10:18:33 +08:00
弱弱的问一句,你这是什么鬼启动方法...直接去找 Java.exe 然后启动不好么
|
5
kofip 2015-11-08 11:25:58 +08:00 1
private void button5_Click(object sender, EventArgs e)
{ Process.Start("java.exe","-XX:+IgnoreUnrecognizedVMOptions -XX:MaxDirectMemorySize=92m -XX:PermSize=64m -XX:MaxPermSize=128m -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:MaxGCPauseMillis=30 -XX:MaxTenuringThreshold=0 -XX:+UseTLAB -XX:+DoEscapeAnalysis -Dsun.awt.noerasebackground=true -Dsun.java2d.noddraw=true -Djava.net.preferIPv4Stack=true -Xmx536870912 -Xms177167401 -d32 -cp core.jar -Djava.library.path=natives/win32/x86 com.ankamagames.wakfu.client.WakfuClient -L zh -C CN"); } 不需要 Thread |
6
kofip 2015-11-08 11:27:48 +08:00
如果 jave.exe 是系统变量指定好了的,上述代码就行。
如果 java.exe 在 CMD 直接运行 显示 找不到文件 那上述代码 你把 java.exe 改为 绝对路径 就行了 |
7
keruran OP @lechenging 谢谢,这样还是不行。
@plqws 是个 java 游戏 嘿嘿。 @aivier 我之前也被这么吐槽了,别人给我一个 bat ,叫我按里面的方法启动这游戏,我也不知道用什么方法,哈哈。 @kofip 谢谢,我把做出来的 exe 放在游戏根目录可以启动,但如果我想指定一个目录应该怎么做?比如 cd C:\Program Files (x86)\game |
8
bdbai 2015-11-08 13:30:27 +08:00 via iPhone 1
@keruran 用 Environment.GetFolderPath 获取系统的特殊目录,记得后面加 "\\"
|
10
loqixh 2015-11-08 16:17:35 +08:00 1
string arguments = "-XX:+IgnoreUnrecognizedVMOptions -XX:MaxDirectMemorySize=92m -XX:PermSize=64m -XX:MaxPermSize=128m -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:MaxGCPauseMillis=30 -XX:MaxTenuringThreshold=0 -XX:+UseTLAB -XX:+DoEscapeAnalysis -Dsun.awt.noerasebackground=true -Dsun.java2d.noddraw=true -Djava.net.preferIPv4Stack=true -Xmx536870912 -Xms177167401 -d32 -cp core.jar -Djava.library.path=natives/win32/x86 com.ankamagames.wakfu.client.WakfuClient -L zh -C CN";
ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.Arguments = arguments; startInfo.CreateNoWindow = true; startInfo.FileName = "java.exe"; startInfo.UseShellExecute = false; startInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息 startInfo.RedirectStandardOutput = true;//由调用程序获取输出信息 startInfo.RedirectStandardError = true;//重定向标准错误输出 startInfo.WorkingDirectory = Path.Combine(Directory.GetCurrentDirectory(), "game"); using (Process process = Process.Start(startInfo)) { } |