我已经创建了用于创建 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/