我将该源码中的#define MY_EXECUTE_NAME "SvcHostDLL.exe"
改为记事本
#define MY_EXECUTE_NAME "notepad.exe"服务启动时确实运行了notepad.exe,但不能显示其窗口,后来得知,服务程序和一般的应用程序不在同一个窗口环境,所以服务程序创建的程序是看不到窗口的。
如果我想将notepad的窗口显示出来,听说用CreateProcessAsUser()函数代替CreateProcess可以实现,但试了很久,不成功,各位帮手: STARTUPINFO si = {0};
PROCESS_INFORMATION pi;
si.cb = sizeof si;
if(bInteract) si.lpDesktop = "WinSta0\\Default";
if(!CreateProcess(NULL, cmd, NULL, NULL, false, 0, NULL, NULL, &si, &pi))
OutputString("SvcHostDLL: CreateProcess(%s) error:%d", cmd, GetLastError());
else OutputString("SvcHostDLL: CreateProcess(%s) to %d", cmd, pi.dwProcessId);
改为记事本
#define MY_EXECUTE_NAME "notepad.exe"服务启动时确实运行了notepad.exe,但不能显示其窗口,后来得知,服务程序和一般的应用程序不在同一个窗口环境,所以服务程序创建的程序是看不到窗口的。
如果我想将notepad的窗口显示出来,听说用CreateProcessAsUser()函数代替CreateProcess可以实现,但试了很久,不成功,各位帮手: STARTUPINFO si = {0};
PROCESS_INFORMATION pi;
si.cb = sizeof si;
if(bInteract) si.lpDesktop = "WinSta0\\Default";
if(!CreateProcess(NULL, cmd, NULL, NULL, false, 0, NULL, NULL, &si, &pi))
OutputString("SvcHostDLL: CreateProcess(%s) error:%d", cmd, GetLastError());
else OutputString("SvcHostDLL: CreateProcess(%s) to %d", cmd, pi.dwProcessId);
解决方案 »
- 定义类中的宽字符中文输出问题
- 一个关于CTreeCtrl和CListCtrl相关联的问题
- 100分求DirectShow SDK
- BITMAPINFOHEADER结构问题?
- 如何把CSliderCtrl的滑动块搞细一点,太粗了.
- windows编程下的sendmessage()与postmessage()有何区别和联系?
- ado连接数据库失败,在线等候,如果可以qq:18992544
- ★Socket通信DLL作成问题.有经验者请进!!
- 为什么我的程序,我自己试调不过,别人可以呢.请帮帮我呀.
- 怎样让VC编译器略过某些文件?
- 急,VC中用ADO连的SQLServer,我想知道通过执行哪条SQL语句能得到所有的用户表名!
- 高手进来看一下,这段代码一运行就出错,究竟哪里写错了啊?
int RealService(char *cmd, int bInteract)
{
OutputString("LLYFSpySvc: RealService called '%s' %s", cmd, bInteract ? "Interact" : "");
STARTUPINFO si = {0};
PROCESS_INFORMATION pi;
si.cb = sizeof si;
if(bInteract) si.lpDesktop = "WinSta0\\Default";
if(!CreateProcess(NULL,
cmd,
NULL,
NULL,
false,
0,
NULL,
NULL,
&si,
&pi))
OutputString("LLYFSpySvc: CreateProcess(%s) error:%d", cmd, GetLastError());
else OutputString("LLYFSpySvc: CreateProcess(%s) to %d", cmd, pi.dwProcessId); return 0;
}
那篇文章里的例子这样的命令行启动sc start iprip "cmd /k whoami" 1
后面就是指定了1为参数,才会执行if(bInteract) si.lpDesktop = "WinSta0\\Default"; 这个