(不确定这是否属于超级用户,但似乎这里有一个cmd.exe标记,所以这里......)
作为背景,我正在开发一个Firefox附加组件(这个问题不需要Firefox的知识,顺便说一句,因为Firefox附加组件可以调用命令行。)附加组件旨在构建不同类型的cmd.exe的快捷方式(特别是为了我的项目https://github.com/brettz9/webappfind,它允许直接从桌面打开文件到Web应用程序)。
无论如何,我想让用户选择关联这些快捷方式:
就默认处理而言,我找到了ftype
和assoc
(和associate
)命令,但我已经读过用户选择将覆盖它们的行为。有没有办法确保我可以从命令行获取优先级,将文件扩展名与类型和特定可执行文件相关联(直到用户再次更改它),或者如果不可能,那么至少通过C ++等? / p>
至于打开方式列表:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\<file extension>\OpenWithList
...在我的测试中(使用exe),这个命令:
reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.svg\OpenWithList /v d /d D:\wamp\www\webappfind\cplusplus\WebAppFinder-view-mode-Firefox.exe
...确实导致exe文件显示在:
reg query HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.svg\OpenWithList
...但是当我随后右键单击带有“.svg”扩展名的文件时,它没有显示出来。
对于这两点,我真的很感激。
答案 0 :(得分:2)
REGEDIT4
[HKEY_CURRENT_USER\Software\Classes\Applications\MYFOO.exe\shell\open\command]
@="\"C:\\MYFOO.exe\" \"%1\""
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.myfoo]
"Application"="MYFOO.EXE"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.myfoo\OpenWithList]
"a"="MYFOO.EXE"
"MRUList"="a"
所以我调查了那些文件关联的原因。您似乎必须创建从裸EXE名称到完整路径的映射,如前两个long-ish行所示。然后,您只能在.extension分支中使用EXE名称。设置.extension的应用程序值将立即为您提供默认应用程序。请记住,只使用APP.EXE
,其完整路径必须如上定义。这是你的主要错误。 &#34;%1&#34; part允许您自定义程序的参数,这样它就不必只是引号中打开的文档,如下所示。反斜杠只是Regedit的转义字符,您可以根据需要丢弃它们。
OpenWithList在某些意义上是棘手的,因为有条目的字母和盲写可能会覆盖一些用户最喜欢的应用程序。一种方法是打电话给你的项目&#34; z&#34;降低覆盖的概率。正确的方法是枚举密钥并为您的应用程序提供第一封免费信件。 MRUList不是必不可少的,虽然它应该每次都使用一次字母,而你的字母一开始就碰到了。
注意用户友好性:资源管理器将缓存这些值,直到下次重新启动。确保更新注册表并首先放置exe并稍后创建文件。虽然缓存只会完全影响文件的显示,但运行时,会再次读取注册表,它将根据需要执行。
提示:如果您决定使用Regedit而不是reg
,则/s
参数会跳过确认消息并立即应用这些值。确保在完整路径中使用双反斜杠,如图所示。准备临时.reg文件时,请确保将两个CRLF附加到末尾,否则可能会导致您的最后一行代码被忽略。此示例以REGEDIT4开头,表示ANSI文件。如果您需要在应用程序路径中支持Unicode,则必须使用Windows Registry Editor Version 5.00
启动该文件并将其存储为UTF16。这已经是调用reg
的优秀解决方案了,因为你无法让CMD.EXE通过命令行处理特殊的UTF内容而不会损坏。