Windowsエクスプローラーで.py
ファイルを起動するときに使用する関連付けを変更しました。
.py
を参照します。コマンドラインにpyファイルの名前を入力すると、ワードパッドが開きます。
ただし、コマンドラインのassoc
とftype
は引き続き次を返します。
C:\> assoc .py
.py = Python.File
C:\> ftype Python.File
Python.File = "C:\Program\Python27\python.exe" "%1" %*
どうして関連付けが機能しているのに、assoc
とftype
はそれを認識していないのですか?
プロンプトを再起動しました。
私のレジストリの詳細:
HKEY_CLASSES_ROOT\.py
= Python.File
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\Application
= wordpad.exe
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\OpenWithProgids\Python.File
=
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.py\(Standard)
= Python.File
その他のレジストリ:
HKEY_CLASSES_ROOT\Applications\python.exe\Shell\open\command\(Standard)
= "C:\Program\Python27\python.exe" "%1" %*`
これがftype Python.File
に表示されているものだと思います。でも慣れていないようです。
(私はテストのためにこれを行っているので、最終的にはデフォルトバージョンのPythonを簡単に選択できます)。
ファイルの呼び出し方法によって、使用される動詞によって異なります。使用する動詞によって、Windowsがそれをどう処理するかが決まります。標準の動詞は、開く、編集、印刷、再生、プレビューです。ただし、 独自の動詞を作成する することは可能です。最も一般的に追加される動詞は Open With family (OpenWithProgIDsを含む)です。これは、「Open With」の下にその小さなコンテキストサブメニューを追加して、可能な代替手段を提供します。たとえば、Paint.NETをインストールしてから、.jpgファイルを右クリックすると、[プログラムから開く]エントリが、Paint.NET、Paint、およびMicrosoftがバージョンの画像ビューアと呼んでいるものを一覧表示するサブメニューに展開されます。 Windowsの。
さらに、Unsigned CodeLabsが言ったことは非常に重要です。クラスをデバッグするときは、HKLM\Software\Classes\
とHKCU\Software\Classes
を確認する必要があります。 HKCR
はシステムのクエリに非常に役立ちますが、システムの動作に問題がある理由を見つけるのにはあまり適していません。
Windows7システムでprocmon.exe
を使用して少しテストを行いましたが、assoc
コマンドとftype
コマンドがHKCR
とシステムに直接書き込もうとしているようです。どうやらそれをHKLM
への書き込みとして解釈しているようです。現在のアカウントは管理グループのメンバーですが、UACが有効になっています。 assoc .mytest=MyTest.File
を試したところ、アクセスが拒否されました。
奇妙なことに、test.mytest
というファイルを右クリックしてメモ帳に関連付けることで関連付けを作成すると、assoc
もftype
もこの関連付けを認識しません。関連付けは間違いなくHKCU
とHKCR
にあります。ただし、再起動はしていません。
レジストリとftypeおよびassocに表示されるものをどのように一致させることができるかわかりません。私にとって、そして私があなたに見ているように、ftypeとassocコマンドは役に立たない。プログラム的な方法で(エクスプローラーを使用した標準的でより簡単な方法に対して)特定の拡張機能のデフォルトプログラムを変更するために私が行うことは、このレジストリキーを変更することです
HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.TheExtensionYouWantToModify\UserChoice\ProgID
たとえば、mplayerでmp3を開きたい場合は、
HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3\UserChoice\ProgID
「mplayerc.mp3」の値
これを行うことの複雑さは何ですか:最初に有効なProgID(ftypeを使用)を知る必要があり、次にそのハイブへの書き込みアクセスが必要です。 Windowsは自動的にUserChoiceキーの拒否ACLを設定するため、書き込みアクセスを取得するには、その拒否ルールを削除する方法を見つける必要があります。ここからダウンロードできるsubinaclプログラムを使用しています http://www.Microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=en 権限を変更します。また、サードパーティのプログラムSetACLを使用することもできます。構文がはるかに単純なので、最初のものをお勧めします。
エクスプローラー(Windowsシェル)は常に、拡張機能のデフォルト値で指定されているベンダーキーで指定されたアプリケーションを優先します。 (あなたの場合は.py
は拡張子、Python.File
はベンダーキーです。)
ftype
とassoc
は他の領域から値を読み取る可能性がありますが、よくわかりません。それがExplorerのやり方です。
編集:このページはあなたの興味を引くかもしれません: MSDN-ファイルタイプ
特にこれ:
HKEY_CLASSES_ROOTサブツリーは、マージHKEY_CURRENT_USER\Software\ClassesとHKEY_LOCAL_MACHINE\Software\Classesによって形成されるビューです。
HKEY_LOCAL_MACHINEに「デフォルト」の関連付けがある場合、これはWindowsのさまざまな部分が衝突する場所であり、アカウントで定義した関連付け(HKEY_CURRENT_USERに格納されます)によって上書きされます。
Microsoftは、これがWindows8以降でどのように機能するかを変更しました。レジストリを編集してこれを変更することはできなくなりました。 To Microsoftを引用 :
Pre-Win 8では、アプリはレジストリを操作することでファイルの種類/プロトコルのデフォルトハンドラーを設定できます。つまり、レジストリを操作するスクリプトまたはグループポリシーを簡単に作成できます。ただし、Win 8では、レジストリの変更は、アプリによる改ざんを検出するハッシュ(ユーザーおよびアプリごとに一意)によって検証されます。有効なハッシュがない場合、レジストリのデフォルトは無視されます。
マイクロソフトがこれを今すぐ変更することを期待する方法は、グループポリシーを通じて実装されるxmlファイルを使用することです。手順 ここ 。
ありがたいことに、Christoph Kolbiczはハッシュアルゴリズムをリバースエンジニアリングし、ファイルタイプの関連付けを設定するための SetUserFTA というツールを作成しました。残念ながらそれはクローズドソースです。
目的と場所の最大の手がかりは、「ビッグタイプ」、つまり、それぞれのハイブの名前(HKLMとHKCU)にあります。
ファイルの関連付けは両方のハイブに設定され、2つの異なる目的があります。
名前が示すように、HKCUレジストリエントリは、現在のユーザーのファイルの関連付けを設定し、HKLMの対応するファイルタイプの設定を上書きします。
HKLMは、ローカルマシン、つまりマシンのすべてのユーザーに対してファイルの関連付けを設定します(HKCUエントリで上書きされない限り)。 (Win98の場合、HKCRはHKLM\Software\Classesの省略形のエイリアスにすぎませんでした。個別のハイブや異なるハイブではありませんでした。ただし、Win XPで変更されたため、もう当てはまりません。HKCRは現在HKLM\Software\Classes \、HKCU\Software\Classes \、およびHKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExtsキーを、HKCU情報を優先してマージした結果の仮想ハイブ。)
この2段階のシステムは、1対1だけでなく、多対1および1対多のファイル関連付けスキームを容易にします。たとえば、.htm、.html、および.shtmlファイルタイプはすべてProgID = htmlfileに設定でき、これにより単一のブラウザを定義できます。 OTOH、エントリには、複数のブラウザ、エディタ、または他のアプリのリストからファイルを開くための複数のエントリを持つOpenWithListまたはOpenWithProgIDサブキーを含めることができます。
HKLM\Software\Classes \とHKCU\Software\Classesはどちらも同じように動作します(一方が他方よりも優先されます)。最も単純な形式では、ファイル拡張子(HKCR.txtなど)のレジストリキーがあり、そのデフォルト値は対応するProgID(txtファイルなど)です。デフォルト値に加えて、またはデフォルト値の代わりに、「OpenWithProgID」サブキー用にリストされた追加のProgID名(txtfileおよびhtmlfileなど)、および/または「OpenWithList」の下にサブキーとして表示される追加のアプリケーション名(たとえば、Notepad ++)がある場合があります。 .exe、Opera.exe、Firefox.exe)。
各ProgIDは、HKCR内の別のキー(HKCR\txtfileなど)で定義されます。このキーには、使用するアイコンと、開く方法、印刷する方法、printtoなど、関連するファイル(例:HKCR\txtfile\Shell\open\command)をウィンドウに指示するサブキーが含まれています。同様に、各アプリケーション名は、HKCR\Applicationsの下のサブキーとして定義されます(例:HKEY_CLASSES_ROOT\Applications\Firefox.exe\Shell\open\command)。
HKCU\Software\Classesキーに加えて、ユーザーアカウントファイルの関連付けはHKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExtsキーにあります。これらのエントリは、提案されているようにWindowsエクスプローラーだけのものではなく、ユーザーアカウントファイルの関連付けのオーバーライドの追加ソースです。エントリは、エクスプローラーのファイル関連付けツール(エクスプローラー\ツール\フォルダーオプション\ファイルタイプ)によって作成され、リストされたファイル拡張子ごとにOpenWithListおよび/またはOpenwithProgIDサブキーを含みます。
ファイルの関連付けを決定するために、Windowsは最初にHKCUエントリで対応するファイル拡張子を探します。見つからない場合のみ、HKLMエントリが機能します。 (注:HKCU\Software\ClassesまたはHKCU\Microsoft\Windows\CurrentVersion\Explorer\FileExtsのどちらが優先されるかはテストしていませんが、FileExtsキーであると思われます)。同様に、参照されたProgIDまたはアプリケーション名がHKCUで見つからない場合、HKLMエントリが検索されます。 (\ Applications \エントリは任意の名前であることに注意してください。通常、ディスク上の実際のexeファイル名と同じです。)
したがって、特定のユーザーアカウントのファイルの関連付けを定義するには、HKCUハイブにエントリを作成します。すべてのユーザーの関連付けを定義するには、HKLMハイブ(HKCR)にエントリを作成し、HKCUハイブ内のそのファイルタイプへのすべての参照を削除します。明らかに、レジストリキーへの適切なアクセス権が必要です。
インタラクティブモードまたはバッチモードのいずれかでRegEditを使用したいので、assocおよびftypeツールは使用しませんが、他のコメントから、これらはHKLMハイブでのみ動作し、HKCUキーのクリア/設定には役に立たないようです。少し時間を取って、RegEditで上記のキーを参照し、他の例を確認してください。
ここでの混乱は、openファイルに使用されるものとrunファイルに使用されるものの間です。レジストリキー
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\Application
\.py\Application
windowsにファイルを開く方法を指示するものです。ファイルをダブルクリックすると、このアプリケーションでファイルが開きます。
ファイルは実行可能ファイルではないため、コマンドラインは、ファイルをダブルクリックしたかのように、デフォルトのアプリケーションでファイルを開きたいと想定しています。
アソシエーションをC:\ Program\Python27\python.exeに戻すか、レジストリキーを編集してpythonを指すようにすると、ウィンドウが開きたいと想定している以前の状態に戻るはずです。デフォルトのプログラムであるpython.exeを含むファイル。これにより、プログラムが実行されます。