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

5
我需要将我创建的文件扩展名“.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”

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

1
出于好奇,为什么有些开发人员坚持为像文本文件这样简单的东西创建自己专有的文件扩展名? - KingCronus
1
出于好奇,如果您知道记事本可以打开您的文件,为什么不使用等效的现有文件扩展名呢? - murgatroid99
很可能会编写一个应用程序来搜索这些文件类型的目录。我们已经有了其他日志/信息的 .txt/.log 存在,因此这只是为其提供的一项规定。 - Jeb
在这种情况下,".ru.log"仍然可以被搜索到。 - default.kramer
3个回答

9

您可以使用:

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

甚至更简单:
Environment.SystemDirectory + "\\notepad.exe";

那样做,操作系统所在的驱动器就不重要了。

3

使用%systemroot%复制该值即可。如果它适用于操作系统,那么它也适用于您!


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接