一般来说,.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(OLE for Process Control)是工业自动化领域中一种数据交换的标准,它允许不同厂商的软件和硬件系统之间进行通信。OPC Core Components是OPC技术的基础组件,提供了与OPC服务器和客户端交互的核心功能。 在...
### 系统盘中各种dll文件的含义 在计算机领域,了解系统盘中的各种dll文件不仅对于维护系统稳定性和安全性至关重要,还能够帮助用户更好地理解操作系统的工作原理。本篇文章将详细解析部分重要的dll文件及其功能。 ...
这是早期版本的Windows中用于自动化任务的一种方法。 7. **atmadm.exe**:用于管理ATM适配器和网络服务。 8. **attrib.exe**:用于查看和修改文件属性,如只读、隐藏等。这对于文件管理和安全非常重要。 9. **...
"DCOM影像浏览器.zip"是一个压缩包,包含了一系列与医学影像处理和查看相关的动态链接库(DLL)文件和配置文件。这些组件可能用于一个基于DCOM(分布式组件对象模型)技术的医学影像浏览应用程序。DCOM是微软的一种...
2. 另一种方法是从“控制面板”的“管理工具”中打开“组件服务”,这同样会引导你进入DCOM配置界面。 **第二部分:服务端配置** **一、服务端DCOM配置** 1. 在DCOM配置程序中,找到KepServer的相关组件,通常是...
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服务...
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系统文件知识点 #### 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配置详解 #### 一、DCOM配置概述 **OPC DCOM配置**是一种用于实现不同应用程序之间通信的技术,特别是在工业自动化领域中,它使得设备控制系统能够与上位机软件进行高效的数据交换。DCOM(Distributed...
- **regsvr32 /u *.* /regsvr32 /u zipfldr.dll**:卸载DLL文件。 - **cmd.exe**:命令提示符窗口,执行各种命令行操作。 - **chkdsk.exe /chkdsk**:磁盘检查工具,检查并修复文件系统错误。 - **certmgr.msc**:...
- **中文释义:** DCOM配置 - **描述:** 配置分布式COM服务的命令。 24. **dcpromo.exe** - **中文释义:** 域控制器推广 - **描述:** 安装或卸载域控制器角色的工具。 #### 四、其他实用工具 1. **...
- **解决方法**: 检查客户端的DCOM配置,确保允许客户端模拟操作。特别是在使用异步I/O时,需要注意这一点。 **9. 0x80040202 - 无法连接** - **描述**: 在调用连接点上的Advise方法时出现错误。 - **解决方法**: ...
56. **regsvr32/u*.dll** - **功能**: 卸载DLL文件。 - **应用场景**: 卸载不再需要的动态链接库。 57. **regsvr32/uzip**\***dr.dll** - **功能**: 注册ZIP支持。 - **应用场景**: 启用对ZIP文件的支持。 58....
通过CMD可以执行各种系统管理、配置、诊断等操作,对于IT专业人士来说,掌握CMD命令的使用方法能够极大地提高工作效率。 #### 常用CMD命令详解 1. **gpedt.msc** - 打开本地组策略编辑器,用于配置和管理计算机及...
### SYSTEM32 文件的详细解析 #### 概述 在Windows操作系统中,`System32`目录是一个极其重要的组成部分,存放了大量的系统文件、动态链接库(DLL)以及其他关键组件。这些文件对于系统的正常运行至关重要。本文将...
- **功能**:木马捆绑工具,但也是系统自带的一个用于创建自解压文件的工具。 35. **joy.cpl**: - **功能**:游戏控制器设置,用于配置游戏手柄和其他游戏设备。 36. **logoff**: - **功能**:注销当前用户...