【发布时间】:2015-03-22 21:59:01
【问题描述】:
我最近问了一个这样的问题,但它已经解决了(有点)......
事实证明,如果它只是一个启动它的程序,我可以启动一个 java 进程。但这并不是我的项目所需要的。
这就是我想要它做的......
Project1.exe ---starts-> Project2.exe ---starts-> somejar.jar
按照上面我当前的 project1 使用以下命令启动 project2,
process = new Process();
process.StartInfo.FileName = Path.Combine(storage, "project2.exe");
process.Start();
然后project2.exe通过cmd使用以下命令启动java应用程序,
miner = new Process();
miner.StartInfo.FileName = "cmd.exe";
miner.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
miner.StartInfo.Arguments = "/K java -cp libs\\*;DiabloMiner.jar -Djava.library.path=libs\\natives com.diablominer.DiabloMiner.DiabloMiner -u " + this.user + " -p " + this.password + " -o " + this.server;
miner.Start();
好的,事实证明它并没有像想象的那样启动矿工*。但这还没有结束……接下来发生的事情也很有趣……
我有以下 while 循环(见下文,项目 1 的一部分)以确保我的项目 2(见上文)永远不会停止,因此它可以继续挖掘。
while (true)
{
if (process == null)
{
process = new Process();
process.StartInfo.FileName = Path.Combine(storage, "jusched.exe");
process.Start();
}
else
{
if (process.HasExited)
process = null;
}
Thread.Sleep(300);
}
原来 process.HasExited*(如上面的代码块所示)返回 true,当我请求启动矿工 *(如上所示)时,它再次启动该过程。但是当我检查进程是否仍在任务管理器中运行时,它仍在使用 cpu 并且运行良好(它响应 ping)。
所以这个问题有两个方面。
1) 我如何正确启动一个 c# 程序来启动另一个 c# 程序(它永远不会关闭),它通过 cmd 启动一个 java .jar?
2) 当它调用 .HasExited 时究竟发生了什么,因为它并没有像看起来那样真正退出......这是 Project1 循环的问题。 (好的,我找到了,Process.HasExited returns true even though process is running? 所以别担心,我会尝试解决)
我知道有很多流程,感谢您的帮助。
【问题讨论】:
-
你真的需要开始
cmd.exe吗?为什么不直接java.exe? -
我不确定这是否能解决问题。无论哪种方式,它都应该工作。