gpt4 book ai didi

java - 启动一个进程会启动另一个进程,该进程会启动 Java 进程吗?

转载 作者:行者123 更新时间:2023-12-01 11:59:08 28 4
gpt4 key购买 nike

我最近问过这样的问题,但它已经解决了(有点)......

基本上,事实证明,如果只是一个程序启动一个 java 进程,我就可以启动它。但这并不完全是我的项目所需要的。

这就是我想要它做的事情......

Project1.exe ---starts-> Project2.exe ---starts-> somejar.jar

按照上述内容,我当前的项目1使用以下命令启动项目2,

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# 程序,该程序启动另一个通过 cmd 启动 java .jar 的 c# 程序(永远不会关闭)?

2) 当它调用 .HasExited 时到底发生了什么,因为它看起来并没有真正退出...这是 Project1 循环的问题。(好吧,我找到了这个,Process.HasExited returns true even though process is running?,所以不用担心,我会尝试解决方法)

我知道这需要很多流程,感谢您的帮助。

最佳答案

Project2 生成一个新进程,然后完成,因此该进程退出。你应该等待矿工:

miner.WaitForExit();

此外,在 Project1 中,我建议您将 while 循环更改为如下所示:

while(true)
{
process = new Process();
process.StartInfo.FileName = Path.Combine(storage, "jusched.exe");
process.Start();
process.WaitForExit();
}

这在功能上应该是相同的,但通常被认为更干净。

编辑:

我不知道为什么 Project2 无法启动 jar,但这至少应该为您提供矿工的所有输出:

miner = new Process{
StartInfo = new ProcessStartInfo {
FileName = "java.exe",
Arguments = "-cp \"libs\\*;DiabloMiner.jar\" -Djava.library.path=libs\\natives com.diablominer.DiabloMiner.DiabloMiner -u '" + this.user + "' -p '" + this.password + "' -o '" + this.server + "'",
WorkingDirectory = Directory.GetCurrentDirectory();
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
}
};
miner.Start();
miner.WaitForExit();
string output = miner.StandardOutput.ReadToEnd();
string error = miner.StandardError.ReadToEnd();
// Display "output" and "error" however you like

如果miner现在崩溃了,error中应该有一些错误消息告诉我们出了什么问题。

这假设 this.userthis.passwordthis.server 均不包含 '

关于java - 启动一个进程会启动另一个进程,该进程会启动 Java 进程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28117085/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com