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<u=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F390227823<r=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<u=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F390227823<r=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<u=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F390227823<r=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) 编辑 收藏 刷新评论刷新页面返回顶部 注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。 |
相关文章推荐
- JAVA中堆和栈的区别
- 操作 excel 读 xlrd
- 操作 excel 写 xlwt
- CSS 3 颜色属性
- java反射机制
- java实现单链表
- this android sdk requires a...adt
- pip更新
- Spark性能优化第二季
- 爬楼梯
- android 开发 onRestart()未调用
- angularJS懒加载依赖模块
- xutils使用手册(一)——初始化
- Android_App多语言切换
- PHP PSR-3 日志接口规范 (中文版)
- 【bzoj1602】【Usaco2008 Oct】牧场行走 (暴力) 题解&代码
- [bzoj1601]: [Usaco2008 Oct]灌水牧场行走 最小生成树
- 【Java】内存区域划分
- 堆和栈的区别
- Dumpdecrypted 砸壳失败