【发布时间】:2012-11-25 12:20:38
【问题描述】:
我试图阻止多次打开帮助文件。 这是我正在使用的方法:
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 的进程,则不要启动新的进程。 然而,这并不可靠。在某些情况下,它仍然会启动该过程,即使一个已经在运行。是不是逻辑有问题?
谢谢。
附:当然 MainWindowTitle 是“Sample App Help”,至少我在调试时看到的是这样。
更新: 仅当用户最小化帮助文件时才会出现问题。所以我怀疑系统中发生了一些事情,我需要检查一些东西。有什么建议吗?
【问题讨论】:
-
您指的是 CHM 帮助文件吗?
-
是的,正是我正在做的。当然,我不能按进程名称“hh”过滤掉(出现在进程中的帮助文件),因为当我试图打开我的文件时,用户可能正在查看不同的帮助文件。
-
改用
if(proc.MainModule.FileName == helpPath)。 -
我相信
Mutex可以用来在进程之间发出信号? -
你试过用 Spy++ 查看最小化的窗口吗?