Как узнать, какой процесс будет запущен определенным файлом в C # - PullRequest
3 голосов
/ 21 июня 2011

Я хотел бы знать, какой процесс будет запущен до запуска файла с:

Process.Start("PathToFile");

Тогда я бы хотел получить путь к процессу.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 21 июня 2011

Вы можете посмотреть на MainModule свойство Process, возвращаемое из Process.Start :

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

Однако вы должны помнить, что возвращаемое значение из Proces.Start можетбыть нулевым - в соответствии с MSDN возвращаемое значение:

Новый компонент процесса, связанный с ресурсом процесса, или ноль, если ресурс процесса не запущен (например, если существующий процессиспользуется повторно).

Обновление

Чтобы узнать исполняемый файл перед запуском процесса , вам нужно заглянуть в раздел HKEY_CLASSES_ROOT в реестре.Это будет код перехода от имени файла к команде, которую оболочка выполнит при открытии файла:

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;
1 голос
/ 21 июня 2011

Возвращает объект Process, содержащий дополнительную информацию.MainModule может быть правильным выбором для вас.

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

РЕДАКТИРОВАТЬ:

Вы хотитезнать это до / без запуска процесса?-Да

Вы можете найти зарегистрированный обработчик файлов в реестре - для .doc, .txt и т. Д.

0 голосов
/ 21 июня 2011

Документы, которые вы хотите использовать для открытия файловой ассоциации 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: путь . Редактировать: Добавлена ​​еще одна ссылка .

...