我有自己的基于ATL(exe模块)的OPC服务器。基于WinForms(DLL模块)的用户界面。在单独线程的_tWinMain
中,我从DLL调用Application::Run()
。如果我手动启动我的服务器或本地OPC客户端启动服务器,这可以正常工作。但是,OPC客户端位于其他计算机上,如果我尝试启动服务器,则服务器会成功启动,但不会显示UI窗口。
任何想法? 感谢
答案 0 :(得分:1)
检查服务器DCOM设置:
很可能服务器配置为作为启动用户运行,因此它在单独的Window Station上执行,并且登录用户看不到GUI。如果更改配置以使用交互式用户,则应解决问题。虽然如果当前没有用户登录,您的服务器将无法启动。
答案 1 :(得分:0)
这是正常行为。修改exe以查找正在运行的实例并尝试显示UI的一种解决方案。
示例(把它放在:: InitInstance中)
HWND hWnd = ::FindWindowEx(NULL, NULL, NULL, [Your title]);
if (hWnd)
{
::ShowWindow(hWnd, SW_SHOWNORMAL);
::SetForegroundWindow(hWnd);
return FALSE;
}
现在,当您的服务器由远程客户端启动时,您只需尝试在服务器计算机上启动服务器exe,它就会显示UI。
也许上面的内容对你来说不适用于一些调整(一个带有WinForm的ATL opc服务器,对我来说有点奇怪,MFC可能会更好/但很痛苦/为此)。
必须使用当前登录的用户安全主体启动OPC服务器的唯一缺点。否则将不显示UI(ShowWindow将无效)