新手学习 c#碰到一点问题。

2015-11-08 09:20:36 +08:00
 keruran

存在这样的问题:点击 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");
}

3514 次点击
所在节点    .NET
11 条回复
lechenging
2015-11-08 09:54:23 +08:00
做成后台线程试一下, th.IsBackground = true;
plqws
2015-11-08 10:01:31 +08:00
这是在做 mc 的启动器吗。。
aivier
2015-11-08 10:18:33 +08:00
弱弱的问一句,你这是什么鬼启动方法...直接去找 Java.exe 然后启动不好么
hahasong
2015-11-08 10:45:28 +08:00
@aivier 大神还会 c 井,好犀利,求加好友
kofip
2015-11-08 11:25:58 +08:00
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
kofip
2015-11-08 11:27:48 +08:00
如果 jave.exe 是系统变量指定好了的,上述代码就行。

如果 java.exe 在 CMD 直接运行 显示 找不到文件

那上述代码 你把 java.exe 改为 绝对路径 就行了
keruran
2015-11-08 13:26:29 +08:00
@lechenging 谢谢,这样还是不行。
@plqws 是个 java 游戏 嘿嘿。
@aivier 我之前也被这么吐槽了,别人给我一个 bat ,叫我按里面的方法启动这游戏,我也不知道用什么方法,哈哈。
@kofip 谢谢,我把做出来的 exe 放在游戏根目录可以启动,但如果我想指定一个目录应该怎么做?比如 cd C:\Program Files (x86)\game
bdbai
2015-11-08 13:30:27 +08:00
@keruran 用 Environment.GetFolderPath 获取系统的特殊目录,记得后面加 "\\"
kofip
2015-11-08 16:08:11 +08:00
@keruran 要学会举一反三,还有多使用搜索引擎。
loqixh
2015-11-08 16:17:35 +08:00
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))
{

}
keruran
2015-11-08 18:04:15 +08:00
@bdbai 非常感谢,我已经找到解决方法了。
@kofip 恩,之前姿势不对没找到答案,用 System.Environment.CurrentDirectory 就可以了,谢谢。
@loqixh 谢谢,我用了楼上的方法解决了(试了下你的方法,还是会卡主启动不了)因为自学没多久了解的很浅,想了解下造成这个问题的原因。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/234524

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX