我有一个旧的 Windows 窗体应用程序,我希望像 Web 应用程序一样显示内部用户的浏览器 (IE8)。我一直在研究的一种方法是创建一个 Windows 窗体库 (dll) 并在浏览器中显示它。有很多网页告诉我如何做到这一点:
- http://msdn.microsoft.com/en-us/library/a7as3z1d(v=vs.90).aspx
- http://forums.asp.net/t/1598007.aspx/1
- http://windowsclient.net/articles/iesourcing.aspx
- http://www.4guysfromrolla.com/articles/052604-1.aspx
- http://www.codeguru.com/csharp/.net/net_general/internet/article.php/c19639/Hosting-NET-Windows-Forms-Controls-in-IE.htm
- http://weblogs.asp.net/spano/archive/2007/09/19/hosting-a-windows-form-control-in-a-web-page.aspx
- http://codebetter.com/petervanooijen/2007/06/18/includes-a-winforms-user-control-in-an-asp-net-web-page/
但我无法让它工作。我制作了一个简单的 Windows 控件库,并构建了 DLL。我把它放在一个 IIS 7.5 站点的顶级目录中,还有一个像这样的 html 文件:
<html>
<body>
<object id='c' classid='http:TestWinCtrlLib.dll#TestWinCtrlLib.UserControl1' height='300' width='400'>
</object>
</body>
</html>
我的浏览器显示一个 300x400 的框,左上角有一个小的“图片”图标。起初,IIS 拒绝提供 .dll 文件,给出 403.2 和 401.2 错误,但现在我已经正确设置了 IIS 权限属性,日志表明它已成功提供。
2012-05-01 01:28:50 ::1 GET /form.html - 8008 - ::1 Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+6.1;+WOW64;+Trident/4.0;+SLCC2;+.NET+CLR+2.0.50727;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30729;+.NET4.0C;+.NET4.0E) 200 0 0 1
2012-05-01 01:28:50 ::1 GET /TestWinCtrlLib.dll - 8008 - ::1 Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+6.1;+WOW64;+Trident/4.0;+SLCC2;+.NET+CLR+2.0.50727;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30729;+.NET4.0C;+.NET4.0E) 200 0 0 23
我什至不知道出了什么问题。上面的第一个链接有一个关于错误报告的部分,我已将这些键添加到注册表中,但我没有看到任何错误。我尝试从 cmd 提示符启动 iexplore,以防错误可能出现在标准输出上,但什么也没有。
错误报告
代码下载过程使用以下两个注册表设置来控制来自使用 Internet Explorer 部署的托管代码可执行文件的错误报告。
- HKLM\Software\Microsoft.NETFramework\ExposeExceptionsInCOM
- HKCU\Software\Microsoft.NETFramework\ExposeExceptionsInCOM
...
调试使用 Internet Explorer 部署的托管代码时,可以使用这些设置的值来查找有关代码下载失败的详细信息。例如,这允许您在抛出异常时查看堆栈跟踪信息,而不是依赖于 Internet Explorer 提供的错误报告,它是为最终用户而不是开发人员设计的。
是否可能不再支持此功能?我发现的大多数参考资料似乎都是 2007-2010 年。也许ClickOnce是现在唯一的方法。我可以让它工作,但代码在它自己的窗口中运行,而不是在浏览器内。
我尝试使用 .Net frameworks 3.5 Client Profile 和 4.0 Client Profile 编译库。但他们似乎给出了相同的结果。
欢迎任何帮助 - 谢谢。