在registry中注册文件扩展名?

我想在窗口registry中注册我自己的项目扩展。 我search了谷歌,至less我发现这个代码,这个效果很好,但我不明白一行。 什么是“%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\""); 

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

Solutions Collecting From Web of "在registry中注册文件扩展名?"

如果您的应用程序可执行文件在C:\您的目录\您的program.exe行被转换为:

“C:\你的目录\你的program.exe”“%L”

%L被转换为你正在打开的文件,所以你的程序正在执行那个文件作为第一个参数

为了理解%L,你需要了解哪个程序将会从注册表中读取数据。

在这种情况下,在启动与扩展相关的程序时,由explorer.exe读取和处理`HKCR.ext \ shell *'下指定的动词。

似乎没有什么资源管理器在创建命令行时寻找的权威列表。 但是,%L告诉资源管理器,它启动的程序将在命令行中接受长文件名。 长文件名可以有空格。

这就是为什么在命令行上需要长文件名的程序需要能够处理空格的原因–Explorer通过使用','作为命令行分隔符,或者通过允许命令行中的文件名用引号括起来。

%L是关联调用程序的文件的“ 长名称 ”。 在现代操作系统上,它与%1 ( 简称 )相同。