关于调用外部程序的两个问题

幻夢之葉 2017-07-07 06:49:53
1:首先执行一遍,my.exe目前是启动状态的。第二次执行,又会运行一个新的my.exe程序。
问题是:如何让程序当my.exe正在运行时,调用这个实例而不是再启动一个新的实例?

2:
cmdProcess.WaitForExit(/*不应设置超时*/);
这句会造成一直等待,而我的需求对于WaitForExit又不应该设置超时。
当前的代码是写在一个dll中(另一个dll调用),另一个demo(dll中,exe调用)却可以正常运行。
这可能是什么原因造成的假死状态?

PS:其中my.exe参数传入一个文件路径,my.exe对该文件进行分析,运行和得出结果。

Process cmdProcess = new Process();
cmdProcess.StartInfo.FileName = my.exe;
cmdProcess.StartInfo.Arguments = my_file;
cmdProcess.StartInfo.CreateNoWindow = true;
cmdProcess.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
try
{
if (cmdProcess.Start())
cmdProcess.WaitForExit();
}
catch { }
finally
{
cmdProcess.Close();
}
...全文
169 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2017-07-10
  • 打赏
  • 举报
回复
首先感谢三位的回复。
引用 1 楼 From_TaiWan 的回复:
引用 2 楼 duanzi_peng 的回复:
引用 3 楼 caozhy 的回复:
关于第二个那是我的失误,myfile是临时生成的文件,格式有些错误导致运行出错最后外部程序没能正确返回到调用程序中。 也间接导致了第一个问题的执行命令之后外部程序是一直存在的(myfile中对外部程序指定退出命令,那么就应该会自动Exit)
threenewbee 2017-07-08
  • 打赏
  • 举报
回复
那个程序是你写的么,如果是的话,可以用互斥量判断,然后避免重复打开。不是你写的,只能避免重复执行,不能用原来的打开。 还有个问题,线程定时器里调用,超时结束线程
exception92 2017-07-07
  • 打赏
  • 举报
回复
1:简单点使用Process类判断进程中是否存在exe文件,存在就不实例化。 2:假死可能是处理分析文件比较耗时造成的。
秋的红果实 2017-07-07
  • 打赏
  • 举报
回复
1、可以用Mutex,如下

bool isRun = false;
System.Threading.Mutex mt = new System.Threading.Mutex(false, "mtName", out isRun);
if(isRun)
{
    MessageBox.Show("The program is runing!");
}
else
{
    //启动程序
}
2、试下禁用错误缓存 Process cmdProcess = new Process(); cmdProcess.StartInfo.FileName = my.exe; cmdProcess.StartInfo.Arguments = my_file; cmdProcess.StartInfo.CreateNoWindow = true; cmdProcess.StartInfo.WindowStyle = ProcessWindowStyle.Minimized; cmdProcess.StartInfo.RedirectStandardError = false;

110,529

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