定義
Microsoft Windowsサービス(以前のNTサービス)を使用すると、独自のWindowsセッションで実行時間の長い実行可能アプリケーションを作成できます。これらのサービスは、コンピューターの起動時に自動的に開始でき、一時停止して再起動できます。ユーザーインターフェイスは表示されません。この種類のサービスは、サーバーでの使用に非常に適しています。同じコンピューターで作業している他のユーザーに影響を与えないように、いつでも使用する必要があります。ログインしたユーザーの特定のユーザーアカウントまたはデフォルトのコンピューターアカウントとは異なるセキュリティコンテキストでサービスを実行することもできます。
関連するAPI
OpenSCManager():サービスコントロールマネージャーを開きます。
CreateService():システムサービスを作成します。
OpenService():サービスを開きます。
StartService():サービスを開始します。
StopService():サービスを停止します。
ControlService():コントロールサービス。
SetServiceStatus():サービスのステータスを設定します。
コード例
#include <Windows.h>
//获取当前exe程序所在路径
char *GetExeFullPath()
{
char *path = new char[1024];
memset(path, 0, 1024);
if (GetModuleFileName(NULL, path, 1024) != 0)
{
return NULL;
}
return path;
}
//测试创建、启动系统服务
bool TestStartService()
{
//打开服务控制管理器
SC_HANDLE hScm = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
if (hScm == NULL)
{
return false;
}
//创建系统服务,参数很多,可查看帮助文档
SC_HANDLE hService = CreateService(hScm, "MySerivce", "MyService", SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, GetExeFullPath(),
NULL, NULL, "", NULL, "");
if (hService == NULL)
{
return false;
}
//启动系统服务
if (StartService(hService, 0, NULL) == false)
{
return false;
}
//释放句柄
CloseServiceHandle(hScm);
CloseServiceHandle(hService);
return true;
}
//测试停止、卸载系统服务
bool TestStopService()
{
//获取系统服务控制管理器句柄
SC_HANDLE hScm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hScm == NULL)
{
return false;
}
//打开系统服务,获取服务句柄
SC_HANDLE hService = OpenService(hScm, "MyService", SERVICE_ALL_ACCESS);
if (hService == NULL)
{
return false;
}
//查询该系统服务是否正在运行,若在运行中则停止该服务
SERVICE_STATUS status;
QueryServiceStatus(hService, &status);
if (status.dwCurrentState == SERVICE_RUNNING)
{
ControlService(hService, SERVICE_CONTROL_STOP, &status);
//如果出错,则返回false
if (status.dwCurrentState != NO_ERROR)
{
return false;
}
}
//如果服务状态为已停止,则卸载该系统服务
if (status.dwCurrentState == SERVICE_STOPPED)
{
DeleteService(hService);
}
//释放句柄
CloseServiceHandle(hScm);
CloseServiceHandle(hService);
}
int main()
{
TestStartService();
//TestStopService();
return 0;
}
このプログラムは、主にシステムサービスの作成、開始、停止、およびアンインストールの機能を実現します。
システムサービスが正常に作成されたら、WindowsシステムでSCM(Service Control Manager)を開いて表示できます。Ctrl + Rを押して実行ウィンドウを開く->「services.msc」と入力してサービスウィンドウを開く->右側のサービスリストでMyServiceという名前のシステムサービスを探します。