部署win服务时,经常会出现类似下面的错误,错误模块名称: KERNELBASE.dll。



日志名称:          Application


来源:            Application Error


日期:            2014/5/21 14:14:33


事件 ID:         1000


任务类别:          (100)


级别:            错误


关键字:           经典


用户:            暂缺


计算机:           ams-webserver


描述:


错误应用程序名称: demo.exe,版本: 1.0.5217.18476,时间戳: 0x534b44d9


错误模块名称: KERNELBASE.dll,版本: 6.1.7601.18015,时间戳: 0x50b83c8a


异常代码: 0xe0434352


错误偏移量: 0x0000c41f


错误进程 ID: 0xc04


错误应用程序启动时间: 0x01cf74bbeef9f15b


错误应用程序路径: E:\demo\demo .exe


错误模块路径: C:\Windows\syswow64\KERNELBASE.dll


报告 ID: 2cf76b05-e0af-11e3-817d-0050568c62ab


事件 Xml:


<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">


  <System>


    <Provider Name="Application Error" />


    <EventID Qualifiers="0">1000</EventID>


    <Level>2</Level>


    <Task>100</Task>


    <Keywords>0x80000000000000</Keywords>


    <TimeCreated SystemTime="2014-05-21T06:14:33.000000000Z" />


    <EventRecordID>1352</EventRecordID>


    <Channel>Application</Channel>


    <Computer>ams-webserver</Computer>


    <Security />


  </System>


  <EventData>


    <Data>demo.exe</Data>


    <Data>1.0.5217.18476</Data>


    <Data>534b44d9</Data>


    <Data>KERNELBASE.dll</Data>


    <Data>6.1.7601.18015</Data>


    <Data>50b83c8a</Data>


    <Data>e0434352</Data>


    <Data>0000c41f</Data>


    <Data>c04</Data>


    <Data>01cf74bbeef9f15b</Data>


    <Data>E:\demo \demo .exe</Data>


    <Data>C:\Windows\syswow64\KERNELBASE.dll</Data>


    <Data>2cf76b05-e0af-11e3-817d-0050568c62ab</Data>


  </EventData>


</Event> 



解决方案:

引起这种错误的原因有很多种,但是windows是个很傻的东西,它报的错误不会给你很明确的定位,看这种错误给人的感觉就是权限不够,导致无法访问 C:\Windows\syswow64\KERNELBASE.dll,或者就是缺失KERNELBASE.dll文件。可是排查后又发现系统是有这个文件的,于是网上经常查到的答案就是替换这个文件,或者说给win服务调用的应用程序配置权限。

其实这些方法都不靠谱,原因很简单,KERNELBASE.dll文件在系统安装时就会生成,除非这个文件中毒或者说安装时文件已经损坏了,否则不要轻易去替换这类系统的文件;其次是权限配置,如果真的是权限问题,报的错误不应该是定位到系统文件,而是程序安装时就报程序的那类错误。

所以遇到这类错误,最好的方法就是去查看程序本身,特别是需要用到config之类的配置文件,很多时候都是配置文件出的错误。比如config文件中记录日志是在G盘,而你要安装的这个win服务机器本身并没有G盘,那么就会报这类错误。只需将其日志记录的路径更改现有磁盘上存在的路径即可。