Как получить точный путь notepad.exe для того, чтобы связать расширение файла - PullRequest
6 голосов
/ 12 января 2012

Мне нужно связать созданное мной расширение «.rulog» с notepad.exe как часть установки проекта установки для компьютера с Windows 7 (это здесь, поскольку нам требуются права администратора для записи в реестр).

В основном мне нужно программно получить точный путь к notepad.exe.Теперь я понимаю, что обычно он находится в C: \ Windows \ system32.Это часть системной переменной среды PATH, так что, я думаю, я мог бы перебрать все переменные PATH и проверить, существует ли «notepad.exe», комбинируя «notepad.exe» с текущим путем, используя File.Exists.Однако это кажется очень неуклюжим.

По сути, мне нужно добавить запись в

Computer\HKEY_CLASSES_ROOT\.rulog\shell\open\command\ 

со значением пути блокнота.

Кстати, я вижу этот .txt в:

Computer\HKEY_CLASSES_ROOT\.txt\ShellNew

имеет значение для ItemName, равное

“@%SystemRoot%\system32\notepad.exe,-470”

Возможно, я могу просто скопировать это значение?Или это опасно? (Например, не существует).

Ответы [ 3 ]

8 голосов
/ 12 января 2012

Вы можете использовать:

Environment.GetEnvironmentVariable("windir") + "\\system32\\notepad.exe";

Или даже проще:

Environment.SystemDirectory + "\\notepad.exe";

Таким образом, не имеет значения, какой диск включен.

3 голосов
/ 12 января 2012

Копирование значения с помощью% systemroot% должно быть в порядке. Если он работает для ОС, он должен работать для вас!

0 голосов
/ 12 января 2012

Надежное решение:

string NotepadPath = Environment.SystemDirectory + "\\notepad.exe";
if (System.IO.File.Exists(NotepadPath))
{
    Microsoft.Win32.Registry.SetValue("HKEY_CLASSES_ROOT\\.rulog\\shell\\open\\command\\", "", NotepadPath + " %1");
}
else
{
    //do something else or throw new ApplicationException("Notepad not found!");
}
...