您的位置:首页 > 其它

CreateProcess的当前进程的当前目录

2016-05-16 09:40 465 查看
CreateProcess的当前进程的当前目录是什么? [问题点数:100分]

不显示删除回复显示所有回复显示星级回复显示得分回复只显示楼主


收藏

          



账号:GoForSky昵称:GoForSky关注
博客空间

最新帖子:

牛人挡不住--看看科学家工程师企...
今天看到一个帖子(题目-哎呀哎...
普通的函数查找OL和ADL(ko...
更多 >>

取消关注关注GoForSky
GoForSky 本版等级:


本版专家分:142

结帖率:88.37%
楼主 发表于: 2012-09-27 09:18:35

CreateProcess函数用于创建进程:

BOOL CreateProcess

(   

   PCTSTR pszApplicationName,   

   PTSTR pszCommandLine,   

   PSECURITY_ATTRIBUTES psaProcess,   

   PSECURITY_ATTRIBUTES psaThread,   

   BOOL bInheritHandles,   

   DWORD fdwCreate,   

   PVOID pvEnvironment,   

   PCTSTR pszCurDir,   

   PSTARTUPINFO psiStartInfo,   

   PPROCESS_INFORMATION ppiProcInfo

);  

pszCommandLine参数指定了 CreateProcess创建新进程所需的完整命令行。当

CreateProcess解析该参数时,它会检查命令行参数中的第一个标记,并将其作为

进程要执行的可执行文件名,如果该文件名没有指定后缀,函数将把它当作exe文

件。CreateProcess会按下面的顺序查找该文件:

1. 包含当前进程可执行文件的目录

3. Windows系统目录,既GetSystemDirectory返回的目录

4. Windows目录

5. PATH环境变量列出的目录

请问:

1. 包含当前进程可执行文件的目录和2. 当前进程的当前目录有什么区别?

比如:我的程序是E:\main.exe,在此程序中利用createprocesss打开了D:

\test\sub.exe这个程序。

更多0
分享到:

相关知识库:
计算机网络 C#
BlueMix
虚拟现实(VR)

<iframe width="200" height="22" align="center,center" id="iframeu1636200_0" src="http://pos.baidu.com/vcnm?rdid=1636200&dc=2&di=u1636200&dri=0&dis=0&dai=2&ps=1533x511&dcb=BAIDU_SSP_define&dtm=BAIDU_DUP_SETJSONADSLOT&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1463362668760&ti=CreateProcess%E7%9A%84%E5%BD%93%E5%89%8D%E8%BF%9B%E7%A8%8B%E7%9A%84%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F-CSDN%E8%AE%BA%E5%9D%9B-CSDN.NET-%E4%B8%AD%E5%9B%BD%E6%9C%80%E5%A4%A7%E7%9A%84IT%E6%8A%80%E6%9C%AF%E7%A4%BE%E5%8C%BA&ari=1&dbv=0&drs=3&pcs=1600x797&pss=1600x5409&cfv=20&cpl=2&chi=2&cce=true&cec=utf-8&tlm=1463362668&ltu=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F390227823&ltr=http%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3Du_Eo11O32dtJ3-yEfUNDX2z1rqyLry1IBSCSy5sIvSyYV5zTaaADTegzJa0CMqVC%26wd%3D%26eqid%3Dd87b6774001080670000000557392461&ecd=1&psr=1600x1000&par=1600x909&pis=-1x-1&ccd=24&cja=true&cmi=4&col=zh-CN&cdo=-1&tcn=1463362669&qn=9636cfa747e301ce&tt=1463362668706.68.371.371" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" vspace="0" hspace="0" style="margin: 0px; border: 0px currentColor; border-image: none; vertical-align: bottom;" allowtransparency="true"></iframe>

<iframe width="200" height="22" align="center,center" id="iframeu1636201_0" src="http://pos.baidu.com/vcnm?rdid=1636201&dc=2&di=u1636201&dri=0&dis=0&dai=3&ps=1533x765&dcb=BAIDU_SSP_define&dtm=BAIDU_DUP_SETJSONADSLOT&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1463362668760&ti=CreateProcess%E7%9A%84%E5%BD%93%E5%89%8D%E8%BF%9B%E7%A8%8B%E7%9A%84%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F-CSDN%E8%AE%BA%E5%9D%9B-CSDN.NET-%E4%B8%AD%E5%9B%BD%E6%9C%80%E5%A4%A7%E7%9A%84IT%E6%8A%80%E6%9C%AF%E7%A4%BE%E5%8C%BA&ari=1&dbv=0&drs=3&pcs=1600x797&pss=1600x5409&cfv=20&cpl=2&chi=2&cce=true&cec=utf-8&tlm=1463362668&ltu=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F390227823&ltr=http%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3Du_Eo11O32dtJ3-yEfUNDX2z1rqyLry1IBSCSy5sIvSyYV5zTaaADTegzJa0CMqVC%26wd%3D%26eqid%3Dd87b6774001080670000000557392461&ecd=1&psr=1600x1000&par=1600x909&pis=-1x-1&ccd=24&cja=true&cmi=4&col=zh-CN&cdo=-1&tcn=1463362669&qn=9c37663663b81a10&tt=1463362668706.70.361.362" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" vspace="0" hspace="0" style="margin: 0px; border: 0px currentColor; border-image: none; vertical-align: bottom;" allowtransparency="true"></iframe>

<iframe width="200" height="22" align="center,center" id="iframeu1636204_0" src="http://pos.baidu.com/vcnm?rdid=1636204&dc=2&di=u1636204&dri=0&dis=0&dai=4&ps=1533x1018&dcb=BAIDU_SSP_define&dtm=BAIDU_DUP_SETJSONADSLOT&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1463362668760&ti=CreateProcess%E7%9A%84%E5%BD%93%E5%89%8D%E8%BF%9B%E7%A8%8B%E7%9A%84%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F-CSDN%E8%AE%BA%E5%9D%9B-CSDN.NET-%E4%B8%AD%E5%9B%BD%E6%9C%80%E5%A4%A7%E7%9A%84IT%E6%8A%80%E6%9C%AF%E7%A4%BE%E5%8C%BA&ari=1&dbv=0&drs=3&pcs=1600x797&pss=1600x5409&cfv=20&cpl=2&chi=2&cce=true&cec=utf-8&tlm=1463362668&ltu=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F390227823&ltr=http%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3Du_Eo11O32dtJ3-yEfUNDX2z1rqyLry1IBSCSy5sIvSyYV5zTaaADTegzJa0CMqVC%26wd%3D%26eqid%3Dd87b6774001080670000000557392461&ecd=1&psr=1600x1000&par=1600x909&pis=-1x-1&ccd=24&cja=true&cmi=4&col=zh-CN&cdo=-1&tcn=1463362669&qn=d607038bca127906&tt=1463362668706.72.349.350" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" vspace="0" hspace="0" style="margin: 0px; border: 0px currentColor; border-image: none; vertical-align: bottom;" allowtransparency="true"></iframe>

对我有用[0]

丢个板砖[0]
引用 |
举报 |
编辑

删除
管理
回复次数:11
          
取消关注关注GoForSky
GoForSky 本版等级:


本版专家分:142

结帖率:88.37%
#1 得分:0
回复于: 2012-09-27 09:44:10
件。CreateProcess会按下面的顺序查找该文件:

1. 包含当前进程可执行文件的目录

2. 当前进程的当前目录有什么区别

3. Windows系统目录,既GetSystemDirectory返回的目录

4. Windows目录

5. PATH环境变量列出的目录

请问:

1. 包含当前进程可执行文件的目录和2. 当前进程的当前目录有什么区别?

比如:我的程序是E:\main.exe,在此程序中利用createprocesss打开了D:

\test\sub.exe这个程序。

对我有用[0]

丢个板砖[0]
引用 |
举报 |
编辑

删除
管理

          
取消关注关注ndy_w
ndy_w 本版等级:


本版专家分:36166

结帖率:100%



黄花2011年8月 VC/MFC大版内专家分月排行榜第二
#2 得分:0
回复于: 2012-09-27 09:57:13
1. 包含当前进程可执行文件的目录=exe所在的目录

2. 当前进程的当前目录:当前目录不一定是exe所在目录,比如双击快捷方式,看看属性->快捷方式->起始位置,这个就是当前目录。就像命令行:

C:\workdir>c:\exedir\app.exe

则exe目录是c:\exedir,而当前目录是c:\workdir

当前目录可能被进程调用SetCurrentDirectory更改
对我有用[1]

丢个板砖[0]
引用 |
举报 |
编辑

删除
管理

          
取消关注关注tiger9991


傻X 本版等级:


本版专家分:103494

结帖率:100%



进士2012年 总版技术专家分年内排行榜第八




金牌2012年12月 总版技术专家分月排行榜第一

2012年10月 总版技术专家分月排行榜第一

2012年9月 总版技术专家分月排行榜第一

2012年8月 总版技术专家分月排行榜第一




铜牌2012年11月 总版技术专家分月排行榜第三
更多勋章
#3 得分:0
回复于: 2012-09-27 10:23:04
2. 当前进程的当前目录有什么区别?

主要这要追溯到曾经的DOS界面的命令行模式了。其实在WIN系统下面这个根本就无所谓的。

对我有用[0]

丢个板砖[0]
引用 |
举报 |
编辑

删除
管理

          
取消关注关注zhanshen2891
zhanshen2891 本版等级:


本版专家分:7039

结帖率:100%
#4 得分:0
回复于: 2012-09-27 10:27:43
1. 包含当前进程可执行文件的目录=exe所在的目录

2. 当前进程的当前目录=进程的工作目录
对我有用[0]

丢个板砖[0]
引用 |
举报 |
编辑

删除
管理

          
取消关注关注gfm688
gfm688 本版等级:


本版专家分:8975

结帖率:100%
#5 得分:0
回复于: 2012-09-27 12:27:36
区别是:

1. 包含当前进程可执行文件的目录永远是exe所在的目录

2. 当前进程的当前目录可以用SetCurrentDirectory改变

一点常识:

1. 子进程的当前目录开始时和父进程的当前目录一样,例如:命令提示符上显示的路径就是当前目录,在其上面输入某程序路径来运行,则这时该程序进程和cmd.exe进程当前目录是相同的。

2. 在快捷方式中指定起始位置则可以指定当前目录来运行程序。
对我有用[0]

丢个板砖[0]
引用 |
举报 |
编辑

删除
管理

          
取消关注关注agoago_2009
Gloveing 本版等级:


本版专家分:17182

结帖率:100%



铜牌2012年9月 总版技术专家分月排行榜第三




红花2012年9月 Windows专区大版内专家分月排行榜第一

2012年9月 C/C++大版内专家分月排行榜第一

2012年8月 Windows专区大版内专家分月排行榜第一




黄花2012年9月 其他开发语言大版内专家分月排行榜第二

2012年8月 VC/MFC大版内专家分月排行榜第二

2012年8月 其他开发语言大版内专家分月排行榜第二
更多勋章
#6 得分:0
回复于: 2012-09-27 12:34:35
BOOL CreateProcess(

  LPCTSTR lpApplicationName,                 // name of executable module

  LPTSTR lpCommandLine,                      // command line string

  LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD

  LPSECURITY_ATTRIBUTES lpThreadAttributes,  // SD

  BOOL bInheritHandles,                      // handle inheritance option

  DWORD dwCreationFlags,                     // creation flags

  LPVOID lpEnvironment,                      // new environment block
  LPCTSTR lpCurrentDirectory,      // current directory name 这个参数不就是指定了进程当前目录么

  LPSTARTUPINFO lpStartupInfo,               // startup information

  LPPROCESS_INFORMATION lpProcessInformation // process information);
对我有用[0]

丢个板砖[0]
引用 |
举报 |
编辑

删除
管理

          
取消关注关注gfm688
gfm688 本版等级:


本版专家分:8975

结帖率:100%
#7 得分:0
回复于: 2012-09-27 12:46:26
引用 6 楼  的回复:
LPCTSTR lpCurrentDirectory, // current directory name 这个参数不就是指定了进程当前目录么

对的,如果该参数不为NULL的话

C++ API创建进程

#include "stdafx.h"

#include <windows.h>

int main(int argc, char* argv[])

{

  //创建进程

 char szCommandLine[]="cmd";

 STARTUPINFO si={sizeof(si)};

 PROCESS_INFORMATION pi;

 si.dwFlags=STARTF_USESHOWWINDOW;

 si.wShowWindow=true;

 bool bRet=::CreateProcess(

  NULL,

  szCommandLine,

  NULL,

  NULL,

  FALSE,

  CREATE_NEW_CONSOLE,

  NULL,

  NULL,

  &si,

  &pi);

 if(bRet)

 {

  ::CloseHandle(pi.hThread);

  ::CloseHandle(pi.hProcess);

  printf("新进程的进程ID号:%d\n",pi.dwProcessId);

  printf("新进程的主线程的ID号:%d\n",pi.dwThreadId);

 }

 

}

分类:
初识C++

好文要顶
关注我
收藏该文联系我








IamScree
关注 - 2
粉丝 - 5

+加关注

0
0

(请您对文章做出评价)

posted on 2012-03-16 16:12
IamScree 阅读(1863) 评论(0)  编辑

收藏

 

刷新评论刷新页面返回顶部

注册用户登录后才能发表评论,请
登录 或 注册,访问网站首页。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: