2012-12-07 49 views
0

我试图阻止不止一次打开帮助文件。 这是我使用的方法:重复的过程(奇怪的​​问题)

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是“示例应用程序帮助”,至少这是我在调试时看到的。

更新: 问题只发生在用户最小化帮助文件时。所以我怀疑系统中发生了什么,我需要检查一些东西。有什么建议么?

+0

您是指CHM帮助文件? – rro

+0

他是。它在helpPath中。 – gaynorvader

+0

是的,正是我在做什么。当然,我不能通过进程名称“hh”(出现在进程中的帮助文件中)进行过滤,因为用户在尝试打开我的文件时可能正在查看不同的帮助文件。 – Alex

回答

4

Process.MainWindowTitle备注部分包含以下注意事项:

主窗口是当前具有焦点的窗口;请注意, 这可能不是此流程的主要窗口。如果刷新方法已更改,则必须使用刷新方法刷新“处理”对象以获取当前主要的 窗口句柄。

这可能是你的问题的原因?

如何保持新启动的帮助查看器的进程ID,然后再启动另一个进程,只需检查旧的进程是否仍然存在。

int id = ... 

try 
{ 
    var proc = Process.GetProcessById(id); 
} 
catch 
{ 
    // no process running with that id 
} 
+0

这很可能是原因。我会朝这个方向挖掘。 – Alex

+0

谢谢@元素,像魅力一样工作。 – Alex