У меня есть приложение, говорящее с сервером OPC.
Когда я запускаю его как службу Windows, он не может открыть соединение с сервером OPC.
Когда я активирую опцию «Разрешить сервису взаимодействовать с рабочим столом», это работает!
Но как я могу сделать это по умолчанию для моего приложения-службы.
Я пытался использовать флаг SERVICE_INTERACTIVE_PROCESS для функции API «CreateService», но с ошибкой 0x0057 (Неверный параметр) не получилось.
// Install the service into SCM by calling CreateService
schService = CreateService(
schSCManager, // SCManager database
pszServiceName, // Name of service
pszDisplayName, // Name to display
SERVICE_QUERY_STATUS, // Desired access
SERVICE_WIN32_OWN_PROCESS, // Service type
dwStartType, // Service start type
SERVICE_ERROR_NORMAL, // Error control type
szPath, // Service's binary
NULL, // No load ordering group
NULL, // No tag identifier
pszDependencies, // Dependencies
pszAccount, // Service running account
pszPassword // Password of the account
);
if (schService == NULL)
{
wprintf(L"CreateService failed w/err 0x%08lx\n", GetLastError());
goto Cleanup;
}
Для pszAccount и pszPassword NULL использовать локальную системную учетную запись.
schService = CreateService(
schSCManager, // SCManager database
pszServiceName, // Name of service
pszDisplayName, // Name to display
SERVICE_QUERY_STATUS, // Desired access
SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS, // Service type
dwStartType, // Service start type
SERVICE_ERROR_NORMAL, // Error control type
szPath, // Service's binary
NULL, // No load ordering group
NULL, // No tag identifier
pszDependencies, // Dependencies
pszAccount, // Service running account
pszPassword // Password of the account
);
CreateService сообщит об этой ошибке, если параметр типа сервиса установлен неправильно:
Если вы укажете либо SERVICE_WIN32_OWN_PROCESS, либо
SERVICE_WIN32_SHARE_PROCESS, и служба работает в контексте
учетной записи LocalSystem, вы также можете указать следующее значение:
SERVICE_INTERACTIVE_PROCESS
Других решений пока нет …