C# 如何实现手动注册COM?

csuchen6 2013-10-31 11:53:54
我在Lib类库里做了简单一个控件,实现了与HTML页面的交互,在本机上可以运行。我已经用regasm对DLL进行了注册,但我把生成的DLL文件与TLB文件以及HTML文件拷到别的电脑,却不能运行。

AssemblyInfo.cs代码如下(几乎全是系统生成的):


using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;

// 有关程序集的常规信息通过以下
// 特性集控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("cypLib")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Lenovo (Beijing) Limited")]
[assembly: AssemblyProduct("cypLib")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AllowPartiallyTrustedCallers()]


// 将 ComVisible 设置为 false 使此程序集中的类型
// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
// 则将该类型上的 ComVisible 特性设置为 true。
[assembly: ComVisible(true)]

// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
//[assembly: Guid("34d64ec1-e367-475b-a0f2-8f3f9c07d267")]

// 程序集的版本信息由下面四个值组成:
//
// 主版本
// 次版本
// 内部版本号
// 修订号
//
// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
// 方法是按如下所示使用“*”:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]



窗体控件库只有一个最简单函数:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace cypLib
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}

//private void button1_Click(object sender, EventArgs e)
//{

// label1.Text = textBox1.Text;

//}

public void showMessage()
{
MessageBox.Show("Hello cyp!");
}

}

}



html中也只有一两句代码 :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<object id="UserControl1" classid="clsid:0CF3F87B-60E5-3A18-904D-F670C976579C"

width="184" >

<param name="s1" value="用param传递控件属性"/>

</object>

<input type='button' onclick='UserControl1.showMessage()' value='用param传递控件属性'/>


</body>
</html>


仅在VS2010的提示命令处用物理路径对DLL与TLB注册,路径如下:
regasm D:\cypLib\cypLib\bin\Debug\cypLib.dll
regasm D:\cypLib\cypLib\bin\Debug\cypLib.dll /tlb:cypLib.tlb

只把DLL、TLB与HTM拷过去,在别的电脑上不执行Button的请求,求大神帮忙了
...全文
393 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-10-31
  • 打赏
  • 举报
回复
目标电脑要安装.net framework 要在目标电脑上运行regasm 或者你可以用regasm /regfile 导出一个注册表文件,导入目标计算机,这样目标计算机不需要额外运行regasm了。
csuchen6 2013-10-31
  • 打赏
  • 举报
回复
已经解决,解贴先。 在摸索过程中也有一些心得,随后在本贴后面附上。 感谢各位速度的回答。
threenewbee 2013-10-31
  • 打赏
  • 举报
回复
引用 2 楼 csuchen6 的回复:
[quote=引用 1 楼 caozhy 的回复:] 目标电脑要安装.net framework 要在目标电脑上运行regasm 或者你可以用regasm /regfile 导出一个注册表文件,导入目标计算机,这样目标计算机不需要额外运行regasm了。
谢谢版主的回答,目标电脑有.net框架,我是想不在目标电脑上运行regasm就能直接打开HTM网页,请问导出注册表文件后,要导入到目标计算机的哪个位置呢?[/quote] 注册表文件包含导入到什么位置(键和值),你只要导入就可以了。
卧_槽 2013-10-31
  • 打赏
  • 举报
回复
导出注册表相关项,然后写个bat导入。 你的winform程序检查下注册表有没有相关注册项,没有就调用下bat。 简单明了。
xmsgzjfx 2013-10-31
  • 打赏
  • 举报
回复
导出注册表文件后,应该是注册这个dll文件的所有信息都包括了,除了CodeBase,再编辑这个.reg文件把CodeBase写进去就可以导入到目标电脑了。你可以对比着你自己的电脑的注册表看下,路径是怎么写的就明白了。
csuchen6 2013-10-31
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
目标电脑要安装.net framework 要在目标电脑上运行regasm 或者你可以用regasm /regfile 导出一个注册表文件,导入目标计算机,这样目标计算机不需要额外运行regasm了。
谢谢版主的回答,目标电脑有.net框架,我是想不在目标电脑上运行regasm就能直接打开HTM网页,请问导出注册表文件后,要导入到目标计算机的哪个位置呢?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