Gau*_*ier 22 file-association windows-xp
我.py通过 Windows 资源管理器更改了在启动文件时使用的关联:
.py.现在,当我在命令行中输入 py 文件的名称时,写字板会打开它。
但assoc与ftype在命令行仍返回以下内容:
C:\> assoc .py
.py = Python.File
C:\> ftype Python.File
Python.File = "C:\Program\Python27\python.exe" "%1" %*
Run Code Online (Sandbox Code Playgroud)
为什么该协会的工作,但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
Run Code Online (Sandbox Code Playgroud)
更多注册表:
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command\(Standard)
= "C:\Program\Python27\python.exe" "%1" %*`
Run Code Online (Sandbox Code Playgroud)
我想这就是ftype Python.File. 但它似乎并没有被使用。
(我这样做是为了测试,所以我最终可以轻松地选择我的默认 Python 版本)。
根据您调用文件的方式将取决于使用的动词。您使用的动词决定了 Windows 将如何处理它。标准动词是打开、编辑、打印、播放和预览。但是,可以创建自己的动词。最常添加的动词是Open With 系列(包括 OpenWithProgIDs),它在“Open With”下添加了小上下文子菜单,为您提供可能的替代方案。例如,如果您安装 Paint.NET,然后右键单击 .jpg 文件,您将看到“打开方式”条目扩展到一个子菜单,其中列出了 Paint.NET、Paint 以及 Microsoft 为您的版本命名的任何图片查看器的窗户。
此外,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。但是,我还没有尝试过重新启动。
我不知道如何在注册表与 ftype 和 assoc 中出现的内容之间进行匹配。对我和我对你的看法一样, ftype 和 assoc 命令是无用的。我以编程方式(与使用资源管理器的标准和更简单的方法相比)更改给定扩展的默认程序所做的是修改此注册表项
HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.TheExtensionYouWantToModify\UserChoice\ProgID
Run Code Online (Sandbox Code Playgroud)
例如,如果我想用 mplayer 打开我的 mp3,我输入
HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3\UserChoice\ProgID
Run Code Online (Sandbox Code Playgroud)
“mplayerc.mp3”的值
这样做的复杂性是什么:首先您需要知道有效的 ProgID(使用 ftype),其次您需要对该配置单元的写访问权限。Windows 会自动为 UserChoice 键设置拒绝 ACL,因此您需要找到一种方法来删除该拒绝规则以获得写入访问权限。我使用 subinacl 程序,您可以从这里下载http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=en来修改权限。您也可以使用第 3 方程序 SetACL。我推荐第一个,因为语法要简单得多。
从 Windows 8 开始,Microsoft 改变了其工作方式。无法再通过编辑注册表来更改此设置。引用微软的话:
在 Pre-Win 8 中,应用程序可以通过操作注册表来设置文件类型/协议的默认处理程序,这意味着您可以轻松地使用脚本或组策略来操作注册表。然而,在 Win 8 中,注册表更改通过哈希(每个用户和应用程序唯一)进行验证,该哈希值可检测应用程序的篡改。如果没有有效的哈希值,我们将忽略注册表中的默认值。
Microsoft 希望您现在更改此设置的方式是使用通过组策略实现的 xml 文件。说明在这里。
值得庆幸的是,Christoph Kolbicz 对哈希算法进行了逆向工程,并创建了一个名为SetUserFTA的工具来设置文件类型关联。不幸的是它是闭源的。
这里的混淆在于用于打开文件的内容和用于运行文件的内容之间的混淆。注册表键值
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\Application
\.py\Application
Run Code Online (Sandbox Code Playgroud)
告诉 Windows 如何打开该文件。双击该文件将使用此应用程序打开该文件。
由于该文件不是可执行文件,因此命令行假定您要使用默认应用程序打开该文件,就像双击它一样。
将关联更改回 C:\Program\Python27\python.exe 或编辑注册表项以指向 python 应将其恢复到原来的状态,其中 Windows 假定您要使用默认程序打开该文件,即python.exe,然后运行该程序。
| 归档时间: |
|
| 查看次数: |
14261 次 |
| 最近记录: |