首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >找不到CreateProcess() c++文件

找不到CreateProcess() c++文件
EN

Stack Overflow用户
提问于 2013-11-01 19:21:55
回答 4查看 3.7K关注 0票数 3

我试图使用CreateProcess启动子进程,但是我一直得到error 2,根据文档,这个文件是找不到的。

我的代码如下所示:

代码语言:javascript
运行
复制
if (!(CreateProcess(LPCTSTR("test.exe") ,NULL ,NULL,NULL,FALSE ,0  ,NULL ,NULL ,&producer_si
              ,&producer)))
{
    printf("Create process failed!(%d)\n", GetLastError());
}

其中test.exe是我之前创建的一个可执行程序。子进程非常简单,代码如下所示:

代码语言:javascript
运行
复制
void _tmain (int argc, TCHAR* argv[])
{
printf("%s\n", "hello!"); 
} 

test.exe也与父进程在同一个文件夹中找到。我不明白为什么我总是得到错误代码2。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-01 19:54:41

错误2是ERROR_FILE_NOT_FOUND。正如其他人告诉您的那样,当您需要使用一个绝对路径时,您依赖的是一个相对路径。

另外,LPCTSTR("test.exe")不是有效的代码。如果定义了UNICODE,则CreateFile()映射到CreateFileW()LPCTSTR映射到LPCWSTR ie const wchar_t*。您不能将char*键入到wchar_t*并得到有意义的数据。如果要使用TCHAR-sensitive文本,请使用TEXT()宏,例如:

代码语言:javascript
运行
复制
if (!CreateProcess(TEXT("full path to\\test.exe"), ...))

否则,不要使用TCHAR,只需编写特定于Ansi或Unicode的代码,这取决于您的需要:

代码语言:javascript
运行
复制
if (!CreateProcessA("full path to\\test.exe", ...))

代码语言:javascript
运行
复制
if (!CreateProcessW(L"full path to\\test.exe", ...))
票数 3
EN

Stack Overflow用户

发布于 2013-11-01 19:32:01

test.exe永远不会在调用exe的目录中被查找。它正在当前目录中查找,该目录是每个进程路径变量。可能当前目录没有指向test.exe所在的位置。您也不应该依赖它,因为它可以任意更改(例如,通过使用文件对话框,或者当父进程更改它时)。

票数 0
EN

Stack Overflow用户

发布于 2013-11-01 19:32:10

CreateProcess函数在文件名方面非常敏感,至少在我看来是这样的。当您这样指定您的exe时,您实际上根据当前目录指定它,该目录可能与您的主exe所在的目录不相同,这说明文件找不到。一种方法是简单地使用GetModulePath来获取当前exe的目录,从该目录中删除exe名称,或者使用绝对路径。

根据CreateProcess文档,第一个参数可以为NULL:

lpApplicationName参数可以为NULL。在这种情况下,模块名必须是lpCommandLine字符串中第一个空格分隔的令牌。

至少对我来说,如果您只指定命令行,那么它比使用应用程序名称要好得多,而且在应用程序名称中,也不能处理命令行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19733915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档