为什么 Access 报告它无法接收到其程序的命令?

Noa*_*oah 10 windows-7 microsoft-access dde

我刚刚升级到 Windows 7,在重新安装我的 MS Office 后,我遇到了一个有趣的错误。当我单击一个数据库时,我收到一条弹出消息“向程序发送命令时出现问题”,但文件应用程序仍将启动,并且正确的数据库确实打开了。

有没有人见过这样的事情?

我将如何调查并解决此问题?

注意: 我没有使用区域警报。大多数关于此问题的在线搜索都会返回讨论使用 Zone-Alarm 的问题的各种站点和 MSKB 文章

已解决: 感谢 Mihi --- 将注册表项从 ddexec 重命名为 NOddeexec 后,问题消失了——仍然不确定 DDE 为何损坏,但现在对我来说已经足够好了

mih*_*ihi 6

基本上,如果文件类型设置为使用 DDE(运行在同一台计算机上的应用程序之间的旧的 Windows-3.x 风格的通信协议)打开文件,则会出现此错误。

您将在资源管理器的文件夹选项中的文件类型中找到它(可能在 Windows 7 的其他地方,但管理员可以在某些地方设置要使用哪些程序打开哪些文件)。

选中“使用 DDE”选项后,Windows 将首先检查程序是否已在运行,然后(如果已运行)向其发送 DDE 消息(由 3 个文本组成,“应用程序”、“主题”和“消息”) )。这样即使程序已经在运行,它也可以避免再次打开程序。当程序没有运行时,它只是正常启动。如果 DDE 连接失败,将出现您提到的对话框,它只会再次正常启动程序。

因此,最简单的解决方法就是为数据库的文件扩展名(我猜是 .mdb)禁用“使用 DDE”。唯一的缺点是:当您打开一个数据库并且 Access 已经在运行时,Windows 将打开 Access 的第二个实例,它将依次通知第一个实例并发送 DDE 消息并在此之后退出。IE。您不必要地启动 Access,以便它可以立即再次关闭。但是现在有了快速的 CPU 和硬盘,我想这是可以接受的 :-)

更复杂的修复方法是检查这些设置中是否有问题(例如错误的主题或错误的应用程序)并修复它。这样做需要您访问另一台(可能是虚拟)机器,在其中打开文件可以工作,以便您可以比较 DDE 配置。

编辑:根据此网站,该选项卡已在 Vista 中删除。您始终可以在注册表中手动执行此操作:查找HKEY_CLASSES_ROOT\.mdb其默认值(假设为mdbfile),然后查看该默认值 ( HKEY_CLASSES_ROOT\mdbfile\shell\open\ddeexec)。


use*_*942 2

存在此问题,但仅限于特定的办公产品(即 Excel 和 Word 可以工作,但 Access 将失败并显示该消息)。

以下是我在 Windows 7 - 64 位中解决该问题的方法(可能也适用于 Vista)。

注意:此解决方案涉及编辑系统注册表。请小心,因为错误地编辑注册表可能会损坏您的操作系统!

使用 Windows 7 附带的注册表编辑器 (Regedit)

  • 检查注册表中当前关联的扩展键
  • HKEY_CLASSES_ROOT\.mdb (我正在处理 Office 2007,但只需找到您感兴趣的文件扩展名条目)
  • 检查值条目,然后找到其中引用的(Default)(在我的例子中是 Access.MDBFile)HKEY_CLASSES_ROOT
  • 找到子项shell并将其删除(请参阅上面的警告)
  • 返回并找到您想要打开的文件,现在系统会要求您选择一个程序来打开它。此时,找到您想要用来打开文件的 Office 程序,然后就完成了。

执行此操作后检查我的设置,注意到Access.MDBFile注册表中的密钥已更改,它现在有一个CLSID指向文件关联的新目录的密钥。

  • 子键CLSID (在我的例子中HKEY_CLASSES_ROOT\Access.MDBFile\CLSID(Default)值为{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}
  • 使用 find 搜索CLSID (不包括大括号) ,记得在执行搜索之前检查Look at->下(在我的例子中找到了 key ,但这可能有所不同,我的示例是处理 32 位版本的 Office 2007 的 64 位系统)KeysHKEY_CLASSES_ROOT\Wow6432Node\CLSID\{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}
  • 此参考是“Microsoft Office Access 应用程序”,它使用进程内服务器来启动应用程序,使用此方法修复了我的 Access 文件关联。