CreateProcess的当前进程的当前目录是什么?
[问题点数:100分]
楼主
发表于: 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这个程序。
name="aswift_2" width="728" height="90" id="aswift_2" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" vspace="0" hspace="0" allowfullscreen="true" style="left: 0px; top: 0px; position: absolute;" allowtransparency="true">
| |
#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这个程序。 | |
#2 得分:0
回复于: 2012-09-27 09:57:13
1. 包含当前进程可执行文件的目录=exe所在的目录
2. 当前进程的当前目录:当前目录不一定是exe所在目录,比如双击快捷方式,看看属性->快捷方式->起始位置,这个就是当前目录。就像命令行: C:\workdir>c:\exedir\app.exe 则exe目录是c:\exedir,而当前目录是c:\workdir 当前目录可能被进程调用SetCurrentDirectory更改 | |
#3 得分:0
回复于: 2012-09-27 10:23:04
2. 当前进程的当前目录有什么区别?
主要这要追溯到曾经的DOS界面的命令行模式了。其实在WIN系统下面这个根本就无所谓的。 | |
|
#4 得分:0
回复于: 2012-09-27 10:27:43
1. 包含当前进程可执行文件的目录=exe所在的目录
2. 当前进程的当前目录=进程的工作目录 |
#5 得分:0
回复于: 2012-09-27 12:27:36
区别是:
1. 包含当前进程可执行文件的目录永远是exe所在的目录 2. 当前进程的当前目录可以用SetCurrentDirectory改变 一点常识: 1. 子进程的当前目录开始时和父进程的当前目录一样,例如:命令提示符上显示的路径就是当前目录,在其上面输入某程序路径来运行,则这时该程序进程和cmd.exe进程当前目录是相同的。 2. 在快捷方式中指定起始位置则可以指定当前目录来运行程序。 | |
|
#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); |
#7 得分:0
回复于: 2012-09-27 12:46:26
对的,如果该参数不为NULL的话 C++ API创建进程#include "stdafx.h"
bool bRet=::CreateProcess( }
注册用户登录后才能发表评论,请
登录 或
注册,
访问网站首页。
|