.py
Windows エクスプローラー経由でファイルを起動するときに使用する関連付けを変更しました。
- ツール -> フォルダー -> ファイルの種類。
- 次に、 を参照します
.py
。 - 関連付けを Wordpad に変更します。
これで、コマンド ラインに py ファイルの名前を入力すると、Wordpad が開きます。
しかし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 のデフォルト バージョンを簡単に選択できます)。
答え1
ファイルの呼び出し方法は、使用する動詞によって異なります。使用する動詞によって、Windows がファイルに対して行う処理が決まります。標準の動詞は、開く、編集、印刷、再生、プレビューです。ただし、独自の動詞を作成する最もよく追加される動詞は家族と一緒に開く(OpenWithProgID を含む) は、「プログラムから開く」の下に小さなコンテキスト サブメニューを追加し、代替案を提示します。たとえば、Paint.NET をインストールして .jpg ファイルを右クリックすると、「プログラムから開く」エントリがサブメニューに展開され、Paint.NET、ペイント、および Microsoft が Windows のバージョンで画像ビューアと呼んでいるものが表示されます。
さらに、Unsigned Code Labs が言ったことは非常に重要です。クラスをデバッグするときは、HKLM\Software\Classes\
と を確認する必要がありますHKCU\Software\Classes
。 HKCR
は、システムを照会するのに非常に便利ですが、誤動作の原因を見つけるのにはあまり役立ちません。
Windows 7 システムで を少しテストしたところprocmon.exe
、assoc
およびftype
コマンドは に直接書き込もうとしているようHKCR
で、システムはそれを への書き込みと解釈しているようですHKLM
。現在のアカウントは管理者グループのメンバーですが、UAC が有効になっています。 を試行するとアクセスが拒否されましたassoc .mytest=MyTest.File
。
奇妙なことに、 というファイルを右クリックして関連付けを作成しtest.mytest
、それをメモ帳に関連付けても、assoc
にも にもftype
この関連付けは表示されません。 および には関連付けが確実に存在しますHKCU
。HKCR
ただし、再起動は試していません。
答え2
レジストリと ftype および assoc に表示されるものを一致させる方法がわかりません。私にとって、そしてあなたにとっても、ftype および assoc コマンドは役に立たないようです。特定の拡張子の既定のプログラムをプログラム的に変更するには (エクスプローラーを使用した標準的でより簡単な方法ではなく)、このレジストリ キーを変更します。
HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.TheExtensionYouWantToModify\UserChoice\ProgID
例えば、mp3ファイルをmplayerで開きたい場合、次のように入力します。
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 を使用することもできます。構文がはるかに単純なので、最初のプログラムをお勧めします。
答え3
MicrosoftはWindows 8以降、この動作を変更しました。レジストリを編集してこれを変更することはできなくなりました。マイクロソフトからの引用:
Windows 8 以前では、アプリはレジストリを操作することでファイルの種類/プロトコルの既定のハンドラーを設定できました。つまり、スクリプトやグループ ポリシーでレジストリを簡単に操作できました。ただし、Windows 8 では、レジストリの変更は、アプリによる改ざんを検出するハッシュ (ユーザーとアプリごとに一意) によって検証されます。有効なハッシュがない場合、レジストリの既定値は無視されます。
Microsoft が現在期待している変更方法は、グループ ポリシーを通じて実装される xml ファイルを使用することです。手順ここ。
ありがたいことに、Christoph Kolbiczはハッシュアルゴリズムをリバースエンジニアリングし、ユーザーFTAの設定ファイルタイプの関連付けを設定します。残念ながらクローズドソースです。
答え4
ここでの混乱は、開けるファイルとその用途走るファイル。レジストリキー
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\Application
\.py\Application
Windows にファイルを開く方法を指示します。ファイルをダブルクリックすると、このアプリケーションでファイルが開きます。
ファイルは実行可能ファイルではないため、コマンド ラインでは、ファイルをダブルクリックした場合と同様に、デフォルトのアプリケーションでファイルを開くものと想定されます。
関連付けを C:\Program\Python27\python.exe に戻すか、レジストリ キーを編集して python を指すようにすると、以前の状態に戻り、Windows は既定のプログラム (python.exe) でファイルを開くものと想定し、プログラムを実行します。