windows 服务进程中调用UI进程

C#穿透session隔离———Windows服务启动UI交互程序 在Windows服务里面启动其他具有界面的应用程序,需要穿透session隔离,尝试了很多种方法,都可行,现在一一列举下来,并写下几个需要注意的地方。 首先要将服务的Account属性设置为LocalSystem,安装服务后的登录身份则为本地系统账户 ... 阅读详情

概述:

    Windows 服务程序的权限一般只是SYSTEM权限,而UI进程则需要Administrator权限才能正常显示,因此服务进程需要调用UI进程则需要进行提权处理.可使用CreateProcessAsUser 方法创建指定权限的应用程序。

    提权则需要获取对应权限令牌,一般explorer.exe进程的权限是Administrator,因此我们可以通过 explorer.exe进程获取Administraror权限。

具体实现方法如下:

//根据进程名称获取进程句柄

HANDLE GetProcessHandle(LPCTSTR szExeName)
{
	PROCESSENTRY32 Pc = { sizeof(PROCESSENTRY32) };
	HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
	if (Process32First(hSnapshot, &Pc)) {
		do {
			if (!_tcsicmp(Pc.szExeFile, szExeName)) {
				printf("explorer's PID=%d\n", Pc.th32ProcessID);
				return OpenProcess(PROCESS_ALL_ACCESS, TRUE, Pc.th32ProcessID);
			}
		} while (Process32Next(hSnapshot, &Pc));
	}
	return NULL;
}

//创建进程阻塞并返回进程句柄

bool ShellExecuteByAdmin(LPCTSTR strCommand, HANDLE* pProcessHandle)
{
	HANDLE hToken;
	HANDLE hExp = GetProcessHandle(_T("explorer.exe")); //获取进程 句柄
	if (hExp == NULL)
		return FALSE;

	OpenProcessToken(hExp, TOKEN_ALL_ACCESS, &hToken);
	if (hToken == NULL)
		return FALSE;
	STARTUPINFO si;
	PROCESS_INFORMATION pi;
	ZeroMemory(&si, sizeof(STARTUPINFO));
	si.cb = sizeof(STARTUPINFO);
	si.lpDesktop = (char *)("winsta0\\default");
	si.wShowWindow = SW_HIDE;
	si.dwFlags = STARTF_USESHOWWINDOW;

	TCHAR szParameter[256] = { 0 };
	lstrcat(szParameter, strCommand);

	char ScreenProtect[1024];
	memset(ScreenProtect, 0, sizeof(ScreenProtect));
	GetAbsoluteDirectory(ScreenProtect);
	strcat(ScreenProtect, "ScreenProtect.exe");

	if (CreateProcessAsUser(hToken, ScreenProtect, szParameter, NULL,
		NULL, FALSE, CREATE_NO_WINDOW | CREATE_NEW_CONSOLE | CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &si, &pi)) //以administrator用户身份执行程序,CREATE_NO_WINDOW,CREATE_NEW_CONSOLE,CREATE_DEFAULT_ERROR_MODE
	{
		if (pi.hProcess != INVALID_HANDLE_VALUE)
		{
			WaitForSingleObject(pi.hProcess, INFINITE); //直到进程结束。可通过pProcessHandle 控制创建进程的生命周期。
		}
		CloseHandle(pi.hProcess);
		CloseHandle(pi.hThread);
	}
	CloseHandle(hToken);
	return 0;
}

不想通过阻塞方式的话,只需要将WaitForSingleObject去掉,自己在其他地方管理启动的进程即可

Win 7 下跨越Session Id 0的Windows Service 并与活动Session UI进行交互 常规的WinForm程式截图比较简单,只需利用Graphics的CopyFromScreen函数即可截取当前屏幕图像,如下4行代码即可完成截图并保存文件的功能: Bitmap snapShot= new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Graphics g = Graph 阅读详情

相关推荐

C# Windows服务如何启动带界面的程序?3种穿透Session隔离的实战方案

本文详细介绍了C# Windows服务启动带界面程序的3种Session穿透方案,包括WTSSendMessage、CreateProcessAsUser和ApplicationLoader。针对Windows服务的Session 0隔离机制,提供了实用的代码实现和优缺点分析,帮助开发者解决服务与UI程序交互的难题,适用于系统监控、后台更新等场景。

