[地图SkyLine二次开发]关于IE内存限制问题(1G)......(续)

二次开发Skyline时(B/S),经常会遇到,IE浏览器内存不够,导致崩溃的问题。

在上一个博文中写到,将IE-32bit浏览器内存限制扩展的解决办法。

上一个博文中做出来的iexplore.exe的基础上,将Skyline的安装包,以及适应浏览器版本的程序,打包成一个安装包。

在客户第一次登陆本系统时,让客户只需安装一次就OK。

一.准备工作:

1.下载.NetFrameWork4.5

2.将IE各个版本,按上一个博文中的方法,对应每一个版本,都做出来iexplore.exe

3.做适应IE版本的程序

1).创建一个winform程序起名IE_Ver

2).在相同的解决方案下,再创建一个winform程序起名IE_Start

-两个程序创建结果如下图

3).IE_Ver程序中的代码

-该程序负责从注册表中,取出IE版本,将版本信息添加到xml文件中

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;

namespace IE_Ver
{
    public partial class Form1 : Form
    {
        string IEVersion;
        string ie;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Hide();
            this.ShowInTaskbar = false;
            Judge();
            Application.Exit();
        }

        /// <summary>
        /// 判断IE版本,并且将结果放入IEVervsion.xml中。。。
        /// </summary>
        public void Judge()
        {
            //获取IE版本
            RegistryKey mreg;
            mreg = Registry.LocalMachine;
            mreg = mreg.CreateSubKey("software\\Microsoft\\Internet Explorer");
            IEVersion = "当前IE浏览器的版本信息:" + (String)mreg.GetValue("Version");
            string[] ArrIEVersion = IEVersion.Split(‘.‘);
            string[] IeV = ArrIEVersion[0].Split(‘:‘);
            ie = IeV[1];   //ie=IE版本
            mreg.Close();

            //创建XML对象
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes");
            XmlNode rootNode = xmlDoc.CreateElement("ServerIni");
            XmlNode rootIEVersion = xmlDoc.CreateElement("IEVersion");

            XmlNode rootServerIP = xmlDoc.CreateElement("ServerIP");
            rootServerIP.InnerText = "http://www.baidu.com"; //打开IE时默认的服务器IP

            XmlNode verNode = xmlDoc.CreateElement("VersionNo");
            verNode.InnerText = ie;

            rootIEVersion.AppendChild(verNode);
            rootNode.AppendChild(rootIEVersion);
            rootNode.AppendChild(rootServerIP);
            xmlDoc.AppendChild(rootNode);
            xmlDoc.Save(@"IEVersion.xml"); //保存为XML文件
        }
    }
}

-程序编译后,查看运行结果

4).IE_Start中的代码

-该程序负责从IE_Ver中生成出来的xml中读取版本信息,将对应的iexplore.exe打开

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;

namespace IE_Start
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Hide();
            this.ShowInTaskbar = false;

            showIE();
            Application.Exit();
        }

        private void showIE() {
            XmlTextReader reader = new XmlTextReader(Application.StartupPath + "\\" + "IEVersion.xml");
            string version_no = "";
            string server_IP = "";
            while (reader.Read())//逐个读取
            {
                if (reader.NodeType == XmlNodeType.Element && reader.LocalName == "VersionNo")//判断为元素节点并且节点名为name
                {
                    version_no = reader.ReadString();//读出值
                }
                else if (reader.NodeType == XmlNodeType.Element && reader.LocalName == "ServerIP")
                {
                    server_IP = reader.ReadString();
                }

            }
            try
            {   //尝试启动默认浏览器
                System.Diagnostics.Process.Start(Application.StartupPath + "\\IE" + version_no + "\\iexplore.exe", server_IP);
            }
            catch
            {   //如果启动不成功,启动IE
            }
            while (reader.Read())
            {
                Console.WriteLine(reader.Name);
            }
        }
    }
}

-编译后,将准备好的各个IE版本对应的iexplore.exe文件拷入Debug文件夹中测试

