C# Regasm组件注册

功能:程序集注册工具(Regasm.exe),读取程序集中的元数据,并将所需的项添加到注册表中

使用REGASM.EXE注册工具,注册  E:\ClassLibrary1.dll 的COM组件

 

C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm  /codebase E:\ClassLibrary1.dll

 

使用批处理命令来注册程序

@echo off


set path = C:\Windows\Microsoft.NET\Framework\v2.0.50727\;%path%


RegAsm /codebase E:\ClassLibrary1.dll


pause

可以使用 /regfile 选项生成包含注册表项的 .reg 文件,而不是直接对注册表进行更改。通过注册表编辑器工具 (Regedit.exe) 导入 .reg 文件,可以在计算机上更新注册表。请注意,.reg 文件不包含任何可由用户定义的注册函数完成的注册表更新。注意,/regfile 选项只为托管类发出注册表项。此选项不为 TypeLibID 或 InterfaceID发出注册表项。

egsvr32.exe是windows自带的activex注册和反注册工具

regsvr32的用法为:
"regsvr32 [/s] [/n][/u] dllname”。其中dllname为activex控件文件名,建议在安装前拷贝到system文件夹下。

参数有如下意义:
/u——反注册控件
/s——不管注册成功与否,均不显示提示框
/c——控制台输出
/i——跳过控件的选项进行安装(与注册不同)
/n——不注册控件,此选项必须与/i选项一起使用

当 使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。

以下列表介绍了 RegSvr32 错误消息和可能的原因。

Unrecognized flag:/invalid_flag
键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。
No DLL name specified.
未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
Dllname不是.dll 或.ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。

例 如,键入regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:197155 如何终止孤立进程OleInitialize failed (or OleUninitialize failed).

Regsvr32 必须先初始化COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。

将 DLL 安装到全局程序集缓存(GAC)

程序集的共享和版本控制

该组件可用于由一个以上的应用程序,可能需要不止一个版本的程序集。多个版本可以同时存在于 GAC 中。

安全性

GAC 放置在系统根中应用了多数的沙箱外安全特性。您不需要在多处放置它。

程序集查找

在查找本地文件夹之后在 GAC 中查找代码库信息。

开始

创建一个强名称密钥对:

首先,我们需要创建一个强名称密钥文件。 这将使用的命令格式为:sn –k <文件名与位置>。 下面是一个示例。 创建了一个包括公钥与私钥的密钥对。

使用 Visual Studio 对程序集进行签名

给程序集签名非常简单 - 你也可能使用较麻烦的程序集链接器,但那完全没必要。右键点击解决方案资源管理器中的项目节点,选择属性。在“签名”(Signing)的选项卡中勾选“为程序集签名”(Sign the assembly)。在下面的下面列表中选择您的密钥文件。在这个示例中,我已经将密钥文件复制到了与 ReportingUtilitites DLL 生成相同的 bin\debug 文件夹中。

安装到 GAC

现在我们有了一个已签名可安装到 GAC 的程序集。 运行 Visual Studio 命令提示 (在 visual studio tools 中) 并写下面的指令: gacutil –I <程序集名称 >。 在本示例中我将当前命令提示文件夹定位到了 DLL 所在文件夹 - 您可以也这么做或是在程序集名称里输入完整路径。

在 MSI 中安装程序集到 GAC

在产品环境中,现实情况是,你没有安装 Visual Studio 环境。

不用担心。 安装一个 DLL 到 GAC 仍然很简单 - 你只需要创建一个部署项目。

在 Visual Studio 中添加一个新的部署项目到您的解决方案中。

  • 选择一个标准安装程序 - 无向导。
  • 右键点击项目节点,选择视图,文件系统。
  • 右键点击“目标计算机上的文件系统”(File System on target machine) 选择 “Global Assembly Cache 文件夹”(GAC)

  • 右键点击生成的 GAC 文件夹选择“项目输出”(Project Output)中的 Dll 项目下的主输出(primary output)。 确保您在下拉列表中选择了正确的项目!
  •  

    该项目也将增加.NET框架的启动条件。 确保该版本设置的版本将是在目标机器上,因为它会默认为您的开发机器上的最新版本 (这可能是更高的)。

    更改版本:

    • 右键点击项目节点选择视图中的“启动条件”(launch conditions)
    • 在启动条件中选择 .Net Framework
    • 选择属性面板。您可能需要重新选择启动条件,以突出显示正确的属性。它应该如下:

    现在你可以生成你的项目并复制文件到您需要安装 DLL 的环境中了。

     

 

posted @ 2022-05-17 16:35  淮雨清青  阅读(1843)  评论(0编辑  收藏  举报