Windowsエクスプローラーに合わせてftypeとassocを取得するにはどうすればよいですか?


20

.pyWindowsエクスプローラーを使用して、ファイルの起動時に使用する関連付けを変更しました。

  1. ツール->フォルダ->ファイルの種類。
  2. 次にを参照し.pyます。
  3. ワードパッドへの関連付けを変更します。

コマンドラインにpyファイルの名前を入力すると、ワードパッドが開きます。

しかし、assocおよびftypeコマンドラインでまだ次を返します。

C:\> assoc .py
.py = Python.File

C:\> ftype Python.File
Python.File = "C:\Program\Python27\python.exe" "%1" %*

どのように関連が働いているが、来るassocftype、それに気づいていませんか?

プロンプトを再起動しました。


私のレジストリからの詳細:

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のデフォルトバージョンを簡単に選択できます)。


回答:


9

ファイルの呼び出し方法に応じて、使用される動詞に依存します。使用する動詞によって、Windowsがそれをどう処理するかが決まります。標準の動詞は、Open、Edit、Print、Play、およびPreviewです。ただし、独自の動詞作成することは可能です。最も一般的に追加される動詞は、Open Withファミリー(OpenWithProgIDsを含む)です。これは、「Open With」の下に小さなコンテキストサブメニューを追加して、可能な代替手段を提供します。たとえば、Paint.NETをインストールしてから.jpgファイルを右クリックすると、Open Withエントリが、Paint.NET、Paint、およびMicrosoftが使用しているバージョンの画像ビューアーと呼ばれるものを一覧表示するサブメニューに展開されます。 Windowsの。

さらに、Unsigned Code Labsが言ったことは非常に重要です。あなたがクラスをデバッグしているとき、あなたが見てする必要がありますHKLM\Software\Classes\HKCU\Software\ClassesHKCRシステムのクエリには非常に役立ちますが、不正な動作の理由を見つけるのにはあまり適していません。

Windows 7システムで少しテストを行ったところprocmon.exeassocftypeコマンドが直接書き込みを試みているように見えHKCR、システムはそれを書き込みとして解釈するようHKLMです。現在のアカウントは管理者グループのメンバーですが、UACは有効になっています。試しassoc .mytest=MyTest.Fileたときにアクセスが拒否されました。

奇妙なことに、呼び出されたファイルを右クリックtest.mytestしてメモ帳に関連付けることで関連付けを作成してassocftype、この関連付けは表示されません。協会は間違いなくそこにHKCUありHKCRます。ただし、再起動は試していません。



