大家好,菜鸟向大侠请教,我我写了一个VB6调用webbrowse的程序,是打开一个视频网站,然后自动播放和切换视频的功能,平时运行正常,但是运行一段时间后,会出现一个调用realplay里面的DLL文件错误的问题,我想请教各位大侠,有什么办法在出错的时候,自动关闭,然后重启这个程序呀

解决方案 »

  1.   

    以下是错误信息
    <?xml version="1.0" encoding="UTF-16"?>
    <DATABASE>
    <EXE NAME="挂机1.exe" FILTER="GRABMI_FILTER_PRIVACY">
        <MATCHING_FILE NAME="挂机.exe" SIZE="36864" CHECKSUM="0xC415C78C" BIN_FILE_VERSION="1.0.0.0" BIN_PRODUCT_VERSION="1.0.0.0" PRODUCT_VERSION="1.00" COMPANY_NAME="XT" PRODUCT_NAME="工程1" FILE_VERSION="1.00" ORIGINAL_FILENAME="挂机.exe" INTERNAL_NAME="挂机" VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x4" VERFILETYPE="0x1" MODULE_TYPE="WIN32" PE_CHECKSUM="0x147EF" LINKER_VERSION="0x10000" UPTO_BIN_FILE_VERSION="1.0.0.0" UPTO_BIN_PRODUCT_VERSION="1.0.0.0" LINK_DATE="09/02/2010 01:01:58" UPTO_LINK_DATE="09/02/2010 01:01:58" VER_LANGUAGE="中文(中国) [0x804]" />
        <MATCHING_FILE NAME="挂机1.exe" SIZE="36864" CHECKSUM="0xF30D0E53" BIN_FILE_VERSION="1.0.0.0" BIN_PRODUCT_VERSION="1.0.0.0" PRODUCT_VERSION="1.00" COMPANY_NAME="XT" PRODUCT_NAME="工程1" FILE_VERSION="1.00" ORIGINAL_FILENAME="挂机1.exe" INTERNAL_NAME="挂机1" VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x4" VERFILETYPE="0x1" MODULE_TYPE="WIN32" PE_CHECKSUM="0x1070B" LINKER_VERSION="0x10000" UPTO_BIN_FILE_VERSION="1.0.0.0" UPTO_BIN_PRODUCT_VERSION="1.0.0.0" LINK_DATE="09/13/2010 02:19:04" UPTO_LINK_DATE="09/13/2010 02:19:04" VER_LANGUAGE="中文(中国) [0x804]" />
        <MATCHING_FILE NAME="XlsToSql\XlsToSql.exe" SIZE="3362816" CHECKSUM="0x7F5C2AFF" BIN_FILE_VERSION="1.2.1.11" BIN_PRODUCT_VERSION="1.2.1.11" PRODUCT_VERSION="1.2" FILE_DESCRIPTION="" COMPANY_NAME="" PRODUCT_NAME="" FILE_VERSION="1.2.1.11" ORIGINAL_FILENAME="" INTERNAL_NAME="" LEGAL_COPYRIGHT="" VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x4" VERFILETYPE="0x1" MODULE_TYPE="WIN32" PE_CHECKSUM="0x0" LINKER_VERSION="0x0" UPTO_BIN_FILE_VERSION="1.2.1.11" UPTO_BIN_PRODUCT_VERSION="1.2.1.11" LINK_DATE="06/19/1992 22:22:17" UPTO_LINK_DATE="06/19/1992 22:22:17" VER_LANGUAGE="英语(美国) [0x409]" />
    </EXE>
    <EXE NAME="clntxres.dll" FILTER="GRABMI_FILTER_THISFILEONLY">
        <MATCHING_FILE NAME="clntxres.dll" SIZE="44032" CHECKSUM="0x66C2E558" BIN_FILE_VERSION="10.0.1.1076" BIN_PRODUCT_VERSION="10.0.1.1076" PRODUCT_VERSION="10.0.1.1076" FILE_DESCRIPTION="RealMedia Resources" COMPANY_NAME=" " PRODUCT_NAME="RealMedia Resources (32-bit) " FILE_VERSION="10.0.1.1076" ORIGINAL_FILENAME="HXXRES.DLL" INTERNAL_NAME="HXXRES" LEGAL_COPYRIGHT="Copyright(c) RealNetworks, Inc. 1995-2009. All rights reserved. Source code for this program is available under the RealNetworks Public Source License." VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x4" VERFILETYPE="0x0" MODULE_TYPE="WIN32" PE_CHECKSUM="0x0" LINKER_VERSION="0x0" UPTO_BIN_FILE_VERSION="10.0.1.1076" UPTO_BIN_PRODUCT_VERSION="10.0.1.1076" LINK_DATE="06/28/2010 23:08:07" UPTO_LINK_DATE="06/28/2010 23:08:07" VER_LANGUAGE="英语(美国) [0x409]" />
    </EXE>
    <EXE NAME="kernel32.dll" FILTER="GRABMI_FILTER_THISFILEONLY">
        <MATCHING_FILE NAME="kernel32.dll" SIZE="1150464" CHECKSUM="0xC48B85C8" BIN_FILE_VERSION="5.1.2600.5781" BIN_PRODUCT_VERSION="5.1.2600.5781" PRODUCT_VERSION="5.1.2600.5781" FILE_DESCRIPTION="Windows NT BASE API Client DLL" COMPANY_NAME="Microsoft Corporation" PRODUCT_NAME="Microsoft(R) Windows(R) Operating System" FILE_VERSION="5.1.2600.5781 (xpsp_sp3_gdr.090321-1317)" ORIGINAL_FILENAME="kernel32" INTERNAL_NAME="kernel32" LEGAL_COPYRIGHT="(C) Microsoft Corporation. All rights reserved." VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x40004" VERFILETYPE="0x2" MODULE_TYPE="WIN32" PE_CHECKSUM="0x11E97E" LINKER_VERSION="0x50001" UPTO_BIN_FILE_VERSION="5.1.2600.5781" UPTO_BIN_PRODUCT_VERSION="5.1.2600.5781" LINK_DATE="03/21/2009 14:06:57" UPTO_LINK_DATE="03/21/2009 14:06:57" VER_LANGUAGE="中文(中国) [0x804]" />
    </EXE>
    </DATABASE>
      

  2.   

    这个啊......如果不想用守护进程,那就自己干掉自己吧.....思路是,先用SEH捕捉到这个内存错误,再启动一个新的自己,然后出错的自己退出.........SEH的模块去年写了一个,送给你吧:在VB6里使用SEH(结构化异常处理)你只需要在vbIgnore那里启动一个定时器,设定在几秒后启动新副本,再退出就好了.不直接启动副本而采用延时的目的是为了防止一定时间内有多个连续的错误产生,从而运行了多个副本的情况.一般几秒钟足够了吧.....