『QQ:1353814576』

C# 设置文件指定默认打开程序的代码


平时项目程序部署的配置文件种类都是json居多,每次部署新服务器都没有预装或者指定默认的打开程序,想着开发一个绿色版json编辑器放在程序发布目录下 当服务程序首次运行时将json格式的文件的默认打开程序修改为我的编辑器程序上 这样部署新服务器就不用每次手动去找到指定程序然后再设置默认程序了 说白了就是偷懒。

代码实现如下

当主程序启动时使用c#代码操作将json文件系统默认打开的程序指定到我自己的exe程序上

 /// <summary>
		/// 设置文件默认打开程序 前提是程序支持参数启动打开文件
		/// 特殊说明:txt后缀比较特殊,还需要从注册表修改userchoie的键值才行
		/// </summary>
		/// <param name="fileExtension">文件拓展名 示例:'.slnc'</param>
		/// <param name="appPath">默认程序绝对路径 示例:'c:\\test.exe'</param>
		/// <param name="fileIconPath">文件默认图标绝对路径 示例:'c:\\test.ico'</param>
		private void SetFileOpenApp(string fileExtension, string appPath, string fileIconPath)
		{
			var fileExtensionKey = Registry.ClassesRoot.OpenSubKey(fileExtension);
			if (fileExtensionKey != null)
				Registry.ClassesRoot.DeleteSubKeyTree(fileExtension, false);
			fileExtensionKey = Registry.ClassesRoot.CreateSubKey(fileExtension);
			using (fileExtensionKey)
			{
				var fileKeyName = $"{fileExtension.Substring(1)}file";
				fileExtensionKey.SetValue(null, fileKeyName, RegistryValueKind.String);
				using (var fileKey = fileExtensionKey.CreateSubKey(fileKeyName))
				{
					using (var defaultIcon = fileKey.CreateSubKey("DefaultIcon"))
					{
						defaultIcon.SetValue(null, fileIconPath);
					}
					using (var shell = fileKey.CreateSubKey("shell"))
					{
						using (var open = shell.CreateSubKey("open"))
						{
							using (var command = open.CreateSubKey("command"))
							{
								command.SetValue(null, $"{appPath} \"%1\"");
							}
						}
						}
          }
      }
}