foobar2000与alcohol在win7共存下cue文件的关联问题

症状:

使用alcohol关联cue,可以正常载入卸载,图标为alcohol自带,双击弹出windows的选择默认程序启动对话框

使用foobar2000关联cue,图标换为foobar自带,双击可以播放,但alcohol的装卸没了

使用windows的默认程序向导选择foobar,双击可以播放,但图标变成foobar的图标,alcohol的装卸依旧没有

以上三者分别注册不同的关联程序id,故结果与使用顺序无关

首先看一下vista以后的文件关联系统(以下措辞极其不专业,纯用户角度出发,反正大概就是那么回事的东西)
以txt文件举例:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt]

这是一个文件关联总的索引表,只包含”预关联的扩展名”及”关联程序id列表”
这里”预关联的扩展名”就是.txt

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\OpenWithList]
"a"="notepad.exe"
"MRUList"="ba"
"b"="EmEditor.exe"

这里有两个程序供txt文件选择关联,分别是EMEditor与notepad,MRUList代表排列顺序,这个列表仅仅用于“右键选择程序”打开……

至于notepad.exe与EmEditor如何定位?和环境变量有关吗?请看下面一段

[HKEY_CLASSES_ROOT\Applications\EmEditor.exe\shell\edit]
"FriendlyAppName"="EmEditor"
[HKEY_CLASSES_ROOT\Applications\EmEditor.exe\shell\edit\command]
@="\"D:\\Program Files\\EmEditor\\EMEDITOR.EXE\" \"%1\""

[HKEY_CLASSES_ROOT\Applications\notepad.exe\shell\edit\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4e,00,4f,00,\
  54,00,45,00,50,00,41,00,44,00,2e,00,45,00,58,00,45,00,20,00,25,00,31,00,00,\
  00
[HKEY_CLASSES_ROOT\Applications\notepad.exe\shell\open\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4e,00,4f,00,\
  54,00,45,00,50,00,41,00,44,00,2e,00,45,00,58,00,45,00,20,00,25,00,31,00,00,\
  00

虽然表述形式略有不同,但是使用HKEY_CLASSES_ROOT\Applications??????.exe来指定exe的Path却是真的,这基本证明与环境变量无关。
很多时候HKEY_CLASSES_ROOT\Applications\下的exe列表因为Path引用失败导致“右键选择程序”无法添加,这个bug很烦,不得不手动删除。

如果不使用“右键选择程序”呢?

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\OpenWithProgids]
"txtfile"=hex(0):
"emeditor.txt"=hex(0):

这里才是重点,两个关联程序id分别是txtfile与emeditor.txt
到HKEY_CLASSES_ROOT\txtfile与HKEY_CLASSES_ROOT\emeditor.txt即可发现真正的右键注册项,不赘述。


回到正题,看一下开始那三步分别干了什么:
使用alcohol关联cue:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.cue\OpenWithProgids]
"AlcoholImageFile"=hex(0):

使用foobar2000关联cue:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.cue\UserChoice]
"Progid"="foobar2000.CUE"

使用windows的默认程序向导选择foobar:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.cue\OpenWithList]
"a"="foobar2000.exe"
"MRUList"="a"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.cue\UserChoice]
"Progid"="foobar2000.CUE"

如此只要关注一下AlcoholImageFile跟foobar2000.CUE两个关联程序id就好了……

尝试把AlcoholImageFile的值全部注册到foobar2000.CUE下,刚注册的时候很好,但foobar每次一启动一关闭就会把foobar2000.CUE下多余的值删掉……

如果把foobar2000.CUE的值全部注册到AlcoholImageFile下,会造成全镜像可播放,这也不是我想要的……

这时我就想到创建一个新的关联程序id,把AlcoholImageFile与foobar2000.CUE的值全部注册到其上,然后在UserChoice那里关联好就可以了
尝试后结果非常完美XD


以下为参考……

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CUE_Sheet]
@="Cue sheet"

[HKEY_CLASSES_ROOT\CUE_Sheet\DefaultIcon]
@="D:\\Program Files\\foobar2000\\icons\\CUE.ico"

[HKEY_CLASSES_ROOT\CUE_Sheet\shell]
@="open"

[HKEY_CLASSES_ROOT\CUE_Sheet\shell\enqueue]
@="Enqueue in foobar2000"
"LegacyDisable"=""

[HKEY_CLASSES_ROOT\CUE_Sheet\shell\enqueue\command]
@="\"D:\\Program Files\\foobar2000\\foobar2000.exe\" /add \"%1\""

[HKEY_CLASSES_ROOT\CUE_Sheet\shell\open]
@="Open in foobar2000"
"LegacyDisable"=""

[HKEY_CLASSES_ROOT\CUE_Sheet\shell\open\command]
@="\"D:\\Program Files\\foobar2000\\foobar2000.exe\" \"%1\""

[HKEY_CLASSES_ROOT\CUE_Sheet\shell\play]
@="Play in foobar2000"
"LegacyDisable"=""

[HKEY_CLASSES_ROOT\CUE_Sheet\shell\play\command]
@="\"D:\\Program Files\\foobar2000\\foobar2000.exe\" /playnow \"%1\""

[HKEY_CLASSES_ROOT\CUE_Sheet\shellex]

[HKEY_CLASSES_ROOT\CUE_Sheet\shellex\ContextMenuHandlers]

[HKEY_CLASSES_ROOT\CUE_Sheet\shellex\ContextMenuHandlers\Fb2kShellExt]
@="{511D48AF-9E45-4CB8-8F02-9C1BE4BC3CF8}"
"IsDefaultAction"=""

[HKEY_CLASSES_ROOT\CUE_Sheet\shellex\ContextMenuHandlers\AlcoholShellEx]
@="{32020A01-506E-484D-A2A8-BE3CF17601C3}"

[HKEY_CLASSES_ROOT\CUE_Sheet\shellex\ContextMenuHandlers\AlcoholShellEx64]
@="{AF67B665-D752-424E-9A03-C7C218F2844F}"

[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.cue]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.cue]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.cue\OpenWithList]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.cue\OpenWithProgids]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.cue\UserChoice]
"Progid"="CUE_Sheet"