createprocess失败 代码2 怎么解决

createprocess失败代码2怎么解决... createprocess失败 代码2 怎么解决 展开
 我来答
灬Nico丶
2019-07-17 · TA获得超过3404个赞
知道答主
回答量:60
采纳率:100%
帮助的人:4.5万
展开全部

使用CFileDialog选择文件了以后,会在其内部调用“SetCurrentDirectory“设置被选择文件的目录为当前路径。

因此如果文件和程序不在同一路径,那么CreateProcess使用内部调用的相对路径就可能找不到对应程序,所以导致createprocess出现错误代码2的情况。解决办法是CreateProcess使用可执行文件的绝对路径便可以解决文件和程序不在同一路径的问题。

扩展资料:

CreateProcess部分参数含义

1、lpApplicationName

指向一个NULL结尾的、用来指定可执行模块的字符串

这个字符串可以是可执行模块的绝对路径,也可以是相对路径,在后一种情况下,函数使用当前驱动器和目录建立可执行模块的路径。

这个参数可以被设为NULL,在这种情况下,可执行模块的名字必须处于 lpCommandLine 参数最前面并由空格符与后面的字符分开。

2、lpCommandLine

指向一个以NULL结尾的字符串,该字符串指定要执行的命令行。这个参数可以为空,那么函数将使用lpApplicationName参数指定的字符串当做要运行的程序的命令行。

如果lpApplicationName和lpCommandLine参数都不为空,那么lpApplicationName参数指定将要被运行的模块,lpCommandLine参数指定将被运行的模块的命令行。

新运行的进程可以使用GetCommandLine函数获得整个命令行。C语言程序可以使用argc和argv参数。

3、lpProcessAttributes

指向一个SECURITY_ATTRIBUTES结构体,这个结构体决定是否返回的句柄可以被子进程继承。如果lpProcessAttributes参数为空(NULL),那么句柄不能被继承。

在Windows NT中:SECURITY_ATTRIBUTES结构的lpSecurityDescriptor成员指定了新进程的安全描述符,如果参数为空,新进程使用默认的安全描述符。

4、lpThreadAttributes

同lpProcessAttribute,不过这个参数决定的是线程是否被继承,通常置为NULL。

金山毒霸
2024-10-31 广告
大部分系统错误,是因为某些DLL文件丢失造成的,比如未安装DirectX9或DirectX 9.0组件已损坏、缺少Visual C ++库、未安装.net库。解决方法如下:一、 手动解决方法1、先确定电脑操作系统是多少位的,现在的电脑一般都... 点击进入详情页
本回答由金山毒霸提供
百度网友96ffcf7
推荐于2017-09-21 · 知道合伙人互联网行家
百度网友96ffcf7
知道合伙人互联网行家
采纳数:22721 获赞数:118717
从事多年网络方面工作,有丰富的互联网经验。

向TA提问 私信TA
展开全部
  真实原因:
  使用CFileDialog选择文件了以后会在其内部调用SetCurrentDirectory设置被选择文件的目录为当前路径,如果文件和程序不在同一路径,那么CreateProcess使用相对路径就一定找不到可执行程序了。
  解决方案:
  任何时候都使用可执行文件的绝对路径来CreateProcess它。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mingyuejingque56e1
2011-03-26 · TA获得超过110个赞
知道小有建树答主
回答量:186
采纳率:50%
帮助的人:89.1万
展开全部
2 是 “系统找不到文件” ;可能是你 用了相对路径,而当前工作目录又找不到这个文件。
一种方法是 :用绝对路径。
另一种是 :先把当前的工作目录切换到对应路径,再加上相对目录。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式