weixin_28717969的博客 428

C# windows服务中启动带UI界面的程序

windows服务 启动和关闭外部程序

xuyan5353的博客 3801

Windows下OpenAI Codex Computer Use权限配置全指南

Computer Use是大模型实现操作系统级交互的关键能力,其本质是通过UI Automation API调用Windows原生辅助功能服务,涉及Accessibility权限、DcomLaunch服务状态与用户会话上下文三重机制。在Windows平台,该能力受限于组策略硬限制、注册表禁用项、UAC权限模型及PowerShell执行环境等底层约束,与Docker或WSL2存在根本性兼容冲突。技术价值在于让AI真正‘看见’并‘操作’桌面——如自动截图、浏览器控制、剪贴板读写与窗口监控。典型应用场景包括自动化

weixin_31714129的博客 396

创建系统服务并让其创建UI界面程序

服务进程位于SESSION0中,其规定是不能与其他SESSION之间发送windows消息。也不可以拥有UI界面,也不能创建有UI界面的程序。但通过WTS系列的函数来让服务进程创建拥有UI界面的进程。 这里是服务控制程序的代码。其用于创建, 开启,停止及删除系统服务。服务名存储在g_szSvcName为Test, 服务程序的路径存储在全局变量g_szServiceBinPathName内 #include <windows.h> #include <cstdio> #inclu

輚至消亡 772

Lazarus进行Windows下服务和进程的管理

Windows下系统服务和进程管理,使用Lazarus 的 TServiceManager控件实现系统服务查找、使用JwaTlHelp32单元实现系统进程管理。

zydzyd999的博客 1587

Windows进程的创建与销毁

