COM MFC应用程序不显示窗口

时间:2009-04-24 11:41:48

标签: c++ com mfc

我有一个支持ATL的MFC应用程序,这个想法是当有人在mfc应用程序中创建我的接口实例时,这个实例化会创建并显示一个窗口。

如果com客户端是cmd.exe,这一切都正常工作,我做了一个快速的com客户端实例化界面,当这个实例出现时,窗口会根据需要显示。

但是如果在另一个com对象(例如atl服务器对象(服务))中完成此实例化,则不会显示该窗口。请注意,mfc进程是在DcomLaunch进程下创建的,但不显示任何窗口。一切正常,但窗口没有显示在我的桌面上。

两个问题:

1)为什么在这种情况下我的窗口不显示?

2)当我使用我的控制台应用程序创建相同的界面时,只创建了mfc应用程序的一个进程,无论我启动了多少个控制台应用程序,如果服务尝试实例化多个对象,则不止一个mfc进程已创建!为什么这样,我怎么能避免这种情况。我如何才能使第一个mfc进程始终与响应客户端调用的进程相同?

(我认为这完全归功于安全设置......但我已经尝试改变一些而没有......)

由于

努诺

1 个答案:

答案 0 :(得分:1)

通常,服务无法创建窗口。在Vista之前,您可以通过给定服务属性的“登录”标签上的“允许服务与桌面交互”复选框,启用服务与桌面交互(例如,打开窗口)。如果你的目标是Vista,那么这不是一个选择。

但是,鉴于这是您正在处理的DcomLaunch服务,您显然不希望这样做。

即使这是你自己的服务,你写的大多数人会建议不要因为某些原因(无特定顺序)这样做:

  • 创建的UI只能在会话0
  • 中访问
  • 创建窗口会在您的(可能)特权进程中创建攻击服务,因为用户运行的任何其他进程都可以与服务的窗口进行交互。

同样,由于上述仅适用于Vista之前,并且无论如何都是一个坏主意,对于想要公开UI的服务,普遍接受的“最佳实践”是拥有一个单独的应用程序,其中包含与之通信的UI使用您选择使用的任何IPC机制的服务。

相关问题