如何知道c#中的某个文件将启动哪个进程

本文关键字:文件 进程 启动 何知道 | 更新日期: 2023-09-27 17:59:36

我想知道在文件启动之前会启动哪个进程:

Process.Start("PathToFile");

然后我想知道这个过程的路径。

谢谢。

如何知道c#中的某个文件将启动哪个进程

您可以查看从Process返回的Process的MainModule属性。开始:

Process p = Process.Start(@"D:''test.txt");
string executableStarted = p.MainModule.FileName; // full path to notepad.exe

但是,您应该记住Proces的返回值。Start可能为null——根据MSDN,返回值为:

一个新的流程组件与过程资源相关联,或null,如果没有进程资源已启动(例如,如果过程被重复使用)。

更新

为了在启动进程之前了解可执行文件,您必须查看注册表中的HKEY_CLASSES_ROOT。这将是从文件名转到shell在打开文件时执行的命令的代码:

string extension = Path.GetExtension(path);
var regClasses = Microsoft.Win32.Registry.ClassesRoot;
var extensionKey = regClasses.OpenSubKey(extension);
var typeKey = extensionKey.GetValue(String.Empty); 
var cmdKey = regClasses.OpenSubKey(typeKey + @"'shell'open'command");
string command = cmdKey.GetValue(null) as string;

它返回一个包含更多信息的Process对象。MainModule可能是适合您的属性。

http://msdn.microsoft.com/en-US/library/system.diagnostics.process.mainmodule(v=VS.80).aspx

编辑:

你想事先知道吗启动流程-是

您可以在注册表中查找已注册的文件处理程序,例如.doc、.txt等。

要使用windows文件关联打开的文档

我在这里找到了这个链接,它解释了如何创建文件关联。这可能会有所帮助。当然,您需要阅读注册表。我知道有两种格式。

不知道路径的程序

路径环境变量在当前目录之后作为默认路径进行查询,以便在未提供路径时查找。Path环境变量可以在这里为您提供帮助。

  public static string GetPath (string pathToFile)
  {
     string fileNameOnly = Path.GetFileName(pathToFile);
     List<string> folders = Environment.GetEnvironmentVariable("Path").Split(';').ToList ();
     folders.Insert(0, Environment.CurrentDirectory);
     foreach (string folder in folders)
     {
        string fileName;
        try
        {
           // Can't trust that the Path environment variable is constructed correctly.
           fileName = Path.Combine(folder, fileNameOnly);
        }
        catch
        {
           continue;
        }
        if (File.Exists(fileName))
           return fileName;
     }
     return null;
  }

编辑:添加链接到MS:path。编辑:添加了另一个链接。