c# - 当 HTML 页面托管在 IIS 上时,ActiveX 控件不起作用

标签 c# javascript html

我已经创建了用于创建 ActiveX 控件的 MS Visual Studio 项目。为此,我执行了提到的步骤 here 。我创建了一个名为 HelloWorld.cs 的类文件,并创建了一个返回“Hello World..”的方法。我执行的步骤是.. 创建新项目 -> 新类 -> 使用 HelloWorld.snk 文件签署项目。在类 File 中,我添加了“ProgId”、“Guid”、“ComVisible”来实现我的逻辑。这是我的代码,即 HelloWorld.cs。

using System;
using System.Runtime.InteropServices;

namespace ActiveXClass
{
    /// <summary>
    /// Demo`enter code here` HelloWorld class
    /// </summary>
    [ProgId("ActiveXClass.HelloWorld")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [Guid("415D09B9-3C9F-43F4-BB5C-C056263EF270")]
    [ComVisible(true)]
    public class HelloWord
    {
        [ComVisible(true)]
        public String SayHello()
        {
            return "Hello World!";
        }
    }
  }

我还在 AssemblyInfo.cs 文件中设置了 [程序集:ComVisible(true)]。 然后我创建了一个示例 HTML 页面,该页面将创建 ActiveX 类的对象,然后调用 SayHello() 方法。 然后我按照以下步骤为上述项​​目创建了 msi。新建项目->其他项目类型->安装和部署->Visual Studio 安装程序->名为Setup1 的安装项目。接下来我通过以下命令注册我的 ActiveX 项目。

regasm /codebase "FULLPATH OF MY ACTIVEX DLL"

来自 cmd 的响应是:“类型注册成功。”然后我在文件系统中创建了示例 HTML 页面,例如“D:\ActiveX\Test.html”。下面是我的示例 HTML 代码。 注意:我还没有创建 .cab 文件。

<!DOCTYPE>
   <html>
   <head>
          <title>ActiveX webpage</title>
   </head>
   <body>

    <OBJECT id="ACtive" classid="clsid:415D09B9-3C9F-43F4-BB5C-C056263EF270">
    </OBJECT>  

    <script type="text/javascript">
        try {
            var obj = document.ACtive;
            if (obj) {
                alert(obj.SayHello());
            } else {
                alert("Object is not created!");
            }
        } catch (ex) {
            alert("Some error happens, error message is: " + ex.Description);
        }

    </script>

我已经通过文件系统(例如D:\ActiveX\Test.HTML)运行此页面,它将成功弹出消息“Hello World..”。但是当我在IIS服务器上添加这个HTML文件时,当我浏览它时,它会返回消息“发生一些错误,错误消息是:未定义”。那么这里出了什么问题..?我还为此创建了 C# 网页。但结果是一样的。 IIS 端或 IE 端是否存在任何配置问题。我已经尝试过很多但都失败了。 另一件事是,当我在本地主机上运行该网页(如 localhost:8080/Test.html)时,它将运行,但当我将其替换为 IP 地址时,它会失败。例如 http://192.168。 1.xx:8080/Test.html 请让我摆脱这个困境。我对 ActiveX 组件非常陌生。 期待解决方案。

任何想法将不胜感激。 请帮忙。 提前致谢。

最佳答案

首先在要运行activex的电脑上注册你的dll,

以管理员模式运行cmd,

输入cd C:\Windows\Microsoft.Net\Framework\<version of your application> .

例如,如果您使用 .net 4,则 C:\Windows\Microsoft.Net\Framework\v4.0.30319进入, 然后输入 regasm <path of your dll>

示例:C:\Windows\Microsoft.Net\Framework\v4.0.30319> regasm d:\myfile.dll进入。 您将收到以 type registered successfully 结尾的消息.如果不是,请检查您的应用程序的版本

然后检查您的 IE 安全性。 转到 Internet Explorer,工具 -> Internet 选项 -> 单击高级选项卡 -> 在安全性下检查前三个选项。然后在“安全”选项卡中单击“受信任的站点”,单击“站点”按钮,然后将您的网址添加到受信任的站点列表中(http://192.168.10.xx/ *) 然后转到自定义级别并找到 Activex 控件和插件,并选中启用除“仅允许批准的域在没有提示的情况下使用 ActiveX”之外的所有内容 然后重新启动IE

关于c# - 当 HTML 页面托管在 IIS 上时,ActiveX 控件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17924008/

相关文章:

jquery - 下一个/上一个按钮工作但不显示

c# - VB.NET 到 C# 的转换——非 EventHandler 事件的接口(interface)事件声明

C# UTF8 解码,返回字节/数字而不是字符串

javascript - 如何并排放置 ReactJS-bootstrap 表单和 h1 标签

javascript - 将 mongodb 中的图像保存为 blob,React

html - polymer 忽略纸卡边距

html - 将表单置于 div 中居中

c# - 如果只使用一次,使用局部函数有什么意义吗?

c# - 选择每个客户的最大日期

javascript - 使用 PEG.js 忽略空格