Winforms DLL не запускается под DCOM

У меня есть свой собственный OPC-сервер на основе ATL (exe-модуль). Пользовательский интерфейс на основе WinForms (модуль DLL). в _tWinMain в отдельной ветке звоню Application::Run() из DLL. Это прекрасно работает, если я запускаю свой сервер вручную или если сервер запускается локальным OPC-клиентом. Однако OPC-клиент находится на другом компьютере, и если я пытаюсь запустить сервер, сервер запускается успешно, но окно пользовательского интерфейса не отображается.

Есть идеи??
Спасибо

0

Решение

Проверьте настройки DCOM вашего сервера:

Настройки DCOM

Скорее всего, сервер настроен для запуска в качестве запускающего пользователя, поэтому он выполняется на отдельной оконной станции, а графический интерфейс не отображается для вошедшего в систему пользователя. Если вы измените конфигурацию для использования интерактивного пользователя, проблема должна быть решена. Хотя, если ни один пользователь не вошел в систему, ваш сервер не сможет запуститься.

1

Другие решения

Это нормальное поведение. Одно из решений — модифицировать ваш exe-файл, чтобы найти работающий экземпляр и попытаться отобразить интерфейс.

Пример (поместите это в :: InitInstance)

HWND hWnd = ::FindWindowEx(NULL, NULL, NULL, [Your title]);
if (hWnd)
{
::ShowWindow(hWnd, SW_SHOWNORMAL);
::SetForegroundWindow(hWnd);
return FALSE;
}

Теперь, когда ваш сервер запущен удаленным клиентом, вы можете просто попытаться запустить exe-сервер на сервере, и он отображает пользовательский интерфейс.

Возможно, вышеописанное не сработает для вас с некоторыми изменениями (OPC-сервер ATL с WinForm ui немного странный для меня, MFC может быть лучше / но боль / для этого).

Единственный недостаток, что сервер OPC должен быть запущен с зарегистрированным в данный момент пользователем безопасности пользователя. В противном случае пользовательский интерфейс не будет отображаться (ShowWindow не будет иметь никакого эффекта)

0

По вопросам рекламы [email protected]