我需要将我创建的文件扩展名“.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”
也许我可以复制这个值?或者这是危险的吗?(例如,不存在)。
答案 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!");
}