アソシエイトファイル拡張子をアプリケーション
]特定のファイルタイプを編集するアプリケーションを開発する場合、通常、そのファイルタイプのデフォルトエディターとして関連付ける必要があります。インストーラーを使用せずにこれを達成するための信頼できるソリューションを次に示します。
協会の実装方法:
が提供するコードは、レジストリを操作することによりファイルを関連付けようとします。ただし、いくつかの質問が含まれています。
修正された協会コード:
以下は、これらの問題を解決するコードの変更されたバージョンです:
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エディター」という名前のアプリケーションに関連付けるには、このコードを使用できます。
SetAssociation(".ucs", "UCS_Editor_File", "UCS File", Application.ExecutablePath);
その他の注意事項:
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3