在窗口注册表注册文件扩展名?

时间:2009-11-12 08:18:44

标签: c# windows registry

我想在窗口注册表中注册我自己的项目扩展。我搜索谷歌,至少我发现这个代码,这很好用,但我不明白一行。 “%L”是什么意思。

C#代码是

string ext = ".ext";
        RegistryKey key = Registry.ClassesRoot.CreateSubKey(ext);
        MessageBox.Show(exePath);
        key.SetValue("", "My Project");
        key.Close();

        key = Registry.ClassesRoot.CreateSubKey(ext + "\\Shell\\Open\\command");
        //key = key.CreateSubKey("command");

        key.SetValue("", "\"" + Application.ExecutablePath + "\" \"%L\"");
        key.Close();

        key = Registry.ClassesRoot.CreateSubKey(ext + "\\DefaultIcon");
        key.SetValue("", Application.StartupPath + "\\icon.ico");
        key.Close();

这是令我困惑的一句话,

 key.SetValue("", "\"" + Application.ExecutablePath + "\" \"%L\"");

请解释一下,我非常感谢你。

3 个答案:

答案 0 :(得分:4)

如果您的应用程序可执行文件位于C:\ your dir \ your program.exe中 该行被翻译为:

“C:\ your dir \ your program.exe”“%L”

%L被翻译为您正在打开的文件,因此您的程序正在执行该文件作为第一个参数

答案 1 :(得分:1)

为了理解%L,您需要了解哪个程序将从注册表中进行读取。

在这种情况下,当启动与扩展程序相关联的程序时,explorer.exe将读取和处理在“HKCR.ext \ shell *”下指定的谓词。

在创建命令行时,似乎找不到资源管理器查找内容的确切列表。但是,%L告诉资源管理器它启动的程序将在命令行上接受长文件名。和长文件名可以包含空格。

这就是为什么在命令行上采用长文件名的程序需要能够处理空格的原因 - 资源管理器通过使用','作为命令行分隔符,或者通过允许封闭命令行上的文件名来实现这一点在引号中。

答案 2 :(得分:0)

%L是该关联调用您的程序的文件的“long name”。在现代操作系统上,它与%1short name)相同。

相关问题