我试图阻止多次打开帮助文件。 这是我正在使用的方法:
public void openHelp()
{
int count = 0;
string helpPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + @"\MyApp\Help\eHelp.chm";
System.Diagnostics.Process[] helpProcs = System.Diagnostics.Process.GetProcesses();
foreach (System.Diagnostics.Process proc in helpProcs)
{
if (proc.MainWindowTitle == "Sample App Help")
{
count++;
}
}
if (count == 0)
{
System.Diagnostics.Process.Start(helpPath);
}
else
{
}
}
这个想法是,如果您发现具有相同MainWindowTitle的进程,则不要启动新进程。 但是,这不可靠。在某些情况下,即使已经运行,它仍然会启动该过程。逻辑有问题吗?
谢谢。
P.S。当然MainWindowTitle是“Sample App Help”,至少这是我在调试时看到的。
更新: 仅在用户最小化帮助文件时才会出现问题。所以我怀疑系统中发生了一些事情,我需要检查一下。有什么建议吗?
答案 0 :(得分:4)
Process.MainWindowTitle 中的备注部分包含以下注释:
主窗口是当前具有焦点的窗口;注意 这可能不是该过程的主要窗口。你必须使用 刷新方法以刷新Process对象以获取当前main 窗口句柄如果已经改变。
这可能是你问题的原因吗?
如果要保留新启动的帮助查看器的进程ID,然后再启动另一个,只需检查旧的帮助查看器是否还活着。
int id = ...
try
{
var proc = Process.GetProcessById(id);
}
catch
{
// no process running with that id
}