用C#写Activex控件,发布后通过IIS访问有问题

时间:2021-12-24 21:06:42
如题:我写好了一个Activex控件(参考 http://www.cnblogs.com/yilin/archive/2009/09/15/1567332.html),在本地ie正常运行(D:\web\Try\test.html),但是放到IIS上(通过192.168.0.1/try/test.html)就不行了,显示的是红叉!在局域网其他机器上运行(192.168.0.1/try/test.html)也是一样
奇怪的是使用世界之窗在本地可以正常运行……
各路大虾,有什么解决方案啊……

32 个解决方案

#1


放到 IIS 上? 看那个例子是在浏览器中用的唉.

#2


引用 1 楼 dobzhansky 的回复:
放到 IIS 上? 看那个例子是在浏览器中用的唉.

什么意思啊?

#3


明显的权限问题
要么降低客户端的权限控制
要么去买数字正数

#4


引用 3 楼 ncjcz 的回复:
明显的权限问题
要么降低客户端的权限控制
要么去买数字正数

证书

#5


因为客户端没有安装该activex控件,控件需要在本地安装并注册到注册表中。你需要在html中指定一个url,制定如果本地找不到该到此url处下载该actvex控件。一般该activex控件做成cab安装包。

#6


<object id="DownloadX" width="600" height="400"
        classid="clsid:D1A7314E-03BD-40e0-BA6A-F37AB575FECF"
        codebase="DownloadXPro.cab#Version=1,1,1,0">
...
</object>
看看这个例子,codebase就是指定的安装包,他和你访问的页面在一个路径,他还定义了版本号,如果版本不一致都会重新下载新的安装包到本地

#7


引用 6 楼 xiaoyuzi 的回复:
<object id="DownloadX" width="600" height="400"
        classid="clsid:D1A7314E-03BD-40e0-BA6A-F37AB575FECF"
        codebase="DownloadXPro.cab#Version=1,1,1,0">
...
</object>
看看这个例子,codebase就是指定的安装包,他和你访问的页面在一个路径,他还定义了版本号,如果版本不一致都会重新下载新的安装包到本地

这个是我的啊,客户端会提示安装,但是还是没有用啊,在本地通过192.168.0.246/cin/test.html也不能访问哦
<body bgcolor='#223344'> 
<object id="TestActivex1" 
   codebase="http://192.168.0.246:8888/cin/TestActivex_SetUp.msi"//请问这里应该是msi文件还是dll文件啊
   classid="clsid:9D0DCA49-9F03-4aea-932F-ED13DD6EE9CA" Width="285" Height="200"> 
</object> 
<input type="button" onclick="alert(TestActivex1.GetString());" value="显示当前时间" />
</body> 

#8


引用 3 楼 ncjcz 的回复:
明显的权限问题
要么降低客户端的权限控制
要么去买数字正数

我用makecert,signcode做了个证书,也没有用哦
在本地通过192.168.0.246/cin/test.html也是显示红叉
但本地通过D:\web\Try\test.html显示一切正常……

#9


提示安装是不可避免的,

<object id="TestActivex1" 
  codebase="http://192.168.0.246:8888/cin/TestActivex_SetUp.msi"//

浏览器只能用xxxx.cab !, msi,dll 都不可以
你要把activeX 打包成 cab 包

#11


引用 10 楼 builderc 的回复:
C#开发ActiveX控件及制作CAB包

真是好兄弟啊……
好的……我试试看

#12


其他的机器装framework 了没?还有IIS的执行权限那里,好像必须是纯脚本(又好像是脚本和可执行文件,我也不记得了,你可以试试)。我也做过这样的东西。用起来挺麻烦的。。

#13


红叉是因为本地禁用了


最简单的方法是将IIS的地址加入受信任站点中(受信任站点的关于ActiveX的功能都打开)

#14


引用 13 楼 cuike519 的回复:
红叉是因为本地禁用了
最简单的方法是将IIS的地址加入受信任站点中(受信任站点的关于ActiveX的功能都打开)

对方装了Framework也把我设置为设置了受信任站点了……

#15


mark

#16


up 10#

#17


引用 13 楼 cuike519 的回复:
红叉是因为本地禁用了
最简单的方法是将IIS的地址加入受信任站点中(受信任站点的关于ActiveX的功能都打开)

受信任站点貌似可以了,在其他机器上可以了,呵呵,但是是手动安装的TestAvtiveX,估计是要打包成cab文件
问:这么多GUID,都要用同一个号?
例如:

<object id="ZDTIIRemoting" 
   codebase="192.168.0.246:8888/cin/Remoting/ZDTIIRemoting.dll"//这里一个?
   classid="clsid:8E7EC0DE-F382-4b38-AC07-C81418B80B66" width="402" height="300" align="middle"> 
</object> 

在AssemblyInfo文件中有

// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("57ddc362-9e0b-42e5-a330-7261259defca")]//这里有一个?

在定义安全接口IObjectSafety时

    [ComImport, GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]//这里也有
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IObjectSafety
    {

在写控件Activex时也有

namespace ZDTIIRemoting
{
    [Guid("8E7EC0DE-F382-4b38-AC07-C81418B80B66")]//这里还有
public partial class ZDTIIRemoting: UserControl
{

#18


引用 10 楼 builderc 的回复:
C#开发ActiveX控件及制作CAB包

确实是这个问题,现在可以安装了,但是还有很多小毛病,比如客户端的浏览器不一样对些设置也不一样
即:有的浏览器会提示安装,有的浏览器就直接给安装了,总感觉自己编的有问题,很不爽啊……
还有你知道楼上我说的那些GUID不?

#19


郁闷啊,在其他机器上测试的时候,不设置为信任站点的时候会提示安装,当我手动安装即把安装文件Test.msi拷贝到该机器上时提示要有Framework3.5的环境……怎么办啊?老板说要2.0的环境……真是郁闷,我在写这个控件的时候(VS2008开发)选择的是2.0的环境啊?好郁闷

#20


引用 18 楼 wxxloveu 的回复:
引用 10 楼 builderc 的回复:
 C#开发ActiveX控件及制作CAB包

 确实是这个问题,现在可以安装了,但是还有很多小毛病,比如客户端的浏览器不一样对些设置也不一样
 即:有的浏览器会提示安装,有的浏览器就直接给安装了,总感觉自己编的有问题,很不爽啊……
 还有你知道楼上我说的那些GUID不?


这个不能算是毛病,浏览器的安全性低自然就不提示,浏览器的安全性高就提示!你是无法控制的。你假如控制了微软的IE就没法用了。 你也不用管这方面的问题。 只要能提示安装就可以了。

#21


引用 19 楼 wxxloveu 的回复:
郁闷啊,在其他机器上测试的时候,不设置为信任站点的时候会提示安装,当我手动安装即把安装文件Test.msi拷贝到该机器上时提示要有Framework3.5的环境……怎么办啊?老板说要2.0的环境……真是郁闷,我在写这个控件的时候(VS2008开发)选择的是2.0的环境啊?好郁闷


这个问题比较麻烦了,你如果在你的程序里确切引用了.net 3.5的组件,就得在客户端安装3.5 framework 了。
有传闻说飞信.net的安装包可以参考,我没实际做过。

你应该创建一个2.0的工程,试着进行程序移植,去掉些3.5的固有特性及引用。 重新编译发布

#22


引用 21 楼 builderc 的回复:
引用 19 楼 wxxloveu 的回复:
郁闷啊,在其他机器上测试的时候,不设置为信任站点的时候会提示安装,当我手动安装即把安装文件Test.msi拷贝到该机器上时提示要有Framework3.5的环境……怎么办啊?老板说要2.0的环境……真是郁闷,我在写这个控件的时候(VS2008开发)选择的是2.0的环境啊?好郁闷


这个问题比较麻烦了,你如果在你的程序里确切引用了.net 3.5的组件,就得在客户端安装3.5 framework 了。
有传闻说飞信.net的安装包可以参考,我没实际做过。

你应该创建一个2.0的工程,试着进行程序移植,去掉些3.5的固有特性及引用。 重新编译发布

我是创建的2.0的工程啊,我还特意用2.0重新写了Test,那边还是提示要用3.5的。真个是晕了……

#23


安装工程你选的是2.0?
把你那个install.inf 贴出来看看

#24


引用 23 楼 builderc 的回复:
安装工程你选的是2.0?
把你那个install.inf 贴出来看看


[version] 
signature="$CHICAGO$" 
AdvancedINF=2.0 
  
[Setup Hooks] 
hook1=hook1 
  
[hook1] 
run=msiexec.exe /i "%EXTRACT_DIR%\Test20_SetUp.msi" /qn

#25


你的msi 制作的可能有问题,包含了3.5相关的相关组件或者引用

#26


引用 25 楼 builderc 的回复:
你的msi 制作的可能有问题,包含了3.5相关的相关组件或者引用

搞定了:安装文件右击——视图——启动条件——.net Framework属性 version选择2.0……

#27


引用 25 楼 builderc 的回复:
你的msi 制作的可能有问题,包含了3.5相关的相关组件或者引用

还是不提示安装啊,很郁闷呀

<object id="ZDTIIRemoting" 
   codebase="http://192.168.0.246:8888/cin/Remoting/ZDTII_SetUp.cab"
   classid="clsid:8E7EC0DE-F382-4b38-AC07-C81418B80B66" width="402" height="300" align="middle"> 
</object>

#28


为什么呢?签了名还是这样:在客户端提示安装,点击安装后还是没反应,刷新还是提示安装……

#29


我也遇到了同样的问题~期待解决中

#30


引用 29 楼 frlilei 的回复:
我也遇到了同样的问题~期待解决中

你多注意一下细节就好了,我当时貌似什么小地方出问题了……不记得了,反正问题不大

#31


引用 10 楼 builderc 的回复:
C#开发ActiveX控件及制作CAB包


此篇文章地址已更改:http://blog.bossma.cn/dotnet/csharp-activex-cab/

#32


楼主,我的在客户端可以安装,但是显示的就是红叉,这是怎么回事啊?帮帮我,我已经没辙了。。

#1


放到 IIS 上? 看那个例子是在浏览器中用的唉.

#2


引用 1 楼 dobzhansky 的回复:
放到 IIS 上? 看那个例子是在浏览器中用的唉.

什么意思啊?

#3


明显的权限问题
要么降低客户端的权限控制
要么去买数字正数

#4


引用 3 楼 ncjcz 的回复:
明显的权限问题
要么降低客户端的权限控制
要么去买数字正数

证书

#5


因为客户端没有安装该activex控件,控件需要在本地安装并注册到注册表中。你需要在html中指定一个url,制定如果本地找不到该到此url处下载该actvex控件。一般该activex控件做成cab安装包。

#6


<object id="DownloadX" width="600" height="400"
        classid="clsid:D1A7314E-03BD-40e0-BA6A-F37AB575FECF"
        codebase="DownloadXPro.cab#Version=1,1,1,0">
...
</object>
看看这个例子,codebase就是指定的安装包,他和你访问的页面在一个路径,他还定义了版本号,如果版本不一致都会重新下载新的安装包到本地

#7


引用 6 楼 xiaoyuzi 的回复:
<object id="DownloadX" width="600" height="400"
        classid="clsid:D1A7314E-03BD-40e0-BA6A-F37AB575FECF"
        codebase="DownloadXPro.cab#Version=1,1,1,0">
...
</object>
看看这个例子,codebase就是指定的安装包,他和你访问的页面在一个路径,他还定义了版本号,如果版本不一致都会重新下载新的安装包到本地

这个是我的啊,客户端会提示安装,但是还是没有用啊,在本地通过192.168.0.246/cin/test.html也不能访问哦
<body bgcolor='#223344'> 
<object id="TestActivex1" 
   codebase="http://192.168.0.246:8888/cin/TestActivex_SetUp.msi"//请问这里应该是msi文件还是dll文件啊
   classid="clsid:9D0DCA49-9F03-4aea-932F-ED13DD6EE9CA" Width="285" Height="200"> 
</object> 
<input type="button" onclick="alert(TestActivex1.GetString());" value="显示当前时间" />
</body> 

#8


引用 3 楼 ncjcz 的回复:
明显的权限问题
要么降低客户端的权限控制
要么去买数字正数

我用makecert,signcode做了个证书,也没有用哦
在本地通过192.168.0.246/cin/test.html也是显示红叉
但本地通过D:\web\Try\test.html显示一切正常……

#9


提示安装是不可避免的,

<object id="TestActivex1" 
  codebase="http://192.168.0.246:8888/cin/TestActivex_SetUp.msi"//

浏览器只能用xxxx.cab !, msi,dll 都不可以
你要把activeX 打包成 cab 包

#10


#11


引用 10 楼 builderc 的回复:
C#开发ActiveX控件及制作CAB包

真是好兄弟啊……
好的……我试试看

#12


其他的机器装framework 了没?还有IIS的执行权限那里,好像必须是纯脚本(又好像是脚本和可执行文件,我也不记得了,你可以试试)。我也做过这样的东西。用起来挺麻烦的。。

#13


红叉是因为本地禁用了


最简单的方法是将IIS的地址加入受信任站点中(受信任站点的关于ActiveX的功能都打开)

#14


引用 13 楼 cuike519 的回复:
红叉是因为本地禁用了
最简单的方法是将IIS的地址加入受信任站点中(受信任站点的关于ActiveX的功能都打开)

对方装了Framework也把我设置为设置了受信任站点了……

#15


mark

#16


up 10#

#17


引用 13 楼 cuike519 的回复:
红叉是因为本地禁用了
最简单的方法是将IIS的地址加入受信任站点中(受信任站点的关于ActiveX的功能都打开)

受信任站点貌似可以了,在其他机器上可以了,呵呵,但是是手动安装的TestAvtiveX,估计是要打包成cab文件
问:这么多GUID,都要用同一个号?
例如:

<object id="ZDTIIRemoting" 
   codebase="192.168.0.246:8888/cin/Remoting/ZDTIIRemoting.dll"//这里一个?
   classid="clsid:8E7EC0DE-F382-4b38-AC07-C81418B80B66" width="402" height="300" align="middle"> 
</object> 

在AssemblyInfo文件中有

// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("57ddc362-9e0b-42e5-a330-7261259defca")]//这里有一个?

在定义安全接口IObjectSafety时

    [ComImport, GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]//这里也有
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IObjectSafety
    {

在写控件Activex时也有

namespace ZDTIIRemoting
{
    [Guid("8E7EC0DE-F382-4b38-AC07-C81418B80B66")]//这里还有
public partial class ZDTIIRemoting: UserControl
{

#18


引用 10 楼 builderc 的回复:
C#开发ActiveX控件及制作CAB包

确实是这个问题,现在可以安装了,但是还有很多小毛病,比如客户端的浏览器不一样对些设置也不一样
即:有的浏览器会提示安装,有的浏览器就直接给安装了,总感觉自己编的有问题,很不爽啊……
还有你知道楼上我说的那些GUID不?

#19


郁闷啊,在其他机器上测试的时候,不设置为信任站点的时候会提示安装,当我手动安装即把安装文件Test.msi拷贝到该机器上时提示要有Framework3.5的环境……怎么办啊?老板说要2.0的环境……真是郁闷,我在写这个控件的时候(VS2008开发)选择的是2.0的环境啊?好郁闷

#20


引用 18 楼 wxxloveu 的回复:
引用 10 楼 builderc 的回复:
 C#开发ActiveX控件及制作CAB包

 确实是这个问题,现在可以安装了,但是还有很多小毛病,比如客户端的浏览器不一样对些设置也不一样
 即:有的浏览器会提示安装,有的浏览器就直接给安装了,总感觉自己编的有问题,很不爽啊……
 还有你知道楼上我说的那些GUID不?


这个不能算是毛病,浏览器的安全性低自然就不提示,浏览器的安全性高就提示!你是无法控制的。你假如控制了微软的IE就没法用了。 你也不用管这方面的问题。 只要能提示安装就可以了。

#21


引用 19 楼 wxxloveu 的回复:
郁闷啊,在其他机器上测试的时候,不设置为信任站点的时候会提示安装,当我手动安装即把安装文件Test.msi拷贝到该机器上时提示要有Framework3.5的环境……怎么办啊?老板说要2.0的环境……真是郁闷,我在写这个控件的时候(VS2008开发)选择的是2.0的环境啊?好郁闷


这个问题比较麻烦了,你如果在你的程序里确切引用了.net 3.5的组件,就得在客户端安装3.5 framework 了。
有传闻说飞信.net的安装包可以参考,我没实际做过。

你应该创建一个2.0的工程,试着进行程序移植,去掉些3.5的固有特性及引用。 重新编译发布

#22


引用 21 楼 builderc 的回复:
引用 19 楼 wxxloveu 的回复:
郁闷啊,在其他机器上测试的时候,不设置为信任站点的时候会提示安装,当我手动安装即把安装文件Test.msi拷贝到该机器上时提示要有Framework3.5的环境……怎么办啊?老板说要2.0的环境……真是郁闷,我在写这个控件的时候(VS2008开发)选择的是2.0的环境啊?好郁闷


这个问题比较麻烦了,你如果在你的程序里确切引用了.net 3.5的组件,就得在客户端安装3.5 framework 了。
有传闻说飞信.net的安装包可以参考,我没实际做过。

你应该创建一个2.0的工程,试着进行程序移植,去掉些3.5的固有特性及引用。 重新编译发布

我是创建的2.0的工程啊,我还特意用2.0重新写了Test,那边还是提示要用3.5的。真个是晕了……

#23


安装工程你选的是2.0?
把你那个install.inf 贴出来看看

#24


引用 23 楼 builderc 的回复:
安装工程你选的是2.0?
把你那个install.inf 贴出来看看


[version] 
signature="$CHICAGO$" 
AdvancedINF=2.0 
  
[Setup Hooks] 
hook1=hook1 
  
[hook1] 
run=msiexec.exe /i "%EXTRACT_DIR%\Test20_SetUp.msi" /qn

#25


你的msi 制作的可能有问题,包含了3.5相关的相关组件或者引用

#26


引用 25 楼 builderc 的回复:
你的msi 制作的可能有问题,包含了3.5相关的相关组件或者引用

搞定了:安装文件右击——视图——启动条件——.net Framework属性 version选择2.0……

#27


引用 25 楼 builderc 的回复:
你的msi 制作的可能有问题,包含了3.5相关的相关组件或者引用

还是不提示安装啊,很郁闷呀

<object id="ZDTIIRemoting" 
   codebase="http://192.168.0.246:8888/cin/Remoting/ZDTII_SetUp.cab"
   classid="clsid:8E7EC0DE-F382-4b38-AC07-C81418B80B66" width="402" height="300" align="middle"> 
</object>

#28


为什么呢?签了名还是这样:在客户端提示安装,点击安装后还是没反应,刷新还是提示安装……

#29


我也遇到了同样的问题~期待解决中

#30


引用 29 楼 frlilei 的回复:
我也遇到了同样的问题~期待解决中

你多注意一下细节就好了,我当时貌似什么小地方出问题了……不记得了,反正问题不大

#31


引用 10 楼 builderc 的回复:
C#开发ActiveX控件及制作CAB包


此篇文章地址已更改:http://blog.bossma.cn/dotnet/csharp-activex-cab/

#32


楼主,我的在客户端可以安装,但是显示的就是红叉,这是怎么回事啊?帮帮我,我已经没辙了。。