服务中创建当前登录用户名下的进程
2012-05-10 22:36
190 查看
若在服务中调用CreateProcess创建进程,则进程所属用户为System,而不是当前登录用户,这会导致一些问题,例如若程序含有UI界面,则无法显示出用户界面,所以若有此种问题,应创建当前登录用户下的进程,而Api CreateProcessAsUser提供了这种功能,以下为示例代码
void LaunchProcess() { HANDLE hToken; //创建进程快照 PROCESSENTRY32 pe32 = { 0 }; pe32.dwSize = sizeof(pe32); HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if (hSnapShot!=0 && hSnapShot!=INVALID_HANDLE_VALUE) { BOOL bRet = Process32FirstW(hSnapShot,&pe32); while(bRet) { if (_tcsicmp(pe32.szExeFile,L"Explorer.EXE") == 0) { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,pe32.th32ProcessID); if (hProcess!=NULL) { BOOL flag = OpenProcessToken(hProcess,TOKEN_ALL_ACCESS,&hToken); CloseHandle(hProcess); } break; } bRet = Process32Next(hSnapShot,&pe32); } CloseHandle(hSnapShot); } STARTUPINFO si ={sizeof(si)}; PROCESS_INFORMATION pi; BOOL bSuccess = CreateProcessAsUser(hToken,L"C:\\AgentGUI.exe",NULL,NULL,NULL,FALSE,NULL, NULL,NULL,&si,&pi); }
相关文章推荐
- 服务如何获取当前登录的windows用户名
- ubuntu 使用vsftpd 创建FTP服务(用户名密码登录,限制列出目录)
- VBA中如何获取当前登录用户名
- 服务中创建有界面的进程
- 获得当前登录系统的用户名
- C#获得计算机名,当前登录用户名,Ip地址
- wmi 获取当前登录用户名
- 如何为一个服务进程创建监控,即使出core也能自动重启
- 在服务中模拟当前登录用户读取HKEY_CURRENT_USER
- 服务应用程序如何访问当前登录用户的信息
- node中创建服务进程
- Windows:服务程序用当前登录用户来执行函数
- sql server身份验证即sa用户名登录时,却出现以下错误提示"provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程"。
- 以SYSTEM权限运行的进程获取登录用户名的方法
- zabbix3.0 监控mysql服务免用户名密码登录的问题故障处理详细过程
- Linux 孤儿、僵尸、服务进程创建
- ORA-12514: TNS: 监听进程当前无法识别连接描述符中请求的服务
- system 用户创建的进程创建当前用户(如Administrator)的进程。
- 关于Oracle创建表空间,用户名登录问题
- 在服务中创建用户进程的方法(C#版)