我有一个支持ATL的MFC应用程序,这个想法是当有人在mfc应用程序中创建我的接口实例时,这个实例化会创建并显示一个窗口。
如果com客户端是cmd.exe,这一切都正常工作,我做了一个快速的com客户端实例化界面,当这个实例出现时,窗口会根据需要显示。
但是如果在另一个com对象(例如atl服务器对象(服务))中完成此实例化,则不会显示该窗口。请注意,mfc进程是在DcomLaunch进程下创建的,但不显示任何窗口。一切正常,但窗口没有显示在我的桌面上。
两个问题:
1)为什么在这种情况下我的窗口不显示?
2)当我使用我的控制台应用程序创建相同的界面时,只创建了mfc应用程序的一个进程,无论我启动了多少个控制台应用程序,如果服务尝试实例化多个对象,则不止一个mfc进程已创建!为什么这样,我怎么能避免这种情况。我如何才能使第一个mfc进程始终与响应客户端调用的进程相同?
(我认为这完全归功于安全设置......但我已经尝试改变一些而没有......)
由于
努诺
答案 0 :(得分:1)
通常,服务无法创建窗口。在Vista之前,您可以通过给定服务属性的“登录”标签上的“允许服务与桌面交互”复选框,启用服务与桌面交互(例如,打开窗口)。如果你的目标是Vista,那么这不是一个选择。
但是,鉴于这是您正在处理的DcomLaunch服务,您显然不希望这样做。
即使这是你自己的服务,你写的大多数人会建议不要因为某些原因(无特定顺序)这样做:
同样,由于上述仅适用于Vista之前,并且无论如何都是一个坏主意,对于想要公开UI的服务,普遍接受的“最佳实践”是拥有一个单独的应用程序,其中包含与之通信的UI使用您选择使用的任何IPC机制的服务。