関連するいくつかの質問があります。
1) プログラムのファイルタイプの関連付けを変更することは可能ですが、実行中のみですか? この動作に何か問題があると思いますか?
2)私が見ている他のオプションは、ユーザーが自分のアプリケーションで開くか、デフォルトの関連付けを復元するかを決定できるようにすることです...「すべての.lalaファイルをキャプチャする」または「.lala関連付けを復元する」のようなものです。これどうやってするの?それが最善のアプローチだと思いますか?
ファイルの関連付けに関しては、少なくとも「方法」をカバーする回答を以前に書きました。
これにより、バックアップと復元を処理する正しい方向性も示されるはずです。C# を使用して直接レジストリにアクセスすると、.reg ファイルを使用する必要がないため、アプリで好きなように以前の値を自由にバックアップし、そこから復元することもできます。
ここでの重要な質問は、ファイルの関連付けをランダムに変更する必要があるかどうかです。少なくともユーザーに事前に尋ねることが明らかに必要です(あなたも指摘したように)。
さらに、UAC が有効になっている Vista ユーザー、または他の Windows バージョンの非特権ユーザーは、グローバル ファイルの関連付けを変更するために必要な権限を持っていない場合があります。プログラムの (アン) インストール手順は、これが成功する唯一の場所である可能性があります。
編集
Franci Penov が彼の回答で示したように、管理者でなくても、ユーザーごとにローカル ファイルの関連付けを変更する方法があります(そのため、前の段落で「グローバル関連付け」について話しました) 。彼はまた、そこに行くことがあまりお勧めできない理由についても言及しました。
小さな実行可能ファイルをそのファイル拡張子に関連付けることで、「その場で」ファイル関連付けの変更を実装できます。これにより、起動時にメイン アプリケーションが実行されているかどうかがチェックされ、ファイル名が渡されます。実行されていない場合は、"レギュラー」関連アプリ。
このアプローチの主な利点は、レジストリを一度だけ変更する必要があることです。
このアプローチの主な欠点は次のとおりです。
または、メイン プログラムの起動時にファイルの関連付けを変更することもできます。これは、管理者以外のユーザーでも機能します。ファイルの関連付けは に保存されますがHKEY_CLASSES_ROOT
、ちょっとしたコツがHKEY_LOCAL_MACHINE\SOFTWARE\Classes
ありHKEY_CURRENT_USER\SOFTWARE\Classes
ます。したがって、現在のユーザーのファイル拡張子を一時的に HKCU に登録し、HKLM からの元の関連付けを "シャドウ" することができます。
もちろん、このアプローチはお勧めしませんが、アプリケーションで 1 回クラッシュするだけでその関連付けを永続的にすることができます。また、HKCU でファイルの関連付けを処理する方法を知っているアプリケーションはほとんどないため、回復不能な状況になる可能性があります。元のアプリケーション。
それはおそらく可能ですが、面倒なことになると思います。すべてのファイル タイプの関連付けはレジストリに保存されるため、アプリの起動と停止のたびにレジストリ エントリを書き込んだり元に戻したりする必要があります。また、行う頻度によっては、新しい関連付けが Windows エクスプローラーですぐに取得されない場合があります。
関連付けは、レジストリの HKEY_CLASSES_ROOT の下にリストされ、無数の方法 (MIME タイプ/progIDs/etc) にマップできます。
私が見た多くのアプリでは、インストール時に特定のファイルの種類をアプリケーションに関連付けるかどうかを尋ねられ、オプトアウトして現在の設定をそのままにしておくことができます。
「オンザフライ」のファイルタイプの関連付けはお勧めしません
1) [開く] ダイアログのファイル タイプ ドロップリストにあるファイル タイプを定義できます。それ以外では、ファイル タイプの関連付けは単なるレジストリ設定であるため、アプリケーションを開くときにファイル タイプのデフォルトを変更し、アプリケーションを閉じるときに置き換えることができます。
間違いについては、私はしません。最初の理由は、アプリケーションの標準的な動作ではないことです。2 つ目の理由は、アプリケーションまたは PC が予期せず終了した場合、関連付けを元の設定に戻さないリスクがあることです。
2) Windows では、デフォルトで、ユーザーは右クリックと「open with」コマンドを使用してこれらのオプションを選択できます。