8

特にWindows 7について言及しています。

次のページで webJose によって提案されているように、特定の拡張子をアプリケーションに関連付けるコードがあります: ファイル拡張子の関連付けを担当するレジストリ キーは何ですか? (ただし、提案されているように、HKEY_CLASSES_ROOT の代わりに HKEY_CURRENT_USER\Software\Classes に正しく書き込みます)

上記は最初に機能するか、拡張機能に関連付けられている他のプログラムがない場合に機能します。ただし、Windows 7 に組み込まれている [既定のプログラムを選択...] (ファイルを右クリックして表示されるコンテキスト メニューの [開く] の下にあります) を使用すると、選択した新しいプログラムに拡張機能が再度関連付けられます。

この時点で何が起こるかというと、「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\\UserChoice」がシステムによって変更されるため、新しく選択されたプログラムが引き継がれます。

上記のコードを実行して拡張機能の制御を取り戻すことはできません。制御を取り戻す唯一の方法は、次のいずれかです。

  1. UserChoice -> Progid 値の編集。これは許可されていません (プログラムでも regedit.exe を使用しても - アクセスが拒否されました)。
  2. または、UserChoice 値を削除し、アプリケーションが \OpenWithList の下の MRUList 値の最初にあることを確認します (これは regedit.exe を使用して実現できますが、プログラムでは実現できません)。

私の質問は: プログラムでこれを達成する方法はありますか? 別のプログラムに関連付けられた後、拡張機能の制御を取り戻すために変更できるレジストリ値はどれですか?

ユーザーがエクスプローラーを介して関連付けられたアプリケーションを拡張機能に設定した場合、拡張機能を別のアプリケーションに再度関連付けるために同じ方法を再度実行することが期待されることは明らかです。

ただし、問題は、上記のコードを使用してアプリケーションとの拡張機能の関連付けを確認するボタンがアプリケーションにあることです。残念ながら、上記の状況では、私のアプリケーションは、拡張機能が既に正常に関連付けられていることを確認するメッセージを表示します。これを回避する方法はありますか?

4

4 に答える 4

4

削除UserChoiceすると、既定のプログラムが標準のファイル関連付けキー (HKCU の ProgID で始まる) に戻ります。を削除することもできなけれOpenWithListば、極度の偏見を持って元に戻すことになります。

編集: MSDN のレジストリ キーのセキュリティとアクセス権、特にRegSetKeySecurity関数を 確認してください。キーを削除する前に、そのキーに対する管理権限を自分自身に付与する必要があることに注意してください。

于 2010-09-02T01:36:14.950 に答える
2

Window 7 のファイル アソシエーションに関して、新たな「問題」が発生しました。

これの 1 つです:あなたは自分の権利のために戦わなければなりません。

あなたが走るのが好きだと仮定して

REG.exe DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mov\UserChoice" /f /va

ACCESS DENYED になります。Regedit 'UserChoice' でキーのセキュリティ設定を確認すると、現在のユーザーの 'set' を拒否するために作成された設定ウィンドウがあることがわかります。regedit でこの設定を変更/削除すると、UserChoice を削除できるようになります。ただし、レジストリに ACL を設定するための実際のツールがあるため、プログラマー/スクリプターにとって、その設定は少し面倒です。ただし、ここでは ACCESS DENYED でキーを削除できるいくつかの回避策があります (もちろん、これは権限を変更する権利がある場合にのみ機能します)。

ResetMovAssoc.cmd

::create 'empty.hiv' 
REG ADD "HKCU\emptyKey" /f
REG SAVE "HKCU\emptyKey" empty.hiv /y
@REG DELETE "HKCU\emptyKey" /f >nul
::^-note you can add @[...] >nul to the other entries as well to run them quite

:: Delete Reg key by replacing it with an empty hiv
REG RESTORE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mov" empty.hiv
del empty.hiv

これを要約すると、ここでの主なものは、REG RESTORE + 空のキーのみを含むレジストリ ハイブ ファイルです。Regeditでは、空のレジストリ構造ファイルだけで「インポート」と同等になります (注: これはハイブ ファイルであり、*.reg ファイルではありません)。

于 2015-12-04T19:47:32.987 に答える