平时项目程序部署的配置文件种类都是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\"");
}
}
}
}
}
}