我编写了一个编辑特定文件类型的程序,我想在启动时让用户选择将我的应用程序设置为此文件类型的默认编辑器(因为我不需要安装程序)。
我试图编写一个可重用的方法,通过向 HKEY_CLASSES_ROOT 添加一个密钥来为我关联一个文件(最好在任何操作系统上,尽管我正在运行 Vista),并将它与我的应用程序一起使用,但它没有似乎工作。
public static void SetAssociation(string Extension, string KeyName, string OpenWith, string FileDescription)
{
RegistryKey BaseKey;
RegistryKey OpenMethod;
RegistryKey Shell;
RegistryKey CurrentUser;
BaseKey = Registry.ClassesRoot.CreateSubKey(Extension);
BaseKey.SetValue("", KeyName);
OpenMethod = Registry.ClassesRoot.CreateSubKey(KeyName);
OpenMethod.SetValue("", FileDescription);
OpenMethod.CreateSubKey("DefaultIcon").SetValue("", "\"" + OpenWith + "\",0");
Shell = OpenMethod.CreateSubKey("Shell");
Shell.CreateSubKey("edit").CreateSubKey("command").SetValue("", "\"" + OpenWith + "\"" + " \"%1\"");
Shell.CreateSubKey("open").CreateSubKey("command").SetValue("", "\"" + OpenWith + "\"" + " \"%1\"");
BaseKey.Close();
OpenMethod.Close();
Shell.Close();
CurrentUser = Registry.CurrentUser.CreateSubKey(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" + Extension);
CurrentUser = CurrentUser.OpenSubKey("UserChoice", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl);
CurrentUser.SetValue("Progid", KeyName, RegistryValueKind.String);
CurrentUser.Close();
}
知道为什么它不起作用吗?一个示例使用可能是
SetAssociation(".ucs", "UCS_Editor_File", Application.ExecutablePath, "UCS File");
如果我使用 regedit 执行相同操作,则使用“CurrentUser”的方法部分似乎有效,但使用我的应用程序却没有。