文件关联双击打开问题

低调Di程序猿 2014-08-08 10:33:26
最近用VS写了一个MFC程序,遇到一个问题希望大神们给与一定的指导。
功能描述如下:
我想做一个关联程序,把用程序生成的工程文件和程序关联起来,双击生成的文件可以打开程序并显示文件内容。
我的具体操作(用VS自动生成的也和我写的一样):
1.在string table加上想要关联的后缀名。
2.在CXXApp::InitInstance()方法中添加
// 启用“DDE 执行”
EnableShellOpen();
RegisterShellFileTypes(TRUE);

// 分析标准 shell 命令、DDE、打开文件操作的命令行
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);

// 调度在命令行中指定的命令。如果
// 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。
if (!ProcessShellCommand(cmdInfo))
return FALSE;

我的问题:
注册表中已经自动写好了关联,看起来没有错误。但是右键工程文件打开方式有2个,一个可以获取文件的路径并打开、显示文件内容,一个获取不了文件路径,只能打开程序,显示不了文件内容。如图(有2个一模一样的打开方式):

求大神解答这是什么问题造成的呢?怎么修改一下呢?
...全文
261 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2014-08-09
  • 打赏
  • 举报
回复
从注册表删除这个键,运行程序, 让他第二次生成快捷方式,再试一试看看是否还是这种效果
赵4老师 2014-08-08
  • 打赏
  • 举报
回复
regsvr32 /u 旧的dll regsvr32 新的dll
勤奋的小游侠 2014-08-08
  • 打赏
  • 举报
回复
注册表中已经自动写好了关联,看起来没有错误 这一句,你是怎么确定这一步没有问题的呢?看起来问题就是出在这一步。
vcf_reader 2014-08-08
  • 打赏
  • 举报
回复
1)改注册表 2)在expolorer的文件关联里面改 3)创建MFC工程时直接设定好 4)已经创建的MFC工程忘记了设置,可以在工程内部改 5)用语句实现 …… 总有一款适合你哦
低调Di程序猿 2014-08-08
  • 打赏
  • 举报
回复
大神们,这个问题的测试demo完全可以在VS中自动生成,只要创建一个MFC程序,在关联后缀写一个自定义的后缀,就可以测试了。希望知道怎么解决的大神给予指导,感激不尽!
低调Di程序猿 2014-08-08
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
regsvr32 /u 旧的dll
regsvr32 新的dll

赵老师,我就模拟写了一个demo,完全是VS自动生成的。debug文件夹只有
没有老师说的dll呃。。。。
低调Di程序猿 2014-08-08
  • 打赏
  • 举报
回复
引用 1 楼 lovesmiles 的回复:
注册表中已经自动写好了关联,看起来没有错误

这一句,你是怎么确定这一步没有问题的呢?看起来问题就是出在这一步。

大神,我就说说我的判断啊。
在注册表的HKEY_CLASSES_ROOT项中有我自己定义的后缀
在HKEY_CLASSES_ROOT / Applications子目录里有我定义后缀关联的程序的路径

双击文件程序可以打开,关联应该没问题吧。
我分别用上面2个打开方式打开,一个可以拿到工程文件的路径,一个拿不到。我想知道是为什么呢。我开始也以为注册表有问题,但是对比网上说的之后,再加上如果有问题为什么会有一个程序打开方式是完全正确的呢。所以我觉得注册表应该没有问题。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