`
guoyiqi
  • 浏览: 1016449 次
社区版块
存档分类
最新评论

种强行指定dll assembly读取其相应*.dll.config配置文件的方法(又名:如何创建.net 的DCOM)(转自:http://blog.csdn.net/shaily/article)

 
阅读更多

一般来说,.net 的exe assemly会存在一个对应的*.exe.config配置文件。当需要读取配置信息的时候,可以直接通过ConfigurationManager.AppSettings[index]来读取*.exe.config中的键值,但很少存在dll assembly需要config file的情况。假如当前dll assembly名为test.dll,如果在test.dll中调用ConfigurationManager来读取test.dll.config,那么是无法成功的!

当然,在dll assembly中要读取其*.dll.config这种需求非常少见。但是确要读取的话,可以采取以下方式,即强行制定其dll assembly的路径。

以下代码演示的是:编写一个.net dll并将其发布为一个regasm test.dll /codebase /tlb将其发布为一个DCOM,然后通过asp页面来调用。其中在test.dll中的公布的方法HelloWorld()需要读取其test.dll.config中的key value.

dll assembly代码如下:

C# version:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Runtime.InteropServices;
usingSystem.Configuration;
usingSystem.IO;
usingSystem.Reflection;

namespaceAnotherDCOM
{
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
publicinterfaceITestClass
{
stringHelloWorld();
}

[ClassInterface(ClassInterfaceType.AutoDispatch)]
publicclassSimpleClass:ITestClass
{

publicstringHelloWorld()
{
Assemblyassembly;
System.Configuration.Configurationconfiguration;
ExeConfigurationFileMapmap;

Uriuri;
map
=newExeConfigurationFileMap();
assembly
=Assembly.GetCallingAssembly();
uri
=newUri(Path.GetDirectoryName(assembly.CodeBase));
map.ExeConfigFilename
=Path.Combine(uri.LocalPath,assembly.GetName().Name+".dll.config");
stringstr=ConfigurationManager.OpenMappedExeConfiguration(map,0).AppSettings.Settings["MyString"].Value;
/*
说明:如果采取如下的传统方法,读取configkey
stringstr=ConfigurationManager.AppSettings["MyString"];
如果采取这种方式的话,则assembly不会读取相应*.dll.config文件;bydefault,只有exeassembly的配置文件才会被load
*/
if(str!=null)
{
returnstr;
}
else
{
return"HelloWorld.netAnotherDCOM,Can'treadconfig";
}

}
}
}

VB.net version

ImportsSystem
ImportsSystem.Runtime.InteropServices
ImportsSystem.Reflection
ImportsSystem.Configuration
ImportsSystem.IO


NamespaceNetDcom
<InterfaceType(ComInterfaceType.InterfaceIsIDispatch)>PublicInterfaceITestClass
FunctionHelloWorld()AsString
EndInterface

<ClassInterface(ClassInterfaceType.AutoDispatch),ProgId("NetDcom.SimpleClass"),ComVisible(True)>PublicClassSimpleClass
ImplementsITestClass
PublicFunctionHelloWorld()AsStringImplementsITestClass.HelloWorld
DimassemblyAsAssembly
DimconfigurationAsConfiguration
DimmapAsExeConfigurationFileMap
DimstrAsString
DimuriAsUri
map
=NewExeConfigurationFileMap
[assembly]
=assembly.GetCallingAssembly
uri
=NewUri(Path.GetDirectoryName([assembly].CodeBase))
map.ExeConfigFilename
=Path.Combine(uri.LocalPath,([assembly].GetName.Name&".dll.config"))
str
=ConfigurationManager.OpenMappedExeConfiguration(map,0).AppSettings.Settings.Item("MyString").Value

IfString.IsNullOrEmpty(str)
<>TrueThen
HelloWorld
=str
Else
HelloWorld
="HelloWorld,.netDCOM(vb.net)"
EndIf


EndFunction

EndClass
EndNamespace


app.config配置文件如下(编译后会自动生成test.dll.config文件):

<?xmlversion="1.0"encoding="utf-8"?>
<configuration>
<appSettings>
<addkey="MyString"value="HelloWorld"/>
</appSettings>
</configuration>

编译发布之后,运行以下command将其注册为DCOM

regasm test.dll /codebase /tlb

说明:如果.net dll要注册成为COM的话,需要几个必备的条件:

1. dll要设置相应的System.runtime.InteropServices的相应attribute,如山代码所示。

2. (C#中)assemblyinfo.cs中, comvisible要设置为true。

3. 生成dll assembly的时候,一定要选中 Register for ComInterop复选框,如下所示

然后,通过asp调用该DCOM如下:

<%
setobj=CreateObject("AnotherDCOM.SimpleClass")
Response.writeobj.HelloWorld()
%>

通过procmon我们可以看到,该dll.config被争取读取了:)

分享到:
评论

相关推荐

    OPC Core Components(*.c,*.h,*.dll)文件

    OPC(OLE for Process Control)是工业自动化领域中一种数据交换的标准,它允许不同厂商的软件和硬件系统之间进行通信。OPC Core Components是OPC技术的基础组件,提供了与OPC服务器和客户端交互的核心功能。 在...

    系统盘中各种dll文件的含义

    ### 系统盘中各种dll文件的含义 在计算机领域,了解系统盘中的各种dll文件不仅对于维护系统稳定性和安全性至关重要,还能够帮助用户更好地理解操作系统的工作原理。本篇文章将详细解析部分重要的dll文件及其功能。 ...

    dos 命令大全dos 命令大全

    这是早期版本的Windows中用于自动化任务的一种方法。 7. **atmadm.exe**:用于管理ATM适配器和网络服务。 8. **attrib.exe**:用于查看和修改文件属性,如只读、隐藏等。这对于文件管理和安全非常重要。 9. **...

    DCOM影像浏览器.zip

    "DCOM影像浏览器.zip"是一个压缩包,包含了一系列与医学影像处理和查看相关的动态链接库(DLL)文件和配置文件。这些组件可能用于一个基于DCOM(分布式组件对象模型)技术的医学影像浏览应用程序。DCOM是微软的一种...

    KepServer服务器DCOM配置.pdf

    2. 另一种方法是从“控制面板”的“管理工具”中打开“组件服务”,这同样会引导你进入DCOM配置界面。 **第二部分:服务端配置** **一、服务端DCOM配置** 1. 在DCOM配置程序中,找到KepServer的相关组件,通常是...

    OPC通讯DCOM自动配置工具,亲测好用!一键配置所有的项!

    OPC(OLE for Process Control)通信是工业自动化领域中一种重要的数据交换标准,它允许不同厂商的设备和软件之间进行数据交互。DCOM(分布式组件对象模型)是OPC通信的基础,它允许 OPC 客户端(OPC Client)与 OPC...

    电脑高手常用快捷命令

    本文将详细介绍一系列实用的快捷命令,涵盖系统管理、网络配置、文件操作等多个方面,旨在帮助用户更深入地了解并运用这些命令来优化自己的工作流程。 #### 二、系统管理和工具类命令 1. **appwize.cpl**:用于打开...

    端口 总结

    文件服务**:另一种文件服务。 **191. Prospero目录服务**:Prospero目录服务。 **192. OSU服务**:OSU服务,用于特定应用场景。 **193. Spider远程服务**:Spider远程服务,用于特定应用场景。 **194. IRC服务...

    OPCNetAPI.dll

    3. 使用自定义接口,需要用到多个.NET Wrapper:OpcRcw.Ae.dll,OpcRcw.Batch.dll,OpcRcw.Comn.dll,OpcRcw.Da.dll,OpcRcw.Dx.dll,OpcRcw.Hda.dll,OpcRcw.Sec.dll; OPCNetAPI 2.0由OPC foundation提供,只有...

    windows xp 系统文件 2

    ### Windows XP系统文件知识点 #### 1. **accwiz.exe** - **功能**: `accwiz.exe` 是一个辅助工具向导程序,用于帮助用户配置Windows XP中的辅助功能选项,比如屏幕阅读器、键盘快捷方式等。 #### 2. **acsetups....

    提示符教程

    22. **dcomcnfg**: 打开Distributed Component Object Model (DCOM) 配置服务。 23. **ddeshare**: DDE(Dynamic Data Exchange)共享设置。 24. **dvdplay**: 内置的DVD播放器。 25. **net stop / start**: 停止或...

    OPC DCOM配置.pdf

    ### OPC DCOM配置详解 #### 一、DCOM配置概述 **OPC DCOM配置**是一种用于实现不同应用程序之间通信的技术,特别是在工业自动化领域中,它使得设备控制系统能够与上位机软件进行高效的数据交换。DCOM(Distributed...

    win命令大全

    - **regsvr32 /u *.* /regsvr32 /u zipfldr.dll**:卸载DLL文件。 - **cmd.exe**:命令提示符窗口,执行各种命令行操作。 - **chkdsk.exe /chkdsk**:磁盘检查工具,检查并修复文件系统错误。 - **certmgr.msc**:...

    电脑提示中英文对照

    - **中文释义:** DCOM配置 - **描述:** 配置分布式COM服务的命令。 24. **dcpromo.exe** - **中文释义:** 域控制器推广 - **描述:** 安装或卸载域控制器角色的工具。 #### 四、其他实用工具 1. **...

    OPC错误代码,还有点用

    - **解决方法**: 检查客户端的DCOM配置,确保允许客户端模拟操作。特别是在使用异步I/O时,需要注意这一点。 **9. 0x80040202 - 无法连接** - **描述**: 在调用连接点上的Advise方法时出现错误。 - **解决方法**: ...

    开始运行命令的快捷方式

    56. **regsvr32/u*.dll** - **功能**: 卸载DLL文件。 - **应用场景**: 卸载不再需要的动态链接库。 57. **regsvr32/uzip**\***dr.dll** - **功能**: 注册ZIP支持。 - **应用场景**: 启用对ZIP文件的支持。 58....

    cmd命令大全

    通过CMD可以执行各种系统管理、配置、诊断等操作,对于IT专业人士来说,掌握CMD命令的使用方法能够极大地提高工作效率。 #### 常用CMD命令详解 1. **gpedt.msc** - 打开本地组策略编辑器,用于配置和管理计算机及...

    SYSTEM32 文件的简单说明.txt

    ### SYSTEM32 文件的详细解析 #### 概述 在Windows操作系统中,`System32`目录是一个极其重要的组成部分,存放了大量的系统文件、动态链接库(DLL)以及其他关键组件。这些文件对于系统的正常运行至关重要。本文将...

    Win8中运行命令全说明.docx

    - **功能**:木马捆绑工具,但也是系统自带的一个用于创建自解压文件的工具。 35. **joy.cpl**: - **功能**:游戏控制器设置,用于配置游戏手柄和其他游戏设备。 36. **logoff**: - **功能**:注销当前用户...

Global site tag (gtag.js) - Google Analytics