6

我需要将我创建的“.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”

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

4

3 回答 3

9

您可以使用:

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

或者更简单:

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

这样,操作系统在哪个驱动器上并不重要。

于 2012-01-12T17:08:08.657 回答
3

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

于 2012-01-12T17:07:46.677 回答
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!");
}
于 2012-01-12T18:15:54.103 回答