猿问

将文件扩展与应用程序相关联

将文件扩展与应用程序相关联

我编写了一个编辑特定文件类型的程序,我想让用户在启动时将我的应用程序设置为这个文件类型的默认编辑器(因为我不想要安装程序)。

我试图通过向HKEY_CLASS_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.Regi
    stryRights.FullControl);
    CurrentUser.SetValue("Progid", KeyName, RegistryValueKind.String);
    CurrentUser.Close();}

知道为什么不行吗?一个例子可能是

SetAssociation(".ucs", "UCS_Editor_File", Application.ExecutablePath, "UCS File");

方法中使用“CurrentUser”的部分,如果我使用Regedit进行同样的操作,它似乎也能工作,但是使用我的应用程序却不能。


当年话下
浏览 517回答 3
3回答
随时随地看视频慕课网APP
我要回答