请问用C#写了COM组件,怎么在没有VS的机器上面注册呢?
我建立了一个 C# 类库的工程并在属性里面勾选了“注册为COM组件”,编写了如下的代码。
- C# code
[Guid("F927F24C-6A4B-463F-80EA-5082FFA1B440")] [ComVisible(true)] [ClassInterface(ClassInterfaceType.None)] [ComSourceInterfaces(typeof(IZLActiveXEvent))] public class ZLActiveX : IZLActiveX { public int Synchron(string path) { try { MessageBox.Show("Hit"); } return 0; } catch (Exception e) { MessageBox.Show(e.ToString()); return -1; } } } [Guid("E7525AFD-D231-4F64-98DA-0000F55C2173")] [ComVisible(true)] public interface IZLActiveX { [DispId(0x00000002)] int Synchron(string path); } [Guid("59D5AD91-7D85-48BB-8199-0F29025A7A9D")] [ComVisible(true)] [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface IZLActiveXEvent { }
同时在网页上面利用下面的JS代码调用这个COM组件。
- JScript code
<object name="ZLActiveX" id="ZLActiveX" classid="clsid:F927F24C-6A4B-463F-80EA-5082FFA1B440"></object><script language="javascript" type="text/javascript"> function buttonSynchron_Click() { ZLActiveX.Synchron(""); }</script>
当我点击下面的按钮时,调用JS来调用C#编写的COM组件。
- HTML code
<input type="button" name="buttonSynchron" id="buttonSynchron" value="Synchron" onclick="buttonSynchron_Click();"/>
在主机上编写完成并编译成功了,在页面上面可以正确地运行。网页可以正确地调用COM组件。
但我把这个网页和COM组件对应的DLL文件考到另外一台没有装VS的电脑上(此电脑已经装了对应的.Net Frameworks了),用RegAsm.exe这个程序进行注册,显示注册成功了,但网页上无法调用COM组件。
显示的错误如下。
是网页中JS的这一句,找不到对应的函数或者方法。
ZLActiveX.Synchron("")
请问这如何是好,请指点。
[解决办法]
使用 regsvr32 注册
[解决办法]
string ddVueOcxFile = string.Format("{0}\\Data\\ddVue.ocx", Application.StartupPath);
if (!File.Exists(ddVueOcxFile))
{
MessageBox.Show("ddVue.ocx被非法移动!");
return false;
}
string regsvr32Para = "\"" + ddVueOcxFile + "\"";
System.Diagnostics.Process p = System.Diagnostics.Process.Start("regsvr32", regsvr32Para + " /s");
if (p != null && p.HasExited)
{
Int32 exitCode = p.ExitCode;
if (exitCode == 0)
{//注册成功
return true;
}
}
[解决办法]
Q:请问用C#写了COM组件,怎么在没有VS的机器上面注册呢?
A:装.net
[解决办法]
regsvr32好象不可以。
.net开发的com好象是一个特殊命令。好象是这个 REGSAM msdn上有详细说明。