如何获取notepad.exe的确切路径以便关联文件扩展名

时间:2012-01-12 17:05:05

标签: c# .net path registry notepad

我需要将我创建的文件扩展名“.rulog”与notepad.exe相关联,作为Windows 7计算机的安装项目安装的一部分(因为我们需要管理员权限才能写入注册表)。

基本上我需要以编程方式获取notepad.exe的确切路径。现在,我知道它通常存在于C:\ Windows \ system32中。这是PATH系统环境变量的一部分,所以我想我可以循环遍历所有PATH变量,并通过使用File.Exists将“notepad.exe”与当前路径组合来测试是否存在“notepad.exe”。然而,这感觉非常笨拙。

基本上我需要添加一个条目

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

带有记事本路径的值。

顺便说一下,我可以看到.txt:

Computer\HKEY_CLASSES_ROOT\.txt\ShellNew

具有ItemName为

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

也许我可以复制这个值?或者这是危险的吗?(例如,不存在)。

3 个答案:

答案 0 :(得分:8)

您可以使用:

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

甚至更容易:

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

这样,操作系统的驱动程序无关紧要。

答案 1 :(得分:3)

使用%systemroot%复制值应该没问题。如果它适用于操作系统,它应该适合你!

答案 2 :(得分:0)

万无一失的解决方案:

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!");
}