阅读:1947回复:10
服务中启动ring3应用程序,用什么函数?
在服务中应该比从ring0中简单。但是我试了WinExec 还有 ShellExecut
等简单函数都搞不定。 用CreateProcess能搞定吗?另外如果用这种方式,应用程序出问题会影响服务吗。 比较初级。请指点 |
|
沙发#
发布于:2004-03-10 10:06
服务本身就处于RING3,启动进程应该不会有什么问题的。
|
|
|
板凳#
发布于:2004-03-10 10:22
是啊,
可是CreateProcess参数很多,特别是STARTUPINFO结构,不知道怎么设 |
|
地板#
发布于:2004-03-10 11:12
使用如下代码,在服务中不行(函数执行成功,但子进程没有创建)
STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); // Start the child process. if( !CreateProcess( "c:\\test.exe, NULL, NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent's environment block. NULL, // Use parent's starting directory. &si, // Pointer to STARTUPINFO structure. &pi )// Pointer to PROCESS_INFORMATION structure. ) { ErrorExit( "CreateProcess failed." ); } ///上面得代码来自MSDN 请大家帮帮忙啊 原来以为这里不会有什么问题,现在好急啊 其实我不需要控制子进程,只要启动它就可以了,有其它的方法吗? |
|
地下室#
发布于:2004-03-10 12:45
先GetStartupInfo,然后CreateProcess
|
|
|
5楼#
发布于:2004-03-10 13:10
我才发现上面的代码实际上是成功了。
不过创建的进程没有窗口,我把STARTUPINFO结构中的showwindow改了也没用,而且该子进程居然也变成服务,kill不掉,我晕倒了 怎么会这样? 找到一篇文章,还是不知该怎么办 http://techsupt.winbatch.com/TS/T000001036004F33.html 我不要这么复杂,只要启动一个应用程序就可以了呀 能用其它的函数搞定吗? |
|
6楼#
发布于:2004-03-10 13:20
根据你的贴在来看,该进程并不是服务,但他同创建的他进程是同样的环境,所以和普通的进程不同
还可以考虑一个间接的方法通过CreateRemoteThread把CreateProcess代码放到EXPLORER的空间,通过EXPLORER来启动进程,你测试看看. |
|
|
7楼#
发布于:2004-03-10 13:59
我才发现上面的代码实际上是成功了。 自己改一下si参数中的默认桌面就行了 |
|
8楼#
发布于:2004-03-10 20:03
调用CreateProcessAsUser()函数可以搞定。
1、缺省情况下新建立的进程将运行在“非交互、不可视”的工作站和桌面之上,意味着用户不能看见新进程的窗口。如果想让新进程和用户进行交互,必须明确指定STARTUPINFO结构的lpDesktop为“WinSta0-Default”。 2、第一个参数必须是当前登陆用户的Token。缺省情况下服务运行在LocalSystem帐号下面,而一般的应用程序运行在当前的登陆帐号下面,比如Guest、Administrator等。之所以一定要使用当前登陆用户的Token,而不采用服务进程的Toekn,是因为LocalSystem帐号有很多限制,比如不能访问网络,不能直接存取HKEY-Current-User注册表键等。 可以通过OpenProcess()和OpenProcessToken()函数得到当前登陆用户的Token。顺便说清楚一点,可以通过使用Toolhelp API查询进程的Process ID来作为OpenProcess()的最后一个参数。 注意:“WinSta0-Default”,这个“-”应该是反斜杠backslash,但是这个论坛不允许使用这个字符,所以使用“-”代替,使用时必须替换。 [编辑 - 3/10/04 by slwqw] |
|
9楼#
发布于:2004-03-17 10:27
服务程序和一般的应用程序不在同一个窗口环境,所以服务程序创建的程序是看不到窗口的。
|
|
10楼#
发布于:2004-03-19 10:55
谢谢 slwqw 谢谢大家 分已给出
|
|