none
MDI框架程序出现DDE问题,双击绑定类型的文件启动时总是会弹出“向程序发送命令时出现问题”对话框 RRS feed

  • 问题

  • 大家有没有碰到MFC的MDI框架应用程序在被设置成“以管理员权限运行”后,双击绑定类型的文件启动时总是会弹出“向程序发送命令时出现问题”的情况。即使你在CWinApp类的InitInstance框架接口里添加了EnableShellOpen调用,即使你在主框架窗口类上添加了OnDDEExecute响应DDE消息都没有任何作用。事实上我发现如果程序没有被指定成“以管理员权限运行”前,双击文件打开程序OnDDEExecute消息响应函数是会被框架调用的,但改成“以管理员权限运行”后这一切都似乎失效了,框架压根就没有调用OnDDEExecute函数,直接就由explorer进程弹出了“向程序发送命令时出现问题”的错误提示对话框。请问这是什么原因?我应该如何解决这样的问题?非常感谢!
    2016年11月2日 9:20

答案

  • Hi Charles_Zhao,

    感谢在MSDN论坛发帖。

    >>但改成“以管理员权限运行”后这一切都似乎失效了,框架压根就没有调用OnDDEExecute函数,直接就由explorer进程弹出了“向程序发送命令时出现问题”的错误提示对话框。请问这是什么原因?

    对于这种情况,我建议在CWinApp类的InitInstance使用RegisterShellFileTypes函数来使用Windows文件管理器注册您的应用程序的所有文档类型LogonUser 函数尝试在本机登陆一个管理员用户。

    详细情况建议参考以下文档。

    https://msdn.microsoft.com/en-us/library/001tckck.aspx

    另外,建议你降低你的User Account Control的级别。在控制面板,User Account里设置。

    希望对你有所帮助。

    Best Regards,
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2016年11月3日 6:13

全部回复

  • Hi Charles_Zhao,

    感谢在MSDN论坛发帖。

    >>但改成“以管理员权限运行”后这一切都似乎失效了,框架压根就没有调用OnDDEExecute函数,直接就由explorer进程弹出了“向程序发送命令时出现问题”的错误提示对话框。请问这是什么原因?

    对于这种情况,我建议在CWinApp类的InitInstance使用RegisterShellFileTypes函数来使用Windows文件管理器注册您的应用程序的所有文档类型LogonUser 函数尝试在本机登陆一个管理员用户。

    详细情况建议参考以下文档。

    https://msdn.microsoft.com/en-us/library/001tckck.aspx

    另外,建议你降低你的User Account Control的级别。在控制面板,User Account里设置。

    希望对你有所帮助。

    Best Regards,
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2016年11月3日 6:13
  • 您好Sera Yu,感谢您的帮助。

    我看了您推荐的文章,我的确在InitInstance里面初始化了GDI+,但我把GDI+初始化的代码按照文章中所说的移动到Run函数里面后,问题仍然存在。

    另外,我把我的.exe文件设置成“以管理员权限运行”并非是因为程序本身需要管理员权限去执行什么操作,我的程序本身完全不需要管理员权限,而是用户有的时候不知道因为什么原因把程序设置成了“以管理员权限运行”,这时他们就会反馈这个DDE错误问题。

    我发现有些MDI框架的软件可以在相同的设置下正常工作,不会出现这个DDE错误。我查询了这些程序的注册表项,发现它并没有使用DDE来实现双击文件打开文档,而是使用普通的命令参数方式。但是这种方式会导致用户每次双击文件系统都会启动一个新进程来打开这个文件的问题。但奇怪的是,当我尝试在这些程序已经在运行的情况下再双击一个文件,这些程序并没有被系统另外创建一个进程,而是在当前进程中打开了文档。

    所以我想一定还有什么方法可以在不使用DDE的情况下实现我想要的打开文档的效果。不知道您是否有什么好的办法?

    2016年11月3日 10:52