日期:2014-05-17  浏览次数:21023 次

如何在VS2010的C#环境下实现基于ActiveX的B/S构架的helloworld?
声明:刚刚接触ActiveX和VS2010的小白。

目的:客户端(Win7版PC)访问服务器端(ARM平台开发板搭载boa网页服务器)的主页,页面上出现helloworld字符,使用ActiveX方法实现。

问题描述:
按照网上攻略,使用VS2010下的C#环境写了个简单的helloworld程序,生成的文件是dll,本地运行成功。已经成功的流程:
    1、使用VS2010下的C#环境创建了类库项目helloworld;
    2、删除自动生成的cs,新建用户控件Demo.cs,拖拉一个label在上面,取名helloworld;
    3、项目属性中勾选“使程序集COM可见”、“为Com互操作注册”;
    4、生成解决方案;
    5、使用OLE/COM对象查看器工具,找到类库CLSID并复制;
    6、在项目的Debug目录下新建helloworld.html,源码如下:
    <body>
    <object id="helloworld" classid="clsid:7004C725-9039-3FD7-9E55-9399F64072CE" Width="500" Height="500" >
    </object>
    </body>
    7、删除网页代码classid后面双引号里原来的内容,将第5步拷贝的CLSID粘贴到该处;
    8、项目属性中选择“启动外部程序”,然后填入IE浏览器和网页的绝对路径;
    9、F5运行,弹出IE界面,提示不安全之类的警告,无视,确认后,页面出现helloworld字符。

备注:此时VS2010项目中我没有写过任何代码,全是自动生成的,比较顺利,后面开始出现各种问题。

    10、新添加安装项目setup到原有项目中,设置属性为vsdrpCOM,生成setup.exe和setup.msi两个文件,我不知道两个文件有什么区别,就全部拷贝到服务器的根目录下;
    11、修改helloworld.html文件,增加codebase="setup.exe"代码,然后将该网页文件也放入服务期根目录下,运行IE浏览器,输入服务器地址,直接出现一个打红叉的界面,没有下载控件的提示;
    12、后面就悲催了,没有方向,就参考很多帖子不停的在项目中增删代码,如加入IObjectSafety、DllRegisterServer之类的内容,最后还是没有成功,最多就到页面提示下载控件并安装,安装完成后页面还是叉(控制面板中的程序和功能中可以找到安装的setup),刷新页面后还是提示下载控件并安装。

我想请问大虾们:
    1、Guid到底起什么作用,看到网上攻略里,一个项目中好多文件里都有,而且值都不一样;(我的代码里一开始只有AssemblyInfo.cs中有);
    2、如果不考虑安全性和易用性,最最简单的方法如何本地正确访问服务器页面,就是本地浏览器一开始弹出下载控件界面,点击确定后下载控件,然后一步步安装,安装完成后,页面就可以显示helloworld了的这套流程中,需要在VS2010项目中增加哪些必须的代码,网页文件又需要做哪些必要的修改;
    3、控件注册之类的问题我这种需求会碰到么?

说了这么多,大虾们也看了这么多,就劳烦动动手指指点一下迷津吧!


------解决方案--------------------
每个GUID标识一个唯一的dll库、接口、类、对象
这样可以避免因为两个厂商发布的dll文件名、库名、对象名一样照成的冲突问题。

如果你用C#写控件,不但客户端要注册,还要安装.net框架。建议用clickonce分发程序
------解决方案--------------------
最简单的方法,去掉codebase标签,用链接引导用户下载控件安装包,手动安装注册后刷新页面。