V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
keruran
V2EX  ›  .NET

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

  •  
  •   keruran · 2015-11-08 09:20:36 +08:00 · 3655 次点击
    这是一个创建于 3294 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    }
    keruran
        11
    keruran  
    OP
       2015-11-08 18:04:15 +08:00
    @bdbai 非常感谢,我已经找到解决方法了。
    @kofip 恩,之前姿势不对没找到答案,用 System.Environment.CurrentDirectory 就可以了,谢谢。
    @loqixh 谢谢,我用了楼上的方法解决了(试了下你的方法,还是会卡主启动不了)因为自学没多久了解的很浅,想了解下造成这个问题的原因。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1153 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 19:01 · PVG 03:01 · LAX 11:01 · JFK 14:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.