C ++はWindowsシステムサービスを作成します

定義

    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という名前のシステムサービスを探します。


おすすめ

転載: blog.csdn.net/gkzscs/article/details/80538374
おすすめ