今天课上做了关于进程创建与控制的实验,简单记录下来:实验题目 ① 掌握Windows进程的创建和销毁API的调用方法;编程代码,在程序中创建和销毁一个Word进程; ② 能够挂起和激活被创建进程的主线程; ③ 通过Windows进程管理器查看系统进程列表的变化。 实验指导 ①创建进程的API BOOL CreateProcess( LPCTSTR lpApplic

mengsiyuan1997的博客 9460

VC++ 服务守护qt用户级UI进程

本文介绍了在Windows本地服务程序中以用户权限启动进程的方法,适用于WinMain和ServiceMain模式。主要包含三个功能:IsProcessRunning检测进程是否运行;LaunchAsActiveUser在Windows Vista+系统中以活跃用户身份启动进程;LaunchProcessAsCurrentUserXP在XP系统中通过explorer.exe的Token降权启动进程。ProtectUserProcesses函数使用独立线程定期检查并重启指定进程,确保用户进程持续运行。特别注意

yanchenyu365的博客 416

CreateProcess创建UI进程并隐藏

一直对多进程非常感兴趣, 你会发现现在绝大多数的windows应用都是多进程, 包括QQ,钉钉,chrome浏览器,nginx等等。 在新公司,也接触了个多进程的应用,但咱只能用,没法看到源码哈 由于太菜,只能自己瞎琢磨,可能是用 CreateProcess创建的进程 于是开始玩这个windows api 函数 当然,delphi的资源太少了,还好一般的c++能看懂,也勉强能翻译成D 上代码吧! //定义一个进程结构体,主要用于传参 type ProcessWindow =

全粘工程师 825

How to create Windows service and launch desktop app

A good artical introduce how to create and install Windows service via C#. The artical link is attached for future refer. http://www.cnblogs.com/wuhuacong/archive/2009/02/11/1381428.html Call a...

a147987440的博客 282

美化后的屏幕保护程序(VS2005)

主要内容:1.屏幕保护程序;2.界面美化设计;3.EXE文件的调用。 该程序代码为在VS2005环境下编写。

windows服务启动另外一个应用程序

在一般的windows service中,是不能调用有界面的应用程序的,而这个demo则穿越了session隔离,可以调用

C# window Service实现调用有UI的应用程序(关于win xp以后的window系统)

  我开发的系统中有一接口程序(这里就称Task,是一个C#的Console Application)经常无故的死掉,导致第二天的数据不能正常解析,所以,我写了一个window service去监视Task,如果发现Task在进程列表中不存在或线程数少于两个(Task为多线程程序),就重新调起Task。   开始没接触过window service调用application的例子,...

weixin_33690367的博客 131

保姆级教程:用Ansys Workbench找出BGA焊点最容易坏的位置(附热循环+振动分析)

本文提供了一份详细的Ansys Workbench教程,指导如何通过热循环和振动分析找出BGA焊点最容易失效的位置。从模型搭建、材料定义到网格划分和载荷设置,全面解析了BGA焊点可靠性分析的全流程,帮助工程师提前预防焊点开裂问题,提升电子封装设计的可靠性。

weixin_30983965的博客 420

水墨江南模型.NET框架调用示例:在Windows桌面应用中集成AI创作

本文介绍了如何在星图GPU平台上自动化部署🏮 水墨江南 (Ink Jiangnan)极简中式美学创作终端镜像,并详细阐述了将其集成至.NET Windows桌面应用的方法。通过构建本地HTTP服务,开发者可轻松实现AI绘画功能,典型应用场景包括根据用户输入的古诗词,实时生成对应的水墨风格意境图片,为教育、文创类软件增添智能创作体验。

weixin_42518874的博客 201

机器学习: 共轭梯度算法(PCG)

今天介绍数值计算和优化方法中非常有效的一种数值解法,共轭梯度法。我们知道,在解大型线性方程组的时候,很少会有一步到位的精确解析解,一般都需要通过迭代来进行逼近,而 PCG 就是这样一种迭代逼近算法。 我们先从一种特殊的线性方程组的定义开始,比如我们需要解如下的线性方程组: Ax=bAx=b 这里的 A(n×n)A(n×n) 是对称,正定矩阵, b(n×...

weixin_30807677的博客 3181

U8-固定资产月末结账报错:BOF或EOF中有一个是真

度了下,发现此问题一般是由于fa_Vtsobject表缺少对应月份的记录导致,补上即可,但是查看发现此表记录正常。 跟踪后发现定位到以下语句: select * from AccInformation where cSysID = N'FA' and cName =N'bVoucherApply'上述语句执行后没有任何记录显示,但是在正常的账套执行是有记录的,那有可能就是记录丢失导致,执行以下

guizhouakun的博客 5921

【Windows】服务和进程

windows服务和进程

丫丫 6551

YOLOv8 改进:添加 LSK 注意力机制

通过添加 LSK 注意力机制,YOLOv8 能够更有效地捕捉特征图上的重要信息,提高检测性能,尤其是在复杂场景下展现出色的表现。这种方法不仅适用于资源受限的设备,还能在丰富多样的实际应用中提供强劲支持。

走向CTO的路上... 1222

windows服务和进程的区别和联系

Windows Service 是主要用于服务器环境而长期运行的应用程序, 这类程序不需要有用户界面或者任何模拟输出。 任何的用户消息通常都是记录在Windows 事件日志里。Windows Service可以在操作系统启动的时候开始,一直在后台运行,当有需要时也可以手动启动,我们可以通过管理工具里面的服务进行统一管理。 当系统启动完毕后,Windows服务并不需要通过登陆页面后才能启动,而

ghevinn欢迎您光临 1万+

全功能tgbot/Telegram机器人多功能有后台版源码

trx兑换 闪兑 关键字监控 群管 usdt监控 余额查询 推广分享 等几乎常见的tg机器人功能都有。全功能tgbot/telegram机器人多功能有后台版源码-打包好的可以直接上手。

百创科技 2703

26、电子测量与旋转编码器控制技术解析

本文深入解析了电子测量中的电感测量技术与旋转编码器的控制方法。介绍了LC电路振荡原理、滤波器类型及其应用,并通过代码实现了基于脉冲宽度的电感值计算。对比了陶瓷电容与电解电容在高频测量中的性能差异。在旋转编码器部分,详细阐述了其工作原理,提出了抖动问题和检测遗漏的解决方案,包括中断检测法和基于4位状态映射的高精度控制方法。文章还探讨了相关技术在电力系统、通信设备、工业自动化和智能家居中的应用,并展望了高精度、智能化、小型化和无线化的发展趋势,为电子系统设计提供了实用指导和技术参考。

elastic6hunter的博客 99
上一篇: WOL幻包(魔术包)
下一篇: c/c++在服务中获取当前路径
RuningPigNO1
博客等级 码龄10年 22粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值