没画完的画

喂马 劈柴 BBQ~
posts - 37, comments - 55, trackbacks - 0, articles - 0
  C++博客 ::  :: 新随笔 :: 联系 :: 聚合  :: 管理

[Z]CreateProcess 与 CreateProcessAsUser

Posted on 2008-09-25 12:12 没画完的画 阅读(4286) 评论(0)  编辑 收藏 引用 所属分类: VC
在应用中,我使用了 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 的机器才会出问题,没查出具体的原因

记之

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理