使用 System.Diagnostics.Process 启动第三方应用程序
本文关键字:第三方 应用程序 启动 Process System Diagnostics 使用 | 更新日期: 2023-09-27 18:35:47
All,我正在开发一个需要在运行时启动另一个应用程序的应用程序。为了启动我正在使用的第三方应用程序System.Diagnostics.Process
并确保我永远不会启动第三方应用程序两次,我采用了单例模式。
单例正在工作是必需的,但Process.Start()
方法不是。也就是说,尽管我从单例返回的相同Process
对象,Start()
正在启动第三方应用程序的另一个实例。
从 MSDN - Process.Start() 页面:
"Starts (or reuses) the process resource that is specified by the StartInfo property
of this Process component and associates it with the component."
建议它应该重用Process
的实例。我错过了什么?
谢谢你的时间。
这是我用来启动第三方应用程序的函数:
public static void ProcessStart(string ExecutablePath, string sArgs, bool bWait)
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = ExecutablePath;
if(sArgs.Length > 0)
proc.StartInfo.Arguments = sArgs;
proc.Start();
if(bWait)
proc.WaitForExit();
if(ProcessLive(ExecutablePath))
return true;
else
return false;
}
可执行文件路径:可执行文件的完整路径
sArgs:命令行参数
b等待:等待进程退出
就我而言,我使用辅助函数来确定进程是否已经在运行。 这不是您要找的,但它仍然有效:
public static bool ProcessLive(string ExecutablePath)
{
try
{
string strTargetProcessName = System.IO.Path.GetFileNameWithoutExtension(ExecutablePath);
System.Diagnostics.Process[] Processes = System.Diagnostics.Process.GetProcessesByName(strTargetProcessName);
foreach(System.Diagnostics.Process p in Processes)
{
foreach(System.Diagnostics.ProcessModule m in p.Modules)
{
if(ExecutablePath.ToLower() == m.FileName.ToLower())
return true;
}
}
}
catch(Exception){}
return false;
}
也许您应该考虑使用 Process.GetProcessesByName
来了解您正在启动的应用程序是否已经在运行。
按如下方式使用它
Process[] chromes = Process.GetProcessesByName("ProcessName"); to check whether ur process is already running or not. Based on the u can use the process already running.