我用c#开发了一个水印控件,实际文件是  abc.dll ,我不用打包方式,而是直接用 regasm 注册 abc.dll ,不管是在本机,或者其它电脑,都使用管理员权限进行注册,提示也注册成功了,但在打开网页时,开发 .net 控件的本机,可以成功调用 abc.dll 中签名的方法,但在其它电脑中,都不能成功调用,提示”错误名称:TypeError;错误信息:对象不支持"saveFolderDialog"属性或方法。“,但如果在其它电脑上也安装visual studio ,然后对这个控件也进行一下编译,那么,这一台电脑也会可以成功调用方法。
声明:我已经把网站添加到信任,并且也在 IIS 下全部开放了activex的调用权限。其它第三方的ocx也是正常可以调用的。简要的说,就是在其它电脑上要使用这个控件,一定要安装visual studio,然后对这个控件进行编译才可以使用。请问有什么解决方法?

解决方案 »

  1.   

    别的电脑上起码要安装.net framework(不需要安装vs),将dll拷贝过去,也要用egasm 注册 abc.dll,如果有别的依赖项,也要安装上去。
      

  2.   

    没什么”解决办法“,因为你选择的就是那种基础的方式。每一个用户需要手动去配置 ie 浏览器(而且不支持 ie10 以及以上版本,包括 edge),并且需要手动注册组件。并且这种 COM 众所周知(众所周知的 COM DLL Hell 问题)经常用着用着就在也用不了、也卸载不干净了,必须重新安装操作系统才能再用。
      

  3.   

    面对 web 平台开发应用程序,现在的标准,应该是面对 html5 跨平台开发。而不是专注于 ie8 和15年前的”技术“。
      

  4.   

    我上面已经说明了,别的电脑也已经用 regasm 注册过,并且是成功了的,如果没有安装 .net 环境,regasm 命令是根本不能用的。而且 saveFolderDialog 对象,其实只是打开本地的目录选择窗口,应该还没有需要用到其它 dll 的时候。至于是不是老的技术,不在这里讨论,要是老的技术都淘汰,全国90%以上的政府信息化系统全部可以瘫痪了,所以还是本着解决问题的思路来讨论这个问题。
      

  5.   

    我写的更详细一点:
    我在测试中,使用下面的语句时,是所有电脑打开网页都可以实现打开对话框的
            var Message = "\u8bf7\u9009\u62e9\u6587\u4ef6\u5939"; //选择框提示信息
            var Shell = new ActiveXObject("Shell.Application");
            var Folder = Shell.BrowseForFolder(0, Message, 64, 17); //起始目录为:我的电脑但我在 dll 中写了下面的方法时,该 dll 能在编译dll本机用 obj.openFolderDialog()  打开目录窗口,在其它电脑即使注册成功,也不通用 obj.openFolderDialog() 打开目录窗口。
            public void openFolderDialog()
            {
                FolderBrowserDialog fbd = new FolderBrowserDialog();
                fbd.ShowNewFolderButton = false;
                fbd.SelectedPath = "C:\\";
                if (fbd.ShowDialog() == DialogResult.OK)
                {
                    if (Directory.Exists(fbd.SelectedPath))
                    {
                        root = fbd.SelectedPath;
                    }
                }
            }
      

  6.   

    但是,如果我在其它电脑上,也用源代码重新编译一下dll,那么这个 obj.openFolderDialog()  也可以打开目录了。