DOBON.NETプログラミング道掲示板

[ 最新記事及び返信フォームをトピックトップへ ]

■34899 / inTopicNo.1)  拡張子関連付けのサンプルで削除時 例外発生
  
□投稿者/ kurimu 一般人(1回)-(2021/08/31(Tue) 03:50:40)
  • アイコン環境/言語:[windous10 64bit vs2019 C# NET Framework4 Client Profile] 
    分類:[.NET] 

    初めての投稿です。どうぞよろしくお願いいたします。

    質問ですが、下記サイトで紹介されている拡張子関連付けの削除のサンプルを試してみたところ例外が発生します。(以前は問題無く動作していたサンプルなのですが)

    どうしたら良いのでしょうか?

    dobon.net
    関連付けを解除する
    https://dobon.net/vb/dotnet/system/associatedapp.html

    ソース抜粋
    //拡張子
    string extension = ".000";
    //ファイルタイプ名
    string fileType = Application.ProductName;

    //レジストリキーを削除
    Microsoft.Win32.Registry.ClassesRoot.DeleteSubKeyTree(extension);
    Microsoft.Win32.Registry.ClassesRoot.DeleteSubKeyTree(fileType);
       ↑
     この行で例外
    サブキーが存在しないため、サブキー ツリーを削除できません。
    とのメッセージが出ます。







マルチポストを報告
違反を報告
引用返信 削除キー/
■34900 / inTopicNo.2)  Re[1]: 拡張子関連付けのサンプルで削除時 例外発生
□投稿者/ KURIMU 一般人(1回)-(2021/09/02(Thu) 15:44:43)
  • アイコン自己解決しました。
    レジストリ書き込みをCurrentUserに変更しました。
    以下のように変更しました。

    private void レジストリ登録()
    {
    //関連付ける拡張子
    string extension = ".000";
    //実行するコマンドライン
    string commandline =
    "\"" + Application.ExecutablePath + "\" \"%1\"";
    //ファイルタイプ名
    string fileType = Application.ProductName + ".0";
    //説明(「ファイルの種類」として表示される)
    string description = "MyApplication File";
    //動詞
    string verb = "open";
    //動詞の説明(エクスプローラのコンテキストメニューに表示される。
    // 省略すると、「開く(&O)」となる。)
    string verbDescription = "MyApplicationで開く(&O)";
    //アイコンのパスとインデックス
    string iconPath = Application.ExecutablePath;
    int iconIndex = 0;

    Microsoft.Win32.RegistryKey rootkey =
    Microsoft.Win32.Registry.CurrentUser;

    //拡張子のキーを作成し、そのファイルタイプを登録
    Microsoft.Win32.RegistryKey regkey =
    rootkey.CreateSubKey("Software\\Classes\\" + extension);
    regkey.SetValue("", fileType);
    regkey.Close();

    //ファイルタイプのキーを作成し、その説明を登録
    Microsoft.Win32.RegistryKey typekey =
    rootkey.CreateSubKey("Software\\Classes\\" + fileType);
    typekey.SetValue("", description);
    typekey.Close();

    //動詞のキーを作成し、その説明を登録
    Microsoft.Win32.RegistryKey verblkey =
    rootkey.CreateSubKey("Software\\Classes\\" + fileType + "\\shell\\" + verb);
    verblkey.SetValue("", verbDescription);
    verblkey.Close();

    //コマンドのキーを作成し、実行するコマンドラインを登録
    Microsoft.Win32.RegistryKey cmdkey =
    rootkey.CreateSubKey("Software\\Classes\\" + fileType + "\\shell\\" + verb + "\\command");
    cmdkey.SetValue("", commandline);
    cmdkey.Close();

    //アイコンのキーを作成し、アイコンのパスと位置を登録
    Microsoft.Win32.RegistryKey iconkey =
    rootkey.CreateSubKey("Software\\Classes\\" + fileType + "\\DefaultIcon");
    iconkey.SetValue("", iconPath + "," + iconIndex.ToString());
    iconkey.Close();
    }

    private void レジストリ削除()
    {
    //////拡張子
    string extension = ".000";

    //ファイルタイプ名
    string fileType = Application.ProductName + ".0";

    Microsoft.Win32.Registry.ClassesRoot.DeleteSubKeyTree(extension);
    Microsoft.Win32.RegistryKey regkey =
    Registry.CurrentUser.OpenSubKey(@"Software\Classes\", true);
    regkey.DeleteSubKeyTree(fileType);
    regkey.Close();

    }

    以上です。
    これで解決済とさせていただきます。
解決み!
違反を報告
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/


- Child Tree -