Windows守护进程实现/设置程序图标/隐藏黑窗/获取exe所在目录/设置开机自启动
功能:实现一个windows守护进程,设置有自定义图标,启动后隐藏黑窗口,获取exe所在目录,并设置开机自启动(需要以管理员权限运行)。如果需要打包成可执行的安装包程序,见另一篇博客:https://blog.csdn.net/qq_24977505/article/details/106415058。
隐藏控制台窗口:main函数前添加
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) 即可。
设置自定义图标:Damon.exe设置heworld.ico图标,HelloWorld.exe没有
1、需要先自制一个ico格式图标,点开http://www.bitbug.net/ 上传图片即可做好。
2、将图标放到代码路径下,在vs项目中添加.rc文件(选中项目->右键添加->新建项->资源文件.rc->确定)。
3、到源文件目录记事本打开这个.rc文件,末尾添加 IDI_ICON1 ICON DISCARDABLE "heworld.ico" ,heworld.ico是第一步自作好的ico文件,一定要同在源文件目录下。
4、重新编译即可。
设置开机自启动代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <time.h>
// 设置黑窗隐藏
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
// 需要守护的进程可执行文件,和daemon.exe放一起
#define PROCCESS_NAME "HelloWorld.exe"
char g_workPath[MAX_PATH] = { 0 };
void WriteLogFile(char *msg);
BOOL SetSelfStart()
{
//获取程序完整名称
char pName[MAX_PATH] = { 0 };
GetModuleFileNameA(NULL, pName, MAX_PATH);
HKEY hKey = NULL;
LONG lRet = NULL;
const char * regeditPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\";
if (ERROR_SUCCESS != RegOpenKeyExA(HKEY_LOCAL_MACHINE, regeditPath, 0, KEY_ALL_ACCESS, &hKey))
{
return FALSE;
}
if (ERROR_SUCCESS != RegSetValueExA(hKey, "Heworld", 0, REG_SZ, (const unsigned char*)pName, strlen(pName) + sizeof(char)))
{
return FALSE;
}
RegCloseKey(hKey);
WriteLogFile("守护进程开机自启动成功\n");
return TRUE;
}
void GetWorkPath(char *argv)//获取exe所在目录
{
char drive[4];
char subdir[MAX_PATH];
char fn[MAX_PATH];
char exten[MAX_PATH];
_splitpath_s(argv, drive, subdir, fn, exten);
sprintf_s(g_workPath, "%s%s", drive, subdir);
}
int main(int argc, char *argv[])
{
GetWorkPath(argv[0]);
if (!SetSelfStart())
{
WriteLogFile("守护进程开机自启动失败\n");
}
STARTUPINFOA si;
PROCESS_INFORMATION pi;
//初始化
ZeroMemory(&si, sizeof(si));
si.wShowWindow = SW_HIDE;
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
//构造cmd执行守护进程的字符串
static char fileName[MAX_PATH] = { 0 };
snprintf(fileName, MAX_PATH, "%s%s", g_workPath, PROCCESS_NAME);
do {
if (!CreateProcessA(NULL, fileName, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
WriteLogFile("守护进程启动失败,程序即将退出\n");
return -1;
}
WriteLogFile("守护进程成功\n");
WaitForSingleObject(pi.hProcess, INFINITE);
WriteLogFile("守护进程退出......\n");
//关闭进程和句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
Sleep(2000);
} while (true);
return 0;
}
const char *GetNowStr()
{
static char nowstr[64];
time_t nowTime = 0;
time(&nowTime);
struct tm tmNow;
localtime_s(&tmNow, &nowTime);
sprintf_s(nowstr, "%02d%02d_%02d%02d%02d", tmNow.tm_mon + 1, tmNow.tm_mday,
tmNow.tm_hour, tmNow.tm_min, tmNow.tm_sec);
return nowstr;
}
void WriteLogFile(char *msg)
{
static int writeLine = 0;
static FILE* fp = NULL;
if (fp == NULL)
{
char buf[1024];
sprintf_s(buf, "%s%s", g_workPath, "daemon.log");
fopen_s(&fp, buf, "w");
if (fp == NULL)
{
printf("open log file fail\n");
return;
}
}
static char header[128];
sprintf_s(header, "[%s]:", GetNowStr());
fwrite(header, 1, strlen(header), fp);
fwrite(msg, 1, strlen(msg), fp);
fflush(fp);
printf(msg);
if (50000 < writeLine++)
{
fp = NULL;
writeLine = 0;
}
}
Windows守护进程实现/设置程序图标/隐藏黑窗/获取exe所在目录/设置开机自启动相关推荐
- Windows守护进程简单示例
转载: https://blog.csdn.net/kikaylee/article/details/51395360 /* @描述:一个简单的Windows守护进程的例子(C++版本) @作者:ki ...
- 在Qt中设置程序图标的方法介绍
本文主要介绍在 Qt 中设置程序图标的方法. 说明: 本文中的应用程序是面向 Windows 操作系统的: 本文中使用的 Qt Creator 版本号为:7.0.0: 本文中使用的 Qt 版本号为:5 ...
- android 自动打开第三方应用程序,Android如何做到应用程序图标隐藏,由第三方程序显示启动...
Android如何做到应用程序图标隐藏,由第三方程序显示启动 发布时间:2020-07-13 03:25:02 来源:51CTO 阅读:11353 作者:ord1nary 在AndroidManife ...
- Qt for ios 设置程序图标(logo)和启动页(splash)
前言 Qt开发ios程序,要面临的一个问题就是设置程序图标和启动页的问题,作为一个跨平台开发者,对原生开发本身就不太熟悉,即便是这种小功能也可能会成为阻碍,没办法, 只能硬着头皮上咯. 要设置ios的 ...
- 猫猫学IOS(二十一)UIApplication设置程序图标右上⾓红⾊数字_联⺴指⽰器等
猫猫分享,必须精品 素材代码地址:http://blog.csdn.net/u013357243/article/details/45092629 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址: ...
- Qt笔记(十五)之设置程序图标
一.前言 设置程序图标是使用Qt开发应用软件最基本的的东西,可是楼主一开始接触的时候捣鼓了许久,故在此做个记录 二.具体实现 1.准备工作 新建一个资源文件qrc(主要是为了统一管理图标文件) 添加需 ...
- Vs+Qt 设置程序图标
Vs+Qt 设置程序图标 概述: 步骤示例: 运行效果图:(此时我们的图标设置成功) over: 文末一句话: 概述: 1.最近公司项目要进行一期交付(参与的第一个商业软甲),软件上一些好多的细节还没 ...
- word论文中如何任意设置页码?摘要不计页数?目录设置?取消页眉横线?
最近在撸毕业论文,结果答辩的时候,因为格式问题被老师狂怼....心塞塞. 在此之前,明明发给了指导老师看过,老师那边也没有提出什么建议.结果就在答辩的时候被怼了.... 参考百度经验: 1. 在wor ...
- windows守护进程
一.逻辑分析 1.windows没有fork函数,无法创建僵尸进程,使用打开非子进程的方式打开外部进程---打开外部进程 2.守护进程应该是单例的进程--->单例进程 3.守护进程应该是存在一个 ...
最新文章
- QT 的信号与槽机制介绍
- proxool配置多数据库多连接池
- 【计组实验】P3 Verilog多周期处理器开发 MIPS指令集
- new Grammar in 740 - internal table filter
- Visual Studio 2012中使用GitHub
- 安川最小巧机器人_2020工博会,安川展品前瞻(机器人篇)
- “携号转网”正式试运行,这两个原因或致无法转网
- mysql高级操作_MySQL数据库的高级操作
- ELK官方文档收集Kibana监视数据编辑
- 前端零碎问题(四)css3
- Dalsa线扫相机SDK下载和安装
- 酒店管理系统功能模块图
- 昆山花桥房都要上万 上海买家占9成“江山”
- 计算机函数sumifs应用题型难,在SUMIFS函数语句中使用Vlookup时遇到问题
- IP协议详解【IP报文头部结构、IP分片、IP路由、IP转发】
- 年、月、日格式正则表达式
- 2020 dns排名_《2020年全球DNS威胁报告》:DNS攻击平均损失高达92万美元
- java大小端字节流解析_记录一个如何解决java与C++socket通信的大小端问题
- 全国电子联行系统(EIS)、大额支付系统、
- web期末作业设计网页_传统文化设计题材_手工艺木雕
热门文章
- HTML5期末大作业:爱折扣电商购物网站设计——清新爱折扣电商购物网站(5页) HTML+CSS+JavaScript 关于电商的HTML网页设计-----网购
- 爱思助手更新后无法连接服务器,刷机提升 无法连接到苹果服务器 怎么解决
- C++一个简单的通讯录
- bitdefender_internetsecurity_2009_32b
- 机器人教育对思维能力和创新能力有益
- Javaweb项目入门到实战-搭建javaweb环境并运行(下)
- GITHUB设置代理——解决git clone下载过慢的问题
- 如何用搜狗拼音输入法输入各种上下标
- poj迷宫游戏c语言代码,ACM/ICPC 之 BFS-简单障碍迷宫问题(POJ2935)
- 页式存储,段式存储,段页式存储,引入快表等访存次数