系统注册的COM组件无法释放,一直被占用

问题描述

一VB编写的dll无法直接在.net程序中直接引用,所以注册到系统成为了com组件,然后可以直接引用这个dll,但是使用这个dll之后发现无法释放使用的资源,造成第二次调用的时候提示组件已打开,已使用方法:GC.Collect();-在方法外侧释放的Marshal.ReleaseComObject(object);目前在vs的自带的web容器里面可以释放资源,但是放到IIS就无法释放,一直被占用,求各位大侠支招。

解决方案

解决方案二:
你应该先说明一下,什么叫“释放”,这跟“第二次调用的时候提示组件已打开”有什么关系。你应该直截了当地说明你的组件的具体bug“提示”。你的组件有所谓“释放、关闭”的说明书吗?贴出来。
解决方案三:
引用楼主cf072457的回复:

目前在vs的自带的web容器里面可以释放资源,但是放到IIS就无法释放,一直被占用

你是怎样测试“释放资源”的?你在单机测试时反复几十遍用多用户(至少5用户)并发访问过吗?
解决方案四:
publicvoidProcessRequest(HttpContextcontext){context.Response.ContentType="text/plain";stringparam=context.Request["data"];try{if(!string.IsNullOrEmpty(param)){stringdata=context.Server.UrlDecode(param).Replace("&","n");CreatISO(context,data);GC.Collect();}}catch(Exceptione){LogHelper.WriteLog(typeof(CreateISO),e);}}privatevoidCreatISO(HttpContextcontext,stringdata){stringbasePath=@"c:tempbase.txt";stringoutPath=@"c:tempout.txt";stringisoPath=@"c:tempiso.txt";CreateFile(newstring[]{basePath,outPath,isoPath},true);//写入雨量值StreamWriterwrite=newStreamWriter(basePath);write.Write(data);write.Close();//获取等值线数据等值线动态库.ISODlliso=new等值线动态库.ISODll();try{iso.CreateISO(basePath,outPath);Marshal.ReleaseComObject(iso);//varo=Marshal.IsComObject(iso);iso=null;}catch(Exceptione){LogHelper.WriteLog(typeof(CreateISO),e);}//处理等值线数据Utility.CreateISO(outPath,isoPath);StreamReaderreader=newStreamReader(isoPath);varresultList=reader.ReadToEnd();reader.Close();CreateFile(newstring[]{basePath,outPath,isoPath},false);//输出等值线数据context.Response.Write(resultList);}这是页面代码,在第一次执行iso.CreateISO(basePath,outPath);没有问题,第二次请求的时候就提示记录时间:2015-05-0309:32:57,114记录类:CreateISO命名空间:StationNetworkManage.ISO.CreateService+CreateISO方法位置:在等值线动态库.ISODllClass.CreateISO(StringsPFile,StringsISOFile)在StationNetworkManage.ISO.CreateService.CreatISO(HttpContextcontext,Stringdata)位置c:UserssmailookDesktopProjectln_demoStationNetworkManage.ISOCreateService.ashx.cs:行号52记录信息:Filealreadyopen错误信息:无
解决方案五:
引用1楼sp1234的回复:

你应该先说明一下,什么叫“释放”,这跟“第二次调用的时候提示组件已打开”有什么关系。你应该直截了当地说明你的组件的具体bug“提示”。你的组件有所谓“释放、关闭”的说明书吗?贴出来。

publicvoidProcessRequest(HttpContextcontext){context.Response.ContentType="text/plain";stringparam=context.Request["data"];try{if(!string.IsNullOrEmpty(param)){stringdata=context.Server.UrlDecode(param).Replace("&","n");CreatISO(context,data);GC.Collect();}}catch(Exceptione){LogHelper.WriteLog(typeof(CreateISO),e);}}privatevoidCreatISO(HttpContextcontext,stringdata){stringbasePath=@"c:tempbase.txt";stringoutPath=@"c:tempout.txt";stringisoPath=@"c:tempiso.txt";CreateFile(newstring[]{basePath,outPath,isoPath},true);//写入雨量值StreamWriterwrite=newStreamWriter(basePath);write.Write(data);write.Close();//获取等值线数据等值线动态库.ISODlliso=new等值线动态库.ISODll();try{iso.CreateISO(basePath,outPath);Marshal.ReleaseComObject(iso);//varo=Marshal.IsComObject(iso);iso=null;}catch(Exceptione){LogHelper.WriteLog(typeof(CreateISO),e);}//处理等值线数据Utility.CreateISO(outPath,isoPath);StreamReaderreader=newStreamReader(isoPath);varresultList=reader.ReadToEnd();reader.Close();CreateFile(newstring[]{basePath,outPath,isoPath},false);//输出等值线数据context.Response.Write(resultList);}这是页面代码,在第一次执行iso.CreateISO(basePath,outPath);没有问题,第二次请求的时候就提示记录时间:2015-05-0309:32:57,114记录类:CreateISO命名空间:StationNetworkManage.ISO.CreateService+CreateISO方法位置:在等值线动态库.ISODllClass.CreateISO(StringsPFile,StringsISOFile)在StationNetworkManage.ISO.CreateService.CreatISO(HttpContextcontext,Stringdata)位置c:UserssmailookDesktopProjectln_demoStationNetworkManage.ISOCreateService.ashx.cs:行号52记录信息:Filealreadyopen错误信息:无

时间: 2024-10-14 18:17:50

系统注册的COM组件无法释放,一直被占用的相关文章

Win7系统如何重新注册IE10相关组件

有些用户比较习惯使用windows系统内置的IE浏览器,为了更好的体验IE浏览器与提高流畅性,有些win7操作系统用户会将IE升级至IE10版本.随着平常对IE浏览器的不同程序使用,难免会出现一些IE错误提示问题,可能是出现打开快捷方式没反应,出现这种情况就需要对IE10相关dll文件组件进行重新注册,就可以解决IE浏览器没反应或错误问题,下面来看看win7 64位旗舰版重新注册IE10相关组件操作教程吧. 操作方法/步骤: 1.点击开始.运行,在输入框里面输入cmd,点击Enter键,就可以打

Android零基础入门第2节:Android 系统架构和应用组件那些事

原文:Android零基础入门第2节:Android 系统架构和应用组件那些事  继上一期浅谈了Android的前世今生,这一期一起来大致回顾一下Android 系统架构和应用组件.   一.Android 系统架构 Android系统的底层建立在Linux系统之上,该平台由操作系统.中间件.用户界面和应用软件4层组成,它采用一种被称为软件叠层(Software Stack)的方式进行构建.这种软件叠层结构使得层与层之间相互分离,明确各层的分工.这种分工保证了层与层之间的低耦合,当下层的层内或层

注册表危险组件删除功能批处理_DOS/BAT

把这个存成bat文件运行,保你服务器最基本的安全! 复制代码 代码如下: :: 注册表相关设定 reg delete HKEY_CLASSES_ROOT\WScript.Shell /f reg delete HKEY_CLASSES_ROOT\WScript.Shell.1 /f reg delete HKEY_CLASSES_ROOT\Shell.application /f reg delete HKEY_CLASSES_ROOT\Shell.application.1 /f reg de

WIN7系统注册表编辑器无法删除项目怎么回事

在win7系统中,有时我们需要通过删除注册表中的一些项来清除无效数据,不过有的用户在删除一些注册表信息的时候发现并没有那么容易,在删除的时候马上弹出"删除项时出错"的信息,出现这样的提示通常是由于权限不足引起的,没有权限导致删除失败.下面小编就以win7系统下载64位旗舰版为例,跟大家一起分享下遇上此类问题的解决方法! win7系统注册表删除项出错 方法如下: 1.右击要删除的注册表项目,然后选择"权限"选项; 2.弹出权限设置窗口后再点击"高级"

XP系统注册表如何还原到上次成功启动时

  虽然目前新电脑配置都比较高端,所以安装的多是win7系统,由于大很多用户都还是使用着老电脑,还有一些低端配置电脑,都还使用着Windows XP系统,许多电脑用户可能对XP系统的注册表不怎么熟悉,注册表的用处比较大,用户在使用电脑过程中,难免会遇到一些小问题故障,有的系统故障可以通过注册表来解决,比如XP系统出现文件损坏或者丢失,导致无法成功进入系统,我们可以让XP系统注册表还原到上次成功启动时的状态,电脑也就能够成功进入到系统. Windows将其配置信息存储在一个称为注册表的数据库中,该

Win7系统注册表受损的修复方法

  Win7系统注册表受损的修复方法             解决方法一: 1.可以使用系统本身备份的注册表文件替换现有的; 2.如果电脑还能进入系统,那么单击"开始""运行",输入cmd,打开命令行窗口,通过copy命令将 C:windows/system32/config/RegBack目录下的所有文件都拷贝到C:windows/system32/config目录下,然后重启电脑即可解决问题.若电脑不能进入系统,可以利用U大师制作的启动U盘启动电脑进入到WINP

XP系统注册表空间不足怎么解决

XP系统注册表空间不足怎么解决   1.减少开机启动项,在运行中输入msconfig 打开系统配置,然后在启动中取消不必要的开机启动项; 2.删除部分不使用的软件,并对系统进行垃圾清理; 3.调整增加WinXP系统的虚拟内存大小; 4.在尝试以上几个方法都不凑效时,建议增加内存条来增加系统物理内存. 注册表是每一个系统当中很关键的一个部位,而且WinXP系统开机的时候是需要读取注册表数据到内存中的,大家若有出现这错误提示的,就赶紧解决吧.

win8系统注册表打不开怎么办

  win8系统注册表打不开怎么办          一.使用鼠标右键点击win8桌面空白处,新建一个记事本文件. 二.接着在记事本中输入以下内容,把文件保存为.reg注册表文件,双击导入就可以解决win8注册表打不开的问题了. reg add "HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesSystem" /v DisableRegistryTools /t reg_dword /d 00000000 /

Win7系统注册dll时没有权限怎么办?

  Win7系统注册dll时没有权限怎么办? 出现这样的问题主要是由于你的登录帐户不是管理员导致的,只要使用管理员登录再执行命令就可以了. 建议开启Administrator帐户然后用该帐户登录. 1.首先按平时的帐户登录win7系统,然后右键点击桌面上的计算机 图标,并选择[管理]; 2.在计算机管理界面,在左侧项目列表中展开[本地用户和组]; 3.选中[用户]选项,双击右侧列表中的[administrator]用户,这时发现该帐户为禁用状态,把[帐户已禁用]前面的勾 取消,然后确定. 4.注