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