OPC サーバーと通信するアプリケーションがあります。Windows サービスとして実行すると、OPC サーバーへの接続を開くことができません。オプション「デスクトップとの対話をサービスに許可する」を有効にすると、機能します! しかし、これをサービス アプリケーションのデフォルトにするにはどうすればよいでしょうか。「CreateService」API 関数に SERVICE_INTERACTIVE_PROCESS フラグを使用しようとしましたが、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
);