0

我有一个与 OPC 服务器通信的应用程序。当我将它作为 Windows 服务运行时,它无法打开与 OPC 服务器的连接。当我激活选项“允许服务与桌面交互”时,它起作用了!但是我怎样才能把它作为我的服务应用程序的默认值。我尝试将 SERVICE_INTERACTIVE_PROCESS 标志用于“CreateService”API 函数,但失败并出现 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
    );
4

1 回答 1

0

如果服务类型参数设置不正确, CreateService会报错:

如果您指定 SERVICE_WIN32_OWN_PROCESS 或 SERVICE_WIN32_SHARE_PROCESS,并且服务在 LocalSystem 帐户的上下文中运行,您还可以指定以下值:SERVICE_INTERACTIVE_PROCESS

于 2013-10-11T13:32:48.243 回答