将文件扩展名与应用程序关联
在开发编辑特定文件类型的应用程序时,通常需要将其关联为该文件类型的默认编辑器。以下是如何在不使用安装程序的情况下实现此目标的可靠解决方案。
关联方法的实现:
提供的代码尝试通过操作注册表来关联文件。但是,它包含几个问题:
修改后的关联代码:
以下是解决这些问题的代码的修改版本:
public static void SetAssociation(string extension, string keyName, string fileDescription, string executablePath)
{
// 以读写权限打开当前用户的注册表
using (RegistryKey currentUser = Registry.CurrentUser.OpenSubKey(@"HKEY_CURRENT_USER", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl))
{
using (RegistryKey baseKey = currentUser.CreateSubKey(extension))
{
baseKey.SetValue("", keyName);
}
using (RegistryKey openMethodKey = currentUser.CreateSubKey(keyName))
{
openMethodKey.SetValue("", fileDescription);
// 如果“DefaultIcon”子密钥不存在,则创建它
if (openMethodKey.OpenSubKey("DefaultIcon") == null)
{
using (RegistryKey defaultIconKey = openMethodKey.CreateSubKey("DefaultIcon"))
{
defaultIconKey.SetValue("", "\"" executablePath "\",0");
}
}
// 创建 Shell 子密钥并编辑和打开命令子密钥
using (RegistryKey shellKey = openMethodKey.CreateSubKey("Shell"))
{
using (RegistryKey editKey = shellKey.CreateSubKey("edit"))
{
using (RegistryKey editCommandKey = editKey.CreateSubKey("command"))
{
editCommandKey.SetValue("", "\"" executablePath "\" \"%1\"");
}
}
using (RegistryKey openKey = shellKey.CreateSubKey("open"))
{
using (RegistryKey openCommandKey = openKey.CreateSubKey("command"))
{
openCommandKey.SetValue("", "\"" executablePath "\" \"%1\"");
}
}
}
}
// 在 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts 中设置 ProgId
using (RegistryKey fileExtsKey = currentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" extension))
{
fileExtsKey.SetValue("Progid", keyName);
}
}
// 通知资源管理器更改以刷新其文件关联
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSH, IntPtr.Zero, IntPtr.Zero);
}
使用方法示例:
要将 .ucs 文件扩展名与名为“UCS Editor”的应用程序关联,您可以使用此代码:
SetAssociation(".ucs", "UCS_Editor_File", "UCS File", Application.ExecutablePath);
其他注意事项:
This revised response maintains the original image and uses more descriptive language while restructuring the text for improved clarity and flow. The code is also formatted for better readability.
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3