在应用中,我使用了 CreateProcess 来创建进程,
但有人发现我用 CreateProcess 启动的程序,在vista下,会不见,但在任务管理器存在进程
朋友对我使用 CreateProcess 表示质疑,还怀疑会不会是在 vista 下面开了两个用户,
在用户A下面创建的进程,界面显示到 用户B 去了?
这可能吗?
还劝告我说,用CreateProcessAsUser 试试吧
CreateProcess 创建的进程不可能跑到其它用户的界面去
CreateProcessAsUser 创建的进程只是以某个用户的权限去执行,也不会显示到其它用户的界面去!!!
晚了,该睡了,有空再找下相关资料
2008-09-23
今天, 在调代码的时候发现
BOOL bCreateProcess = ::CreateProcess(strPath, strParam, NULL, NULL, TRUE, 0, NULL, strCurrentPath, &si, &pi);
strPath = "c:\test.exe" (不包含双引号)
strParam = "param_value_1 param_value_2"
strCurrentPath = "c:\"
然后在 test.exe 里用 GetCommandLine() 取到的值发现等于 "param_value_1 param_value_2" (同样不包含引号)
导致 test.exe 读取参数出错
我还先还以为在 test.exe 中用 GetCommandLine() 应该是 "test.exe param_value_1 param_value_2"
记之!
2008.09.25
今天之前,界面显示不出的问题找出原因
用 CreateProcess 调用程序 A 时没有设置 CurrentDir, 而且 程序A 里使用了 GetCurrentDirtory() 来获取界面资源
获取不到,所以获取当前路径,还是使用 GetModuleFile 安全些
因为当前工作目录随时会改变
但为什么只在一台装 vista 的机器才会出问题,没查出具体的原因
记之