Registry不喜欢shell命令或动词的长文件名

时间:2011-03-15 20:10:32

标签: windows windows-vista registry filenames

(如果不适用于SO,请参考其他适当的地方,谢谢)。

当使用注册表关联文件扩展名和应用程序时,我输入了我的应用程序的完整文件名,但是这不起作用,只有当我使用8.3文件名时。

例如(取自注册表)这有效:

[HKEY_CLASSES_ROOT\Toto.Document\shell\myVerb\command]
@="C:\\my\\path\\bin\\Debug\\bin\\myexe_~1.EXE /dde"
[HKEY_CLASSES_ROOT\Toto.Document\shell\myVerb\ddeexec]
@="[myVerb(\"%1\")]"

但这不起作用:

[HKEY_CLASSES_ROOT\Toto.Document\shell\myVerb\command]
@="C:\\my\\path\\bin\\Debug\\bin\\myexecutable.EXE /dde"
[HKEY_CLASSES_ROOT\Toto.Document\shell\myVerb\ddeexec]
@="[myVerb(\"%1\")]"

通过右键单击资源管理器中的文件来调用该操作,我收到错误: “Windows无法找到'c:\ users \ me \ desktop \ tata.toto'。请确保正确输入名称,然后重试”。


我正在使用CRegKey以编程方式创建密钥,并使用GetModuleFileName来获取应用程序路径。

2个问题: - 我可能在我的注册表项中丢失了一些东西? (我试过引用路径,但不起作用) - 我可以获得“短”文件名吗? (稍微搜索似乎GetShortPath应该可以工作,但并不总是这样!)

感谢。

最大


(编辑22/03/2011) 我尝试使用引号,但它不起作用(使用/ dde) 我决定使用普通参数代替/ dde,它似乎与正常路径很好地工作(不像上面所说的那样缩短)。

我仍然不确定为什么在创建一个简单的MFC SDI项目时,它会使用旧的短名称而不是长名称来写出注册表值。

再次感谢。

最大

1 个答案:

答案 0 :(得分:1)

尝试使用另外两个双引号创建密钥(.EXE/dde之间的注释:

@="C:\\my\\path\\bin\\Debug\\bin\\myexecutable.EXE" "/dde"