CreateProcess 创建进程失败原因调查

article/2025/10/27 20:29:06

使用 CreateProcess 函数创建进程(调用外部程序)算是很常用的操作了,最近在工作中却遇到一个少见的怪现象,经常使用的一段代码(调用外部程序并等待其结束,主要就使用了 CreateProcess 函数),在少数某些机器上会失败(目前只在某一个 Win8.1 和某一个 Win10 机器遭遇失败)。

经调查分析,发现正是 CreateProcess 调用失败,GetLastError 返回 0x05 错误(ERROR_ACCESS_DENIED),凭经验知道这是权限不足的问题,但具体是什么原因?一时无解。继续排查,发现原先有另一处调用外部程序的代码是不存在该问题的,仔细对比两处代码,发现调用 CreateProcess 时的第6个参数(dwCreationFlags)不一样!问题代码中使用了 CREATE_BREAKAWAY_FROM_JOB 值(和 Job Object 有关),马上去掉该值再测试,问题果然没有了!

抱着「知其然,还要知其所以然。」的一惯态度,继续寻找导致该问题的原因,历程如下:

1. 先是深入解读了 MSDN 相关部分,了解到使用 CREATE_BREAKAWAY_FROM_JOB 参数是需要前提条件的:需要其关联的 Job 对象具有 JOB_OBJECT_LIMIT_BREAKAWAY_OK 属性,否则就会失败,但 MSDN 中并未明确指出失败码为 0x05。

2. 网上求解过程中,意外地在 Chrome Issues 列表中发现同样的问题:「WinAPI  CreateProcessAsUserW() with CREATE_BREAKAWAY_FROM_JOB flag which fails with 0x5 (access denied) error.」。

3. 翻书《Windows核心编程》也找到了对 CREATE_BREAKAWAY_FROM_JOB 的相关说明(如下图):

总结一下:
我使用的这段代码是从以前的工程里拷贝来的,至于为什么带上了 CREATE_BREAKAWAY_FROM_JOB 参数,属于历史问题就不得而知了,这个参数的目的是让子进程脱离父进程的 Job,如果本没有这个需求的话,可以不用考虑直接去掉,如果确实需要该特性的话,那就得按官方的要求来,要确保其 Job 对象具有 JOB_OBJECT_LIMIT_BREAKAWAY_OK 属性(具体怎么实现不属于本文的范畴了)。个别机器上可能由于系统环境的某些特殊原因,造成相关 Job 对象不具有 JOB_OBJECT_LIMIT_BREAKAWAY_OK 属性,因此导致了该问题的出现,图证如下:

有Breakaway OK属性
vs
无Breakaway OK属性

所以,以后遇到 CreateProcess 失败,错误码为 0x05 时,去检查一下参数里是否有 CREATE_BREAKAWAY_FROM_JOB 吧!


