Windows守護程式簡單示例
轉載:
https://blog.csdn.net/kikaylee/article/details/51395360
/*
@描述:一個簡單的Windows守護程式的例子(C++版本)
@作者:kikaylee
@日期:2016-05-13 10:30
*/
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <io.h>
#include <iostream>
using namespace std;
//隱藏DOS黑視窗
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
//定義路徑最大程度
#define MAX_PATH 4096
//定義守護程式名稱
#define PROCCESS_NAME "test.exe"
//定義寫入的登錄檔路徑
#define SELFSTART_REGEDIT_PATH "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\"
//設定本身開機自啟動
BOOL SetSelfStart()
{
//獲取程式完整名稱
char pName[MAX_PATH]={0};
GetModuleFileNameA(NULL,pName,MAX_PATH);
//在登錄檔中寫入啟動資訊
HKEY hKey=NULL;
LONG lRet=NULL;
lRet=RegOpenKeyExA(HKEY_LOCAL_MACHINE,SELFSTART_REGEDIT_PATH,0,KEY_ALL_ACCESS,&hKey);
//判斷是否成功
if(lRet!=ERROR_SUCCESS)
{
return FALSE;
}
lRet=RegSetValueExA(hKey,"testProtect",0,REG_SZ,(const unsigned char*)pName,strlen(pName)+sizeof(char));
//判斷是否成功
if(lRet!=ERROR_SUCCESS)
{
return FALSE;
}
//關閉登錄檔
RegCloseKey(hKey);
return TRUE;
}
int main()
{
//設定程式開機自啟動
if(!SetSelfStart())
{
cout<<"守護程式開機自啟動失敗"<<endl;
return -1;
}
STARTUPINFOA si;
//程式物件
PROCESS_INFORMATION pi;
//初始化
ZeroMemory(&si,sizeof(si));
si.cb=sizeof(si);
ZeroMemory(&pi,sizeof(pi));
//獲取當前程式的路徑
char pPath[MAX_PATH]={0};
GetCurrentDirectoryA(MAX_PATH,pPath);
//拼接需要守護的程式
strcat(pPath,"\\");
strcat(pPath,PROCCESS_NAME);
//構造cmd執行守護程式的字串
char pCmd[MAX_PATH]={0};
strcat(pCmd,"cmd /c ");
strcat(pCmd,pPath);
//無限迴圈,監視守護程式
do{
//檢查守護程式是否存在
if(_access(pPath,0)!=-1)
{
//建立子程式,判斷是否執行成功
if(!CreateProcessA(NULL,pCmd,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
{
cout<<"守護程式啟動失敗,程式即將退出"<<endl;
return -1;
}
//啟動成功,獲取程式的ID
cout<<"守護程式成功,ID:"<<pi.dwProcessId<<endl;
//無限等待子程式退出
WaitForSingleObject(pi.hProcess,INFINITE);
//如果退出了
cout<<"守護程式退出了。。。"<<endl;
//關閉程式和控制程式碼
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
else
{
cout<<"守護程式不存在"<<endl;
}
//睡一下,重啟
Sleep(2000);
}
while(true);
return 0;
}
相關文章
- 守護程式
- Node 程式守護
- 程式守護 supervisor
- Linux 守護程式Linux
- 接上節我們來實戰操刀一個簡單的 PHP 守護程式!PHP
- 守護程式那些事
- Golang 程式守護 SupervisorGolang
- [單刷APUE系列]第十三章——守護程式
- Python編寫守護程式程式Python
- PHP 編寫守護程式PHP
- PHP 實現守護程式PHP
- Linux守護程式及SystemdLinux
- 運用Vue Router的程式守護修改單頁的titleVue
- opentracker改造為daemon守護程式
- Linux下的守護程式分析Linux
- startViewTransition的簡單示例View
- rsync 守護程式備份報錯
- Linux基礎命令---httpd守護程式Linuxhttpd
- rsync 守護程式及實時同步
- Linux守護程式的啟動方法Linux
- .Net Core 程式守護之Supervisor使用
- laravel佇列之Supervisor守護程式Laravel佇列
- Avalonia 後臺程式碼簡單播放動畫示例動畫
- pytorch深度學習分類程式碼簡單示例PyTorch深度學習
- 守護程序
- 《城堡守護者:開啟熱血守護之旅》
- 使用 SWOOLE 實現程式的守護(二)
- 使用 swoole 實現程式的守護(三)
- 使用 SWOOLE 實現程式的守護(一)
- 玩轉 Codeigniter 框架 二 守護程式篇框架
- C# superSocket簡單示例C#
- Mac簡單時鐘螢幕保護程式Mac
- [譯]WebAssembly: 帶有程式碼示例的簡單介紹Web
- 文盤Rust -- 把程式作為守護程式啟動Rust
- PHP實現master-worker守護多程式PHPAST
- 使用 PHP 自建穩定可靠的守護程式PHP
- Android低記憶體終止守護程式Android記憶體
- supervisor守護程式並配置郵件報警