【问题标题】:Out of process COM server execution进程外 COM 服务器执行
【发布时间】:2012-09-06 00:35:29
【问题描述】:

我已经将一个古老但仍然有用的 Delphi 5 应用程序变成了一个进程外 COM 服务器。我隐约记得有一种方法可以判断它是由用户直接启动还是作为服务器启动。我知道我以前做过,但我不记得/不知道该怎么做。也许是命令行开关?

【问题讨论】:

  • "由用户直接启动" == ?
  • @pst 从 windows shell 执行,就像一个普通的应用程序一样。
  • @Suresh。我没有将 delphi 添加为标签,因为我很确定答案与 delphi 无关,而是特定于 COM 的行为。
  • 我不认为有,因为我以前尝试过这样做。 DCOM 进程激活可能会使用与资源管理器相同的 Win32 调用来启动您的应用程序。因此,除非您在安装程序中创建图标时为其添加了“/DesktopShortcut”参数,否则我怀疑您是否可以做到。

标签: delphi com


【解决方案1】:

我不知道这在 Delphi 5 中是否可用,但在 Delphi 2010 中您可以查询全局 ComServer 对象的启动模式:

if ComServer.StartMode = smAutomation then
  ShowMessage('started as automation server')
else if ComServer.StartMode = smStandalone then
  ShowMessage('started manually');

【讨论】:

  • +1 这是正确答案。 TComServer.Create 中的代码检查命令行中的/embedding 或/automation 开关。如果找到,则将 StartMode 设置为 smAutomation。其他可能的启动模式是smStandalone、smRegServer 和smUnregServer。
  • 在 Delphi 5 中确实可用。
  • COM 对象的注册指定了 COM 启动时传递给 EXE 的命令行参数。大多数 COM 实现都指定“/automation”作为注册的一部分,正是为了这个目的。
  • 谢谢@Remy,我以为我永远不会知道答案。 :)
  • ComServer.StartMode 实现检查命令行开关。告诉过你这是一个开关。
【解决方案2】:

似乎exe是作为COM服务器启动时使用“-Embedding”开关启动的。

【讨论】:

  • 我自己刚刚运行了一个快速演示,在启动时记录命令行,并且确实将“-Embedding”添加为命令行开关(Win 7 上的 Delphi 7)
猜你喜欢
  • 2014-02-18
  • 2013-01-20
  • 2015-05-23
  • 2011-05-17
  • 2012-10-10
  • 2010-11-18
  • 1970-01-01
  • 2010-10-04
  • 2011-07-29
相关资源
最近更新 更多