@ TheIncorrigible1リンクは無効です:(
DaveInCaz

@DaveInCazああ、それは本当に悲しいです。私は彼らがMSFTブログのリンクをすべて壊したことに腹を立てています。復元できるかどうかを確認します。うまくいけば、新しいリンクがあり、消えていないことを願っています(他のいくつかの場合のように)
TheIncorrigible1


5

レジストリと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(use ftype)を知る必要があり、次にそのハイブへの書き込みアクセスが必要です。WindowsはUserChoiceキーの拒否ACLを自動的に配置するため、書き込みアクセスを取得するには、その拒否ルールを削除する方法を見つける必要があります。ここではhttp://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=enからダウンロードできるプログラムsubinaclを使用して、アクセス許可を変更します。また、サードパーティのプログラムSetACLを使用できます。構文がはるかに単純なので、最初のものをお勧めします。


3

Explorer(Windowsシェル)は、拡張機能のデフォルト値で指定されたベンダーキーで指定されたアプリケーションを常に優先します。(あなたの場合.py、拡張子Python.Fileはベンダーキーです。)

ftypeそしてassoc他の地域から値を読み取ることができ、私は確かに知りません。Explorerが行う方法です。

編集:このページはあなたに興味があるかもしれません:MSDN-ファイルタイプ

特にこれ:

HKEY_CLASSES_ROOTサブツリーは、によって形成された図であるマージします。HKEY_CURRENT_USER \ Software \クラスとHKEY_LOCAL_MACHINE \ SOFTWARE \クラス。

おそらく、HKEY_LOCAL_MACHINEに「デフォルト」の関連付けがある場合、Windowsのさまざまな部分が衝突し、アカウントで定義したもの(HKEY_CURRENT_USERに保存されます)によって上書きされます。


3

Microsoftは、これがWindows 8以降でどのように機能するかを変更しました。レジストリを編集してこれを変更することはできなくなりました。Microsoft引用するに

Pre-Win 8では、アプリはレジストリを操作することでファイルタイプ/プロトコルのデフォルトハンドラーを設定できました。これは、レジストリを操作するスクリプトまたはグループポリシーを簡単に持つことができることを意味します。ただし、Win 8では、レジストリの変更はハッシュ(ユーザーおよびアプリごとに一意)によって検証され、アプリによる改ざんが検出されます。有効なハッシュがない場合、レジストリのデフォルトは無視されます。

Microsoftが今これを変更することを期待する方法は、グループポリシーを介して実装されるxmlファイルを使用することです。手順はこちら

ありがたいことに、Christoph Kolbiczはハッシュアルゴリズムをリバースエンジニアリングし、ファイルタイプの関連付けを設定するSetUserFTAというツールを作成しました。残念ながら、それはクローズドソースです。


SetUserFTAは非常に便利で、スクリプトを作成できます。
DaveInCaz

1

ここでの混乱は、ファイルを開くために使用されるものと、ファイルを実行するために使用されるものとの間です。レジストリキー

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\Application
\.py\Application

ファイルを開く方法をWindowsに指示するものです。ファイルをダブルクリックすると、このアプリケーションでファイルが開きます。

ファイルは実行可能ファイルではないため、コマンドラインでは、ダブルクリックしたかのように、デフォルトのアプリケーションでファイルを開くことを想定しています。

関連付けをC:\ Program \ Python27 \ python.exeに戻すか、レジストリキーを編集してpythonを指すようにすると、以前の状態に戻ります。Windowsでは、デフォルトのプログラムでファイルを開くことを想定しています。 python.exe。プログラムを実行します。


正しく理解できれば、キー.py\Applicationを使用してpyファイルを開きます。私が理解していないのは、どのような場合に値Python.Fileが使用されるかということです。
ゴーティエ

Majenkoによると、拡張機能はWindowsによって実行可能ファイルとして扱われます(PATHEXT変数を参照)。ただし、Explorer内から作成されたアソシエイトは常にClassesレジストリキーのアソシエイトを上書きすることを過去に読んだことを思い出します。
ピョートルドブロゴスト

1

目的と場所に対するあなたの最大の手がかりは、「大きなタイプ」、つまりそれぞれのハイブの名前:HKLMおよびHKCUです

ファイルの関連付けは両方のハイブで設定され、2つの異なる目的があります。

名前が示すように、HKCUレジストリエントリは、CURRENT USERのファイルの関連付けを設定し、HKLMの対応するファイルの種類の設定を上書きします。

HKLMは、ローカルマシン、つまり、マシンのすべてのユーザー(HKCUエントリによってオーバーライドされない限り)のファイルの関連付けを設定します。(Win98の場合、HKCRはHKLM \ Software \ Classesの略称でした。別々のハイブや異なるハイブではありませんでした。しかし、これはWin XPで変更され、もはや真実ではありません。 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は両方とも同じように動作します(一方が他方に優先するだけです)。最も単純な形式では、デフォルト値が対応するProgID(txtfileなど)であるファイル拡張子(HKCR.txtなど)のレジストリキーがあります。デフォルト値に加えて、またはデフォルト値の代わりに、「OpenWithProgID」サブキーに対して追加のProgID名(txtfileやhtmlfileなど)がリストされたり、「OpenWithList」の下にサブキーとして表示される追加のアプリケーション名(Notepad ++など)があります。 .exe、Opera.exe、Firefox.exe)。

各ProgIDは、HKCR内の別のキーで定義されます(HKCR \ txtfileなど)。このキーには、使用するアイコンと、関連付けられたファイル(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エクスプローラ専用ではなく、ユーザーアカウントファイルの関連付けのオーバーライドの追加ソースです。エントリは、エクスプローラのファイル関連付けツール(Explorer \ Tools \ Folder Options \ File Types)によって作成され、リストされた各ファイル拡張子の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で上記のキーを参照して、他の例を参照してください。


HKCRは、あなたが思うように機能しません。HKCRには、「ソースコード」エントリがあります。「ソースコード」はHKLM \ Software \ Classesに存在しません。一方、HKCU \ Software \ Classesには、「ソースコード」が存在します。したがって、明らかにHKCRにはHKCU \ Software \ Classesからのエントリが含まれます。一方、HKCRとHKLMの両方に「SoundRec」と「SPCFile」が存在します。ただし、HKCU \ Software \ Classesにはこれらがありません。したがって、HKCRには明らかにHKLMからのエントリも含まれます。HKCRは間違いなく、2つの場所を何らかの形で統合しています。参照してくださいsuperuser.com/a/266274
ベン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.