C# 注册自定义文件 双击启动

程序生成的自定义文件,比如后缀是.iwb

这种文件怎么直接启动打开程序,并打开本文件呢

1、双击打开

2、自定义的文件,有图标显示

3、自定义的文件,点击右键有相应的属性

注册表相关

准备相应的一些信息,启动路径、文件后缀、文件描述以及图标

1     string toolPath = @"D:\Gitee\WhiteBoard\Code\bin\Debug\WhiteBoard.exe";
2     string extension = ".iwb";
3     string fileType = "White Board File";
4     string icon = @"D:\Gitee\WhiteBoard\Code\bin\Debug\fileIcon.ico";

判断是否已注册

 1     var registryKey = Registry.ClassesRoot.OpenSubKey(extension);
 2     if (registryKey != null && registryKey.OpenSubKey("shell") != null && registryKey.OpenSubKey("shell").OpenSubKey("open") != null &&
 3         registryKey.OpenSubKey("shell").OpenSubKey("open").OpenSubKey("command") != null)
 4     {
 5         var varSub = registryKey.OpenSubKey("shell").OpenSubKey("open").OpenSubKey("command");
 6         var varValue = varSub.GetValue("");
 7 
 8         if (Object.Equals(varValue, toolPath + " %1"))
 9         {
10             return;
11         }
12     }

添加注册项,并设置文件类型、图标

 1     //删除
 2     Registry.ClassesRoot.DeleteSubKeyTree(extension, false);
 3     //注册
 4     registryKey = Microsoft.Win32.Registry.ClassesRoot.CreateSubKey(extension);
 5     registryKey?.SetValue("", fileType);
 6     //设置默认图标
 7     using (var iconKey = registryKey?.CreateSubKey("DefaultIcon"))
 8     {
 9         iconKey?.SetValue("", icon);
10     }

添加打开、右键引导打开项

 1     using (var shellRegistryKey = registryKey?.CreateSubKey("shell"))
 2     {
 3         using (var openCommandRegistryKey = shellRegistryKey?.CreateSubKey("open\\command"))
 4         {
 5             openCommandRegistryKey?.SetValue("", toolPath + " %1");
 6         }
 7         //添加右键打开
 8         using (var menuRegistryKey = shellRegistryKey?.CreateSubKey("使用 白板 开始教学"))
 9         {
10             menuRegistryKey?.SetValue("Icon", toolPath);
11             using (var menuCommanRegistryKey = menuRegistryKey?.CreateSubKey("command"))
12             {
13                 menuCommanRegistryKey?.SetValue("", toolPath + " %1");
14             }
15         }
16     }

添加一个文件test.iwb。执行上述注册表操作,重启电脑后,结果如下: 

注:执行注册表,会提示无权限访问。解决方案是,添加app.manifest,开启管理员权限

<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

打开自定义文件

在修改了注册表信息后,双击文件是启动了软件,之后怎么在代码中操作?

//双击启动打开
 //如果原有路径中存在空格,则会分解成多个元素
if (e.Args.Length > 0)
{
      string filePath = String.Join(" ", e.Args.ToArray());
      FileInfo file = new FileInfo(filePath);
      if (file.Exists)
       {
           var filePath = file.FullName;
       }
  }

然后可以在主程序loaded方法中,判断filePath是否有值,如果有,则获取路径下的文件,继续操作。

 

关键字:自定义文件、注册表、双击启动

posted @ 2016-08-28 21:56  唐宋元明清2188  阅读(1812)  评论(3编辑  收藏  举报