首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 怎么实现手动注册COM

2013-11-01 
C# 如何实现手动注册COM?我在Lib类库里做了简单一个控件,实现了与HTML页面的交互,在本机上可以运行。我已经

C# 如何实现手动注册COM?
我在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的请求,求大神帮忙了 控件 库 COM?????手动注册
[解决办法]
目标电脑要安装.net framework
要在目标电脑上运行regasm
或者你可以用regasm /regfile 导出一个注册表文件,导入目标计算机,这样目标计算机不需要额外运行regasm了。
[解决办法]
导出注册表文件后,应该是注册这个dll文件的所有信息都包括了,除了CodeBase,再编辑这个.reg文件把CodeBase写进去就可以导入到目标电脑了。你可以对比着你自己的电脑的注册表看下,路径是怎么写的就明白了。
[解决办法]
导出注册表相关项,然后写个bat导入。
你的winform程序检查下注册表有没有相关注册项,没有就调用下bat。
简单明了。
[解决办法]
引用:
Quote: 引用:

目标电脑要安装.net framework
要在目标电脑上运行regasm
或者你可以用regasm /regfile 导出一个注册表文件,导入目标计算机,这样目标计算机不需要额外运行regasm了。


谢谢版主的回答,目标电脑有.net框架,我是想不在目标电脑上运行regasm就能直接打开HTM网页,请问导出注册表文件后,要导入到目标计算机的哪个位置呢?


注册表文件包含导入到什么位置(键和值),你只要导入就可以了。

热点排行