使用反射为指定的文件类型创建关联

时间:2021-05-05 16:57:48

为指定的文件类型设立关联有很多方法,但这些方法在.Net中不能直接使用,今天从以前的代码中抽取一段利用反射功能实现建立文件类型关联的部分代码,以抛砖引玉,如有不妥之处,万望指教。

背景:这段代码是在我的一个小程序中使用到的,这个程序是一个自动代码生成器,名字叫做MyCodeCreator,有一个Solution的项目文件,扩展名为:mcclsn,现在我们为这个扩展名建立关联。

大家都知道建立关联无非是在注册表中动手脚,参考其它的扩展名的例子,我写了以下代码:

使用反射为指定的文件类型创建关联使用反射为指定的文件类型创建关联注册表存取方法

上面的一个方法是对注册表的存取。

 1 使用反射为指定的文件类型创建关联         enum  eStatus
 2 使用反射为指定的文件类型创建关联使用反射为指定的文件类型创建关联         {
 3使用反射为指定的文件类型创建关联            Open,
 4使用反射为指定的文件类型创建关联            Create
 5使用反射为指定的文件类型创建关联        }

 6 使用反射为指定的文件类型创建关联
 7 使用反射为指定的文件类型创建关联         public   static   void  AssocFileType()
 8 使用反射为指定的文件类型创建关联使用反射为指定的文件类型创建关联         {
 9使用反射为指定的文件类型创建关联            RegistryKey lphKey = Registry.ClassesRoot;
10使用反射为指定的文件类型创建关联            string sKeyName, sKeyValue, sFileExt;
11使用反射为指定的文件类型创建关联            eStatus status;
12使用反射为指定的文件类型创建关联
13使用反射为指定的文件类型创建关联            sKeyName = "MCSF.File.1";
14使用反射为指定的文件类型创建关联            sKeyValue = "My CodeCreator Solution File";
15使用反射为指定的文件类型创建关联            sFileExt = ".mccsln";
16使用反射为指定的文件类型创建关联
17使用反射为指定的文件类型创建关联            RegistryKey sKey = OpenOrCreateSubKey(lphKey, sFileExt, out status);
18使用反射为指定的文件类型创建关联            if (status == eStatus.Create)
19使用反射为指定的文件类型创建关联使用反射为指定的文件类型创建关联            {
20使用反射为指定的文件类型创建关联                sKey.SetValue("", sKeyName);
21使用反射为指定的文件类型创建关联                sKey.SetValue("Content Type""application/mccsln");
22使用反射为指定的文件类型创建关联            }

23使用反射为指定的文件类型创建关联
24使用反射为指定的文件类型创建关联            sKey = OpenOrCreateSubKey(lphKey, sKeyName, out status);
25使用反射为指定的文件类型创建关联            if (status == eStatus.Create)
26使用反射为指定的文件类型创建关联使用反射为指定的文件类型创建关联            {
27使用反射为指定的文件类型创建关联                sKey.SetValue("", sKeyValue);
28使用反射为指定的文件类型创建关联                sKey.SetValue("BrowserFlags"8);
29使用反射为指定的文件类型创建关联                sKey.SetValue("EditFlags"0);
30使用反射为指定的文件类型创建关联            }

31使用反射为指定的文件类型创建关联
32使用反射为指定的文件类型创建关联            string path = Application.ExecutablePath + ",0";
33使用反射为指定的文件类型创建关联            RegistryKey icon = OpenOrCreateSubKey(sKey, "DefaultIcon"out status);
34使用反射为指定的文件类型创建关联            string regPath = icon.GetValue("""").ToString();
35使用反射为指定的文件类型创建关联            if (status == eStatus.Create)
36使用反射为指定的文件类型创建关联                icon.SetValue("", path);
37使用反射为指定的文件类型创建关联            else
38使用反射为指定的文件类型创建关联使用反射为指定的文件类型创建关联            {
39使用反射为指定的文件类型创建关联                if (!path.Equals(regPath))
40使用反射为指定的文件类型创建关联                    icon.SetValue("", path);
41使用反射为指定的文件类型创建关联            }

42使用反射为指定的文件类型创建关联            icon.Close();
43使用反射为指定的文件类型创建关联
44使用反射为指定的文件类型创建关联            sKey = OpenOrCreateSubKey(sKey, "shell"out status);
45使用反射为指定的文件类型创建关联            sKey = OpenOrCreateSubKey(sKey, "open"out status);
46使用反射为指定的文件类型创建关联            RegistryKey cmd = OpenOrCreateSubKey(sKey, "command"out status);
47使用反射为指定的文件类型创建关联使用反射为指定的文件类型创建关联            string cmdline = string.Format("\"{0}\" \"%1\"", Application.ExecutablePath);
48使用反射为指定的文件类型创建关联            string regCmdline = cmd.GetValue("""").ToString();
49使用反射为指定的文件类型创建关联            if (status == eStatus.Create)
50使用反射为指定的文件类型创建关联                cmd.SetValue("", cmdline);
51使用反射为指定的文件类型创建关联            else
52使用反射为指定的文件类型创建关联使用反射为指定的文件类型创建关联            {
53使用反射为指定的文件类型创建关联                if (!cmdline.Equals(regCmdline))
54使用反射为指定的文件类型创建关联                    cmd.SetValue("", cmdline);
55使用反射为指定的文件类型创建关联            }

56使用反射为指定的文件类型创建关联
57使用反射为指定的文件类型创建关联            RegistryKey dde = OpenOrCreateSubKey(sKey, "ddeexec"out status);
58使用反射为指定的文件类型创建关联            if (status == eStatus.Create)
59使用反射为指定的文件类型创建关联使用反射为指定的文件类型创建关联            {
60使用反射为指定的文件类型创建关联                OpenOrCreateSubKey(dde, "Application"out status).SetValue("""MyCodeCreator");
61使用反射为指定的文件类型创建关联                OpenOrCreateSubKey(dde, "Topic"out status).SetValue("""System");
62使用反射为指定的文件类型创建关联            }

63使用反射为指定的文件类型创建关联            dde.Close();
64使用反射为指定的文件类型创建关联
65使用反射为指定的文件类型创建关联            sKey.Flush();
66使用反射为指定的文件类型创建关联            sKey.Close();
67使用反射为指定的文件类型创建关联
68使用反射为指定的文件类型创建关联            lphKey.Close();
69使用反射为指定的文件类型创建关联        }


上面的代码意思很简单,无非就是照猫画虎而已。如果你需要套用上面的代码需要改动的地方不多,例如扩展名啊,可执行文件位置啊,图标等等。值得注意的事,当你执行完这些操作以后,关联不会马上生效,不知道什么原因,还望高手指教。

本文原发:无垠IT教学网