2013-08-23 95 views
1

从我的应用程序中,我允许用户打开帮助文件。检查Process.Start启动的进程是否仍在运行?

帮助文件只是一个* .chm文件,它是用默认帮助打开的。

我用下面的命令

Process.Start(stringPathToTheFile); 

的问题是,用户可以在帮助菜单上点击两次以上,因为他们单击该文件将打开尽可能多的时间打开它。

我的第一个问题是,我必须确保用户无法打开帮助文件不止一次:

我知道了process.HasExcited财产,但如果我打开我的软件,我不能,因为使用此,点击帮助,关闭我的软件,再次打开它,然后点击帮助我最终打开两个帮助文件。

编辑 看来,这不是很清楚,所以这里是我的意思一小部分。

创建与此控制台应用程序:

如果我使用HasExited(或事件),我有这样的代码:

private static readonly Dictionary<String, Process> _startedProcess = new Dictionary<string, Process>(); 

private static void Main() 
{ 
    String file = @"c:\testFile.txt"; 
    while (true) 
    { 
     Console.ReadLine(); 
     OpenProcessIfNeeded(file); 
    } 
} 

private static void OpenProcessIfNeeded(String file) 
{ 
    if (!_startedProcess.ContainsKey(file) || _startedProcess[file].HasExited) 
    { 
     Process process = Process.Start(file); 
     _startedProcess[file] = process; 
    } 
} 

这项工作当你不断控制台应用程序打开,但如果您关闭应用程序并重新打开它,它将不起作用,因为_startedProcess将不包含该过程。

而我找不到正确的过程Process.GetProcesses(),因为我没有看到任何属性,让我知道它是哪个过程。

那么,我怎么才能看到一个进程当前正在显示我的文件?我无法搜索进程,因为进程(hh.exe)可用于读取其他文件。

我的第二个愿望是关注现有的过程,如果我已经打开这个文件。

谢谢您的帮助

+0

的HTML帮助() API是非常原始的,你可以用它做什么,没有什么可以解决你的问题。这些天至少有一个原因,就是大家都在浏览器中显示帮助。 –

+0

我不确定要了解这是如何相关的。我目前有一个帮助文件的问题,但它可能与任何其他类型的文件相同的问题(并且我不使用HtmlHelp API) – J4N

+0

那么,如果你愿意,那么你至少可以解决一个问题:当您的主应用程序退出时,帮助窗口会自动关闭。 .NET中的Help.ShowHelp() –

回答

0

我找到了一种方法来检查,如果一个进程在他的“的CommandLine”的文件,这意味着它正在编辑应用程序:

private static void OpenProcessIfNeeded(String file) 
{ 
    using (ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process")) 
    { 
     foreach (ManagementObject mo in mos.Get()) 
     { 
      if (mo["CommandLine"] != null && 
       mo["CommandLine"].ToString().IndexOf(file, StringComparison.InvariantCultureIgnoreCase) > -1) 
      { 
       Console.WriteLine("Found!: " + mo["CommandLine"]); 
       return; 
      } 
     } 
    } 
    Process.Start(file); 
} 
相关问题