参考:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ms684863(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ms684161(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ms684147(v=vs.85).aspx
https://code.google.com/p/chromium/issues/detail?id=79091#c45
《Windows核心编程》



http://chatgpt.dhexx.cn/article/VSvbDSAG.shtml

相关文章

jsp页面报org.apache.jasper.JasperException错误的一种解决方法

最近idea搭建ssm项目jsp页面出现如下问题 解决办法如下&#xff1a; 把 <% taglib uri“http://java.sun.com/jstl/core” prefix“c” %> 改成 <% taglib uri“http://java.sun.com/jstl/core_rt” prefix“c” %>

报org.apache.jasper.JasperException错误的一种解决方法

最近遇到的一个问题 把 <% taglib uri"http://java.sun.com/jstl/core" prefix"c" %> 改成 <% taglib uri"http://java.sun.com/jstl/core_rt" prefix"c" %> 这只是一种方法&#xff0c;如果解决不了&#xff0c;我…

org.apache.jasper.JasperException: java.lang.ClassNotFoundException解决办法

一、运行项目出错截图 报错找不到jsp文件&#xff0c;此时修改一下访问路径&#xff0c;会报如下错误: 二、解决java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSupport的方法&#xff1a; 1.缺少了相应的jar包&#xff1a; jstl-1.2standard…

org.apache.jasper.JasperException:解决办法!

org.apache.jasper.JasperException: The absolute uri: http://itcast.cn/common/ cannot be resolved in either web.xml or the jar files deployed with this application解决办法 今天在完成SSM框架整合的时候&#xff0c;使用eclipse在tomcat运行项目没提示任何问题&…

org.apache.jasper.JasperException: 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/

问题如下&#xff1a; lib包下配置 jsp页面的导入一切正常&#xff0c;没有提示任何错误 网上也查了好多结果&#xff0c;最后发现修改tomcat中的conf/catalina.properties文件&#xff0c; tomcat.util.scan.DefaultJarScanner.jarsToSkip*.jar 改为&#xff1a; tomcat.ut…

javaweb项目报错:org.apache.jasper.JasperException: 无法为JSP编译类

执行相应的跳转页面&#xff0c;出现了报错&#xff1a; HTTP状态 500 - 内部服务器错误 org.apache.jasper.JasperException: 无法为JSP编译类 类型 异常报告消息 无法为JSP编译类:描述 服务器遇到一个意外的情况&#xff0c;阻止它完成请求。例外情况org.apache.jasper.Jas…

Maven Web报错:org.apache.jasper.JasperException: Unable to compile class for JSP

Maven Web报错&#xff1a;org.apache.jasper.JasperException: Unable to compile class for JSP 今天被这个问题弄得&#xff0c;拽下了一大把的头发&#xff01;哭唧唧~~~ 遇到的问题截图&#xff1a; 于是查找各方面的资料&#xff0c;发现是jar包的冲突&#xff0c;于是…

org.apache.jasper.JasperException异常解决

org.apache.jasper.JasperException 今天在写查询员工表一个小Demo的时候 Date数据格式在jsp页面转换为String类型时候 出现了如下异常 查看jsp页面的52行代码发现 修改&#xff1a; 日期也能如“yyyy-MM-dd"格式正常显示&#xff0c;如下

org.apache.jasper.JasperException: An exception occurred processing JSP page /user/users.jsp at line

看报错信息&#xff0c;问题出现在了代码段的第二十行&#xff0c;这行只写了一个for循环&#xff0c;再看下面还报了一个空指针异常的错误&#xff0c;初步判断问题出现在了list上&#xff0c;jsp没能从Java后台中获取到list的数据。 找到对应发送请求的位置 package contro…

org.apache.jasper.JasperException: Unable to compile class for JSP:

标题 MyEclipse10默认tomcat6.0默认jdk1.6 项目场景&#xff1a;使用jsp内置对象response对象&#xff0c;创建一个普通的web项目运行jsp时&#xff0c;然后向客户端输出二进制流&#xff0c;实现下载功能。结果报错。 问题描述&#xff1a; 不多bb&#xff0c;直接上代码&a…

org.apache.jasper.JasperException: org.apache.jasper.JasperException: java.lang.ClassNotFoundExcepti

org.apache.jasper.JasperException: org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.jsp.main_jsp 主要问题&#xff1a; 原因&#xff1a;有多个界面有下面这句话 <% taglib uri"http://java.sun.com/jstl/core" prefi…

【已解决】org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp

错误信息很明确&#xff0c;就是没有找到index_jsp这个class文件。 Jsp本质上就是一个servlet&#xff0c;也就是一个java类&#xff0c;tomcat通过运行编译好的class文件来显示jsp页面&#xff0c;而翻译jsp文件为java文件的引擎也就是tomcat的jasper。但是我的tomcat内部是没…

已解决org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp

已解决org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp 文章目录 报错问题解决方法福利 报错问题 粉丝群里面的一个小伙伴敲代码时发生了报错&#xff08;当时他心里瞬间凉了一大截&#xff0c;跑来找我求助&#xff0c;然后…

完美解决org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp

已解决org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp 文章目录 报错问题解决方法福利 报错问题 粉丝群里面的一个小伙伴敲代码时发生了报错&#xff08;当时他心里瞬间凉了一大截&#xff0c;跑来找我求助&#xff0c;然后…

已解决org.apache.jasper.JasperException: org.apache.jasper.JasperException: java.lang.ClassNotFoundExce

已解决org.apache.jasper.JasperException: org.apache.jasper.JasperException: java.lang.ClassNotFoundExcepti异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录 报错问题解决方法福利 报错问题 粉丝群里面的一个小伙伴敲代码时发生了…

JasperException异常

今天处理分页遇到一个很郁闷的问题&#xff0c;就是jsp页面显示类型转换异常&#xff08;id是integer类型的&#xff0c;但是异常提醒是input string id)和JasperException异常&#xff0c;最终问题是出在JasperException异常上。 在使用query对象进行本地sql语句的赋值时如果未…

org.apache.jasper.JasperException 解决思路

一、本文前置条件: 1. Tomcat 8及以上 2. 读取taglib标签报错&#xff0c;报错内容: org.apache.jasper.JasperException ...(省略) The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this applicat…

解决org.apache.jasper.JasperException: 无法为JSP编译类

1.问题描述 org.apache.jasper.JasperException: 无法为JSP编译类: 在运行java web项目时&#xff0c;启动tomcat服务器报这样的操作&#xff0c;一般就是tomcat版本跟jdk版本不兼容的问题。我用的是jdk17&#xff0c;经过查阅相关资料得出一般使用jdk8就可以解决此类问题 2.…

C#的checkedListBox控件

&#xff08;1&#xff09;单击选中&#xff0c;而不是双击选中&#xff0c;checkedlistbox控件右键属性&#xff0c;将 checkonclick 改成 true 就是单击选中&#xff0c;false 就是双击选中 &#xff08;2&#xff09;多选框并排显示&#xff0c;将 multicolumn 改成 true 就…

关于checkedListBox

首先设置控件属性CheckOnClick为true添加事件ItemCheck 添加代码如下&#xff1a; for(int i 0; i < checkedListBox1.Items.Count; i) {if(i ! e.Index){checkedListBox1.SetItemCheckState(i,CheckState.Unckecked);} } 添加事件SelectedIndexChanged for(int i 0; …