python - 即使我启动服务器应用程序,COM 对象也会不断返回存根
问题描述
我有一个程序
repo = win32com.client.Dispatch("EA.App").Repository
这一直很好。但是,一旦我在 EA.app 实例未运行时调用它,我就会永久地得到垃圾
<COMObject <unknown>>
作为回报 - 直到我重新启动 Windoze。那是什么?更重要的是:我如何绕过重启?
PS 写完后我发现
repo = win32com.client.Dispatch("EA.App")
返回
<COMObject EA.App>
那么,我可以假设这是 EA.app 做得不对吗?
解决方案
win32com.client.Dispatch("EA.App")
创建EA.App
COM 类的新实例。
我假设将 COM 对象连接到“EA.app 实例”或其他任何东西(可能通过 IPC 通道)发生在创建时,所以如果它没有运行,你最终会得到一个仍然如此的虚拟对象。
也许 COM 类有一些方法可以强制它重新发现服务器应用程序,而不必重新创建 COM 对象。但是由于重新创建很容易,开发人员很可能认为这样的功能不会为产品增加足够的价值来证明费用是合理的。
一些 COM 类实现了某种单例模式Dispatch
:多次调用将在内部使用第一个结果的“缓存”结果,并实际上返回以某种方式“相同”的对象。如果是这种情况,再打电话Dispatch
也无济于事。在这种情况下,请检查 COM 类的文档和/或其供应商如何强制重新发现。(例如,可能有一种方法可以显式删除“缓存的”底层对象,以便下一个Dispatch
创建一个新对象。)
推荐阅读
- python - 连接到 urllib 文件名
- java - Retrofit2 发送 POST 请求
- ruby-on-rails - Ruby on Rails,没有用于交互式请求的模板
- python-3.x - Pypi.org 从命令提示符 Windows 中被阻止。点安装不起作用
- typescript - 如何在打字稿中用两次计算小时和分钟
- elasticsearch - Elasticsearch 匹配多个值并且输出结果应该在相同的数组元素序列中并应用排序
- android-studio - 工具 Windows 运行和 logcat android studio 3.5.1 不显示操作和日志
- javascript - 每 5 秒更换一次图片和链接
- c++ - 如何从 C++ 中的文件验证用户登录?
- java - 在 Web Flux 中记录 POST 请求正文