注:该程序运行需要IE版本对应的iexplore.exe和IEVersion.xml文件

-运行IE_Start.exe结果,在已经被扩展的IE中,打开了http://www.baidu.com

-这里可以将生成出来的.exe文件图标更换一下,方法是点击项目右键->属性,修改红框中的文件

4.将上面做好的程序(IE_Ver.exe , IE_Start.exe),Skyline安装包 ,IE各个版本对应的iexplore.exe文件拷到一个文件夹中,准备打包

二.开始打包

1.下载Setup Factory 7.0并安装

2.创建新工程

3.添加文件

-找到【准备工作】中,准备好的文件目录

-添加完成

4.判断.NetFramework4.5有没有安装,如果没安装进行安装

-点击资源里的【原始文件】

-点击【添加】

-将.NetFramework4.5安装包指定

-点击【确定】,添加成功

-点击操作里的【启动时】

-将下面一段代码拷入On Startup

result = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\.NETFramework\\policy\\v4.0");
if (result == false) then
result = File.Run(SessionVar.Expand("%TempLaunchFolder%\\Microsoft.NET.exe"), "", "", SW_SHOWNORMAL, true);
end

-点击确定,添加成功

5.将做好的程序打包

-点击【安装之后】

-点击【编辑】

-【操作】tab->【On Next】->【添加操作】

-File->Run

-点击下一步,在红框中选择IE_Ver.exe

-点击完成,同样的方法将Skyline的 setup.exe添加....

-添加后的结果

-点击【确定】,添加完成

6.桌面快捷方式的选择

-点击IE_Start.exe右键-文件属性

-快捷方式中的,桌面&开始菜单>应用程序文件夹(A)打钩,然后将快捷方式的名字填写

-点击确定

7.打包

-点击【构建】

-点击【构建】

-打包完成

8.安装成功后桌面将多出来一个快捷方式,如下图

-该程序为,我们通过判断客户端IE版本打包出来的一个,扩展了内存的IE快捷方式

-现在用户可以直接点击【三维地理信息系统】快捷方式,进入我们的系统啦

时间: 2024-08-02 00:32:21

[地图SkyLine二次开发]关于IE内存限制问题(1G)......(续)的相关文章

[地图SkyLine二次开发]关于IE内存限制问题(1G)

相信很多人也遇到过同样的问题,地图加载中,IE占用的内存一直增加,到了1G多一些的时候,IE就崩溃了. 在网上查阅了一番,有很多结果,下面归纳一下: a).64bit的IE最多可达到4G的内存,但Skyline6.5只支持IE-32bit,据说6.6会支持Google,Fireforx,IE-64bit等浏览器,但目前解决不了问题,pass掉 b).360.捷豹等国内开发且使用IE-32bit内核的,据说对内存问题有所改善,测试了一下,结果还算令人满意,但项目要求支持IE浏览器,So Pass掉

[地图SkyLine二次开发]框架(2)

上节讲到,地图加载. 但我们可以发现,当没有页面布局的情况下,<OBJECT>控件,没有占满整个屏幕,这里我们就要用到Extjs的功能了. 这节要讲的是用Extjs为<OBJECT>控件布局,让它适应任何版本的IE浏览器(因为SkyLine目前只支持IE). 1.将Extjs包引进项目. -这里需要注意,网上下载的Extjs5.0包里,包含有很多例子之类的,为了保证项目尽可能的干净,我们只去一小部分. 2.在项目中应用 -我们在上一节,将OBJECT空间直接写在Index.csht

[地图SkyLine二次开发]框架(3)

上节将显示我们地图的OBJECT控件,布了一下局,但地图没有进行加载. 这是因为我们要在另一个页面,对OBJECT控件进行地图加载,并且得到该控件的sgworld,以便对其进行我们想要的开发. 这里,细心的人会说,为什么要在另一个页面加载呢?为什么不在OBJECT所在页面进行加载呢? 这也是一个比较关键性的问题,原因很简单, 因为Object控件上,放置任何DIV,SPAN,或者其他控件时,都会被Object控件覆盖在下面. 在网上找了很多办法,最有效的,而且项目中常用到的就是IFRAME方法.

[地图SkyLine二次开发]框架(4)

继续上一节... 1.Extjs5.0版Menu. -将Extjs包引入MenuPage.html页. 2.前段用Extjs的MVC框架 -在根目录下创建app文件夹,文件夹下分别创建controller,model,store,view文件夹 -根目录下创建app.js文件 -view文件夹下创建MainLayout.js文件 -controller文件夹下创建MainController.js文件 3.菜单页面布局 -MainLayout.js代码 Ext.define('ZZH.view.

[地图SkyLine二次开发]框架(5)完结篇

上节讲到,将菜单悬浮到地图上面,而且任何操作都不会让地图把菜单盖住. 这节带大家,具体开发一个简单的功能,来了进一步了解,这个框架. 1.想菜单中添加按钮 -上节定义的mainLayout.js文件里,定义按钮,并实例化它. -将按钮添加到,ZZH.view.MainLayout中. -运行看一下效果. 2.按钮加事件 -app/control文件夹里创建MainController.js里加上如下代码 -运行,并点击按钮测试,就是如下效果. 3.开发一个,画直线的功能. -在MainContr

【0002(基础)】Skyline二次开发入门经典系列教程&mdash;&mdash;目录

这段时间由于个人事务太多,以至于没有按照时间更新系列教程,本人将尽快补上所欠章节,在此说声抱歉!   这一章在我心目中占有很重要的地位,因为我想通过这一章的内容来确定整个系列的大致走向.然而在整理的过程中,发现现实远比想象要复杂得多:首先想尽可能介绍较多的知识点,其次又要考虑学习的简易程度,再次又要确定顺当的知识体系流程-- 由于暂时的考虑无论如何也是不可能完备的,因此为了不影响后面教程的编写,暂定把这一章作为一个[流动性质]的可变章节,在编写每一章时,动态根据实际情况修改(添加.移动.修改)系

【0001(基础)】Skyline二次开发入门经典系列教程总览

本人是从2012年开始接触Skyline二次开发的,经历过 v6.0~v6.5(最新的6.6版本还未使用)的所有版本.作为一名非GIS专业毕业的大学本科生,鬼使神差般地进入了这个瑰丽的GIS领域.因此,在从事了4年多的Skyline二次开发工作后,我不能说我是"授业有专攻",更不能说我是"闻道有先后".在这个领域内,大牛之人比比皆是,正是因为他们的存在与指引,才使得我现在有点东西可以写出来供大家交流沟通.   整理这个系列教程的原因主要出于如下几点的考虑: 1.Sk

百度地图API二次开发小经验分享

最近在做一个物流后台系统,需要用地图来把订单地址展示出来,需要在地图上批量框选坐标进行排单,需要看到配送员的实时位置等等功能. 在高德地图.腾讯地图.百度地图三者间,我选了百度地图,没有原因,个人偏好,因此我也不知道高德地图和腾讯地图好不好用.反正到目前为止,我所想到的功能,百度都有对应的接口提供,点个赞. 一.关于百度地图的JavaScript API 在网站上通过js直接来调用百度的api,使用方法很简单,可以参考官网:http://developer.baidu.com/map/index

Skyline(6.x)-二次开发手册使用技巧

毕业设计选择Skyline的Web端二次开发,由于以前没有接触过ActiveX控件的使用,二次开发手册是英文的读起来有点吃力,并且IE直接控制台输出ActiveX控件创建的对象看不到内部的属性和方法,使得整个毕设快做完了才感觉弄明了Skyline二次开发的套路. 手册存放位置 默认安装是:C:\Program Files (x86)\Skyline\TerraExplorer Pro\Help\ProgrammersGuide.chm 查看ActiveX控件创建的对象看的属性和方法 使用Obje