zoukankan      html  css  js  c++  java
  • 绕过传统activex 在页面使用方法,使用c#写的activex控件

      需求一开始是在页面中嵌入用c#写的rldc编辑器,参照传统activex思路,还看了微软一站式编程中的例子,均告失败。
      后经反复研究。找出了问题所在,成功把编辑器弄进了web页面。在ie6,7,8中均通过。客服端安装activex相应的framework。
      其实通过这种方法,在web中, 可以任意使用.net写的dll.
     
     主要问题
     1, IE 加载DLL(英文关键字,ie host)
         由于IE安全限制,可能导致客服端不能从服务器端把dll下载,并加载进IE。
         解决方法,把站点加入信任站点。
     2,DLL本地运行安全限制
         托管dll并没有在本地注册,所以可能会遇到权限不够,而不能运行的问题。
          解决方法,一个是不管那么多,修改.net framework的信任级别。
          二强名称签名,然后根据签名设置权限。
          三根据dll所在目录路径设置权限
        本文所用方法是第一种,修改.net framework的信任级别。
        若是要研究第二和第三种方法请Google : caspol -chggroup 1.5 FullTrust
         还有这些链接可能对你有帮助
         http://thebackroomtech.com/2009/04/01/using-caspolexe-to-grant-net-applications-rights-to-a-remote-network-share/
         http://support.microsoft.com/kb/313892/en-us
    应用举例
     步骤:
       一,应用页面配置:

        1,嵌入页面
            <div id="designContainer" runat="server" style="display: none; 100%; height: 100%">
            <object id="reportDesigner" name="reportDesigner" classid="http:ReportDesign.dll#fyiReporting.ReportDesign.ReportDesignCtrl"
                width="100%" height="100%">
                <param name="UserNo" id="UserNo" value="<%=UserNo%>" />
                <param name="WebServiceURL" id="WebServiceURL" value="<%=xriskHost%>/WebService/ReportWebService.asmx" />
            </object>
        </div>
        2,检测用户是否已安装.net framework。
         $(document).ready(function() {
                if (navigator.userAgent.indexOf(".NET CLR") > -1) {
                   
                } else {
                    alert("因客户端未安装.net运行时");
                }
            });

            //试图从js调用dll,注意有个延时,以防第一次加载需要时间比较长。
     function getObj() {
                var obj = $("#reportDesigner").get(0);
                tryCount += 1;
                if (obj && obj.LoadFlag == "1") {
                    $("#designContainer").show();
                    loadingPanel.Hide();

                    if (reportCode) {
                        obj.EditReport(reportCode, reportName);
                    } else {
                        obj.CreateReport();
                    }
                } else {
                    if (tryCount < 10) {
                        window.setTimeout("getObj()", interval);
                    } else {
                        alert("加载报告设计器失败!请下载执行初始脚本!");
                        $("#designContainer").hide();
                        $("#downloadContainer").show();
                        loadingPanel.Hide();
                    }
                }
            }


      二,下载dat处理文件并执行
       文件内容,注意//后面是我加的注释,具体运行时需要去掉,里面的ip地址可以替换成自己的站点地址
         @ECHO OFF
    add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range1000"
    reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range1000" /v http /t REG_DWORD /d 0x00000002 /f
    //添加信任站点
    reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range1000" /v :Range /t REG_SZ /d 191.168.0.54 /f
    //允许该站点弹出窗口
    reg add "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\New Windows\Allow" /v 191.168.0.54 /t REG_SZ /d 0 /f
    //设置信任级别
    cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
    caspol -chggroup 1.5 FullTrust
    //第一次访问站点,关掉当前窗口,并重新打开窗口
    taskkill /f /im iexplore.exe
    start iexplore http://191.168.0.54:80/xx/login.aspx

     三,让dat脚本能被客服端浏览器访问还要做些手脚
        1,IIS-文件夹-属性-http头-MIME类型添加:batapplication/batch

        2,访问bat文件所在目录,将文件安全性中加入IE匿名访问帐户。这个账户即是iis中那个匿名账户,或者说是asp.net运行时的模拟账户。
       
    PS:
      从bat脚本来看,很明显这段代码是可以通过递送web地址来拼凑的,目前我们是在登录页面里,解析出站点url,
      然后写一份bat到服务器,在登录页面给出固定链接,这样部署起来,工程人员不用随站点地址变化而修改bat文件。
     

  • 相关阅读:
    CnForums1.0 Alpha 开始试运行
    asp.net Forums2.0修改密码后无法登陆问题——都是Cache惹的祸
    CnForums1.0 Alpha RC1 发布
    Docker: Nvidia Driver, Nvidia Docker 推荐安装步骤
    Docker: docker pull, wget, curl, git clone 等如何更快?
    DL4J实战之三:经典卷积实例(LeNet5)
    纯净Ubuntu16安装CUDA(9.1)和cuDNN
    DL4J实战之四:经典卷积实例(GPU版本)
    JAVA 中静态块、静态变量加载顺序详解
    设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/wusong/p/1735677.html
Copyright © 2011-2022 走看看