• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      自動(dòng)升級(jí)程序在船舶監(jiān)測(cè)系統(tǒng)中的應(yīng)用

      2021-12-29 03:55:36時(shí)榕茂
      現(xiàn)代計(jì)算機(jī) 2021年31期
      關(guān)鍵詞:版本號(hào)主程序服務(wù)端

      時(shí)榕茂

      (上海船舶運(yùn)輸科學(xué)研究所,上海 200120)

      0 引言

      船舶監(jiān)測(cè)系統(tǒng)主要用于對(duì)全船各機(jī)電設(shè)備實(shí)現(xiàn)各種重要參數(shù)的測(cè)量和超限報(bào)警等,同時(shí)具有對(duì)各種重要設(shè)備進(jìn)行遠(yuǎn)程集中控制、區(qū)域監(jiān)控,對(duì)空壓冷水機(jī)等進(jìn)行健康管理及數(shù)據(jù)采集處理等功能,是一個(gè)控制測(cè)量、安全保護(hù)以及管理一體化的系統(tǒng),主要安裝在集控臺(tái)。在實(shí)際生產(chǎn)運(yùn)行過程中由于計(jì)算機(jī)臺(tái)數(shù)比較多且比較分散,當(dāng)系統(tǒng)需要升級(jí)時(shí),需要船上工作人員花費(fèi)大量的時(shí)間在不同的地點(diǎn)、不同的計(jì)算機(jī)設(shè)備上進(jìn)行逐個(gè)手工升級(jí)操作,這大大降低了工作效率。

      隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,對(duì)于軟件系統(tǒng)交付給客戶之后的維護(hù)升級(jí)工作,也是一項(xiàng)非常重要的環(huán)節(jié),功能需求的變化或提升往往需要對(duì)系統(tǒng)進(jìn)行升級(jí)維護(hù)。當(dāng)前船舶監(jiān)測(cè)系統(tǒng)主要采用C/S架構(gòu),隨著軟件的推廣和用戶的增多,此架構(gòu)的軟件系統(tǒng)升級(jí)維護(hù)工作一直是困擾工作人員的主要難點(diǎn)。以往的升級(jí)維護(hù)操作手段通常采用人工手動(dòng)升級(jí),由工作人員將需要更新的文件放入移動(dòng)硬盤中,通過手工復(fù)制到運(yùn)行文件夾中進(jìn)行升級(jí)操作。由于電腦比較分散,工作人員需要對(duì)多臺(tái)電腦在不同地點(diǎn)進(jìn)行重復(fù)安裝。這種操作方法,在實(shí)際應(yīng)用中不僅需要耗費(fèi)大量的精力和時(shí)間,而且容易造成在升級(jí)過程中的一些操作不當(dāng)引起的功能不全或其他錯(cuò)誤,對(duì)客戶的使用安全造成不利的影響,存在安全隱患。

      軟件維護(hù)是軟件整個(gè)生命周期的不可或缺的重要環(huán)節(jié)[1]?;趥鹘y(tǒng)的人工手動(dòng)升級(jí)操作方式的自動(dòng)化效率太低,為了改善應(yīng)用軟件的可靠性和可適應(yīng)性,實(shí)現(xiàn)軟件系統(tǒng)的自動(dòng)升級(jí)就顯得尤為必要。為解決此問題在實(shí)際生產(chǎn)中帶來的困擾,本文主要闡述實(shí)現(xiàn)船舶監(jiān)測(cè)系統(tǒng)的自動(dòng)更新方法和實(shí)現(xiàn)過程,并在實(shí)際生產(chǎn)中取得了非常好的使用效果。

      1 軟件自動(dòng)升級(jí)系統(tǒng)的實(shí)現(xiàn)原理

      軟件自動(dòng)升級(jí)的原理,主要涉及兩個(gè)程序,一個(gè)是主程序(即船舶監(jiān)測(cè)系統(tǒng),簡稱F22P.exe),一個(gè)是升級(jí)程序(主要用于軟件自動(dòng)升級(jí),簡稱update.exe)。所有的版本更新升級(jí)均由升級(jí)程序完成。首先計(jì)算機(jī)開機(jī)后,升級(jí)程序自動(dòng)啟動(dòng),升級(jí)程序啟動(dòng)后通過協(xié)議讀取服務(wù)器中update.xml配置文件中的版本號(hào),然后與客戶端的程序版本號(hào)信息進(jìn)行比較,如果版本號(hào)一致或客戶端版本號(hào)大于服務(wù)器中的文件版本號(hào)不需要進(jìn)行自動(dòng)升級(jí),反之,則需要對(duì)程序進(jìn)行更新,圖1為船舶監(jiān)測(cè)系統(tǒng)自動(dòng)升級(jí)的流程圖。

      圖1 船舶監(jiān)測(cè)系統(tǒng)自動(dòng)升級(jí)流程

      如果客戶端程序需要更新,對(duì)其進(jìn)行更新的詳細(xì)步驟如下:

      (1)從服務(wù)端通過動(dòng)態(tài)鏈接庫中的動(dòng)態(tài)數(shù)組獲取需要下載更新的文件列表,下載文件列表到客戶端指定的臨時(shí)文件夾;

      (2)檢查臨時(shí)文件夾中下載的文件是否為客戶端主程序更新所需的文件;

      (3)檢查主程序是否啟動(dòng)運(yùn)行,如果運(yùn)行則關(guān)閉主程序,或者主程序未運(yùn)行但是主程序進(jìn)程在運(yùn)行,則關(guān)閉進(jìn)程;

      (4)備份主程序中的文件,將臨時(shí)文件夾中的所有文件替換到指定主程序的文件夾位置,覆蓋替換更新主程序文件;

      (5)更新客戶端主程序文件中的版本號(hào)信息(主程序文件記錄在Version.txt中);

      (6)關(guān)閉升級(jí)程序,完成升級(jí);

      (7)重新啟動(dòng)主程序。

      1.1 配置服務(wù)端

      在服務(wù)器上創(chuàng)建FTP服務(wù)站點(diǎn),打開FTP服務(wù)的端口號(hào),采用FTP傳輸協(xié)議,客戶端向服務(wù)器端發(fā)送連接,通過同時(shí)打開并監(jiān)聽同一打開的端口號(hào)建立數(shù)據(jù)連接,采用socket通信原理完成服務(wù)端和客戶端的通信,服務(wù)端的功能主要包含:軟件自動(dòng)升級(jí)檢測(cè)系統(tǒng)的更新文件包、自動(dòng)升級(jí)程序客戶端管理,其中更新軟件包中包含update.xml配置文件和需要更新升級(jí)的所有文件;自動(dòng)升級(jí)程序客戶端管理主要記錄客戶端已經(jīng)升級(jí)的電腦和應(yīng)該升級(jí)而暫未升級(jí)的電腦,對(duì)于應(yīng)該升級(jí)而未升級(jí)的客戶端則不斷提示需要升級(jí)。

      1.2 配置客戶端

      用戶在客戶端安裝船舶監(jiān)測(cè)系統(tǒng)軟件后,在主程序安裝目錄下包含:主程序.exe、Version.txt(主要記錄版本信息)、lib文件夾(靜態(tài)庫,動(dòng)態(tài)庫dll文件)、DATA文件夾(數(shù)據(jù)庫、各種圖元信息)、record文件夾(記錄日志文件)。

      2 主要技術(shù)實(shí)現(xiàn)和編碼設(shè)計(jì)

      2.1 文件下載

      文件下載主要通過FTP文件傳輸協(xié)議,每次客戶端升級(jí)程序提出一個(gè)請(qǐng)求,服務(wù)器與客戶端通過控制連接相同的端口號(hào)建立一個(gè)數(shù)據(jù)連接,通過Socket實(shí)現(xiàn)文件的下載功能,通過downLoad?File()方法下載文件,下面是此方法的部分代碼。

      FileStream output=new FileStream(‘本地文件名’,FileMode.Open);

      Socket csocket=createDataSocket();//數(shù)據(jù)連接Socket

      long offset=0;

      offset=output.Length;

      if(offset>0)

      {

      sendCommand("REST"+offset);

      }

      long npos=output.Seek(offset,SeekOrigin.Begin);

      sendCommand("RETR"+remFileName);

      while(true)

      {

      bytes=csocket.Receive(buffer,buffer.Length,0);

      //接收指定的字節(jié)數(shù)存入緩沖區(qū)的位置

      output.Write(buffer,0,bytes);//輸出內(nèi)容

      if(bytes<=0)

      {

      break;

      }

      }

      output.Close();

      if(csocket.Connected)

      {

      csocket.Close(); //關(guān)閉數(shù)據(jù)連接

      }

      2.2 文件的備份

      將升級(jí)文件替換到主程序文件之前,需要先將主程序文件備份到一個(gè)指定文件夾,可以更好地進(jìn)行系統(tǒng)版本的管理。對(duì)主程序進(jìn)行備份的主要步驟,首先遍歷主程序文件中所有的文件,把遍歷的文件存放在一個(gè)數(shù)組中,然后把所有的文件復(fù)制到備份文件中。

      2.3 關(guān)閉主程序進(jìn)程

      文件下載完畢后,自動(dòng)升級(jí)文件需要更新替換主程序文件,如果主程序文件正在運(yùn)行,則不能進(jìn)行替換,必須先關(guān)閉主程序,升級(jí)程序首先遍歷找到該主程序進(jìn)程,然后強(qiáng)制關(guān)閉該進(jìn)程,主程序退出。

      2.4 啟動(dòng)主程序

      升級(jí)文件完成對(duì)主程序文件的更新替換后,需要對(duì)主程序進(jìn)行重新啟動(dòng),這些操作需要升級(jí)程序執(zhí)行外部程序,本升級(jí)系統(tǒng)主要通過函數(shù)調(diào)用的方式打開主程序,可供參考的此類函數(shù)有很多個(gè),本系統(tǒng)主要采用process.start()方式。

      2.5 配置服務(wù)器端配置文件

      服務(wù)器端軟件配置文件update.xml,主要用來記錄程序的版本信息、軟件名稱、文件的更新日期、是否需要重新啟動(dòng)應(yīng)用系統(tǒng)程序和需要重新啟動(dòng)的主程序名稱。升級(jí)程序通過FTP協(xié)議從服務(wù)端獲取文件的最新的版本信息,與當(dāng)下客戶端主程序的版本信息進(jìn)行比較,若客戶端的當(dāng)前應(yīng)用版本號(hào)小于服務(wù)端版本號(hào),則系統(tǒng)彈出提示框提示用戶軟件需要升級(jí)(圖2),點(diǎn)擊確定按鈕,則軟件升級(jí)程序根據(jù)協(xié)議,對(duì)服務(wù)器端的更新文件全部下載,下載更新后,重新啟動(dòng)主程序。以下是服務(wù)端update.xml配置文件的配置信息。

      圖2 系統(tǒng)更新提示

      //需要升級(jí)的文件更新日期

      //需要升級(jí)的程序版本號(hào)

      //是否需要重新啟動(dòng)程序

      //需要重新啟動(dòng)的程序名稱

      2.6 客戶端文件和服務(wù)端的文件版本信息比較

      通過方法讀取服務(wù)端的版本信息和客戶端的版本信息,以下是讀取服務(wù)端的版本信息代碼。

      //獲取服務(wù)器端程序的版本號(hào)

      WebClient wc=new WebClient();

      Stream stream=wc.OpenRead(updateUrl);

      XmlDocument xmlDoc=new XmlDocument();

      xml Doc.Load(stream);//讀取XML配置文件

      XmlNode list=xmlDoc.SelectSingleNode("Update");

      foreach(XmlNode node in list)

      {

      if(node.Name=="Soft"&&node.Attributes["Name"].Value.ToLower()==SoftName.ToLower())

      {

      foreach(XmlNode xml in node)

      {

      if(xml.Name=="Verson")

      newVerson=xml.InnerText;//讀取版本號(hào)

      else

      download=xml.InnerText;

      }

      }

      }

      以下是讀取客戶端的版本信息,讀取客戶端程序的版本號(hào),客戶端版本號(hào)記錄在Version.txt文檔中,通過StreamReader讀取文檔中的版本號(hào)信息。

      StreamReader sr=new StreamReader(path,Encoding.Default);

      stringver=sr.ReadLine();//讀取文檔中的版本號(hào)

      //檢查是否需要更新

      int tm=verso.CompareTo(newVerson);

      //比較客戶端版本號(hào)和服務(wù)器文件版本號(hào)

      if(tm>=0)

      isUpdate=false;

      else

      isUpdate=true;//執(zhí)行更新程序

      對(duì)客戶端和服務(wù)端的版本信息進(jìn)行比較,如果客戶端版本信息大于服務(wù)端版本信息,則不進(jìn)行更新,反之則在客戶端界面彈出提示框,提醒用戶有新的版本信息需要進(jìn)行更新,點(diǎn)擊確定按鈕,更新程序利用FTP傳輸協(xié)議將需要更新的文件從服務(wù)器下載到本地指定的臨時(shí)文件夾下,然后,更新程序?qū)σ呀?jīng)下載的文件進(jìn)行檢驗(yàn),確保所下載文件屬于主程序升級(jí)所需要文件;最后完成文件替換,首先將待更新文件打包備份到指定文件位置,然后將臨時(shí)文件夾中的文件移動(dòng)到主程序所在目錄下覆蓋更新,同時(shí)更新客戶端的主程序版本信息與服務(wù)器中的版本信息一致,重新啟動(dòng)主程序即完成升級(jí)工作。

      3 結(jié)語

      本文根據(jù)網(wǎng)絡(luò)協(xié)議、配置文件、C/S架構(gòu)等技術(shù),通過比較客戶端系統(tǒng)版本號(hào)和服務(wù)端文件版本號(hào),實(shí)現(xiàn)船舶監(jiān)測(cè)系統(tǒng)的自動(dòng)升級(jí)工作。自動(dòng)升級(jí)系統(tǒng)的使用既節(jié)約大量的人員,也減少了船上工作人員的工作量,提高了工作效率,目前取得了較好的使用效果。與傳統(tǒng)的系統(tǒng)升級(jí)技術(shù)相比,本文所描述的自動(dòng)升級(jí)系統(tǒng)具有成本低廉、出錯(cuò)率低、效率高等特點(diǎn),具有很高的生產(chǎn)使用價(jià)值,并且對(duì)系統(tǒng)采用版本控制的集中管理方式,使系統(tǒng)具有更好的可維護(hù)性,為研究其他船舶軟件的升級(jí)維護(hù)提供參考價(jià)值。

      猜你喜歡
      版本號(hào)主程序服務(wù)端
      淺談數(shù)控銑削技術(shù)代碼程序的嵌套方式研究
      電控冰箱軟件模塊化設(shè)計(jì)
      日用電器(2019年12期)2019-02-26 01:53:06
      認(rèn)識(shí)vSphere安裝程序
      云存儲(chǔ)中基于相似性的客戶-服務(wù)端雙端數(shù)據(jù)去重方法
      新時(shí)期《移動(dòng)Web服務(wù)端開發(fā)》課程教學(xué)改革的研究
      在Windows Server 2008上創(chuàng)建應(yīng)用
      時(shí)光倒流 換回PotPlayer老圖標(biāo)
      深入淺出 全面獲知系統(tǒng)版本號(hào)
      多種方法查看系統(tǒng)版本號(hào)
      電腦迷(2014年8期)2014-04-29 08:53:03
      電子商務(wù)的數(shù)據(jù)陳舊性檢查的設(shè)計(jì)與實(shí)現(xiàn)
      涡阳县| 神池县| 河池市| 土默特右旗| 民勤县| 留坝县| 罗平县| 霍城县| 兰坪| 乌恰县| 黔南| 喀什市| 裕民县| 焦作市| 柳江县| 梁平县| 纳雍县| 城固县| 阳谷县| 永康市| 闵行区| 寻甸| 固镇县| 屏边| 分宜县| 廊坊市| 尉犁县| 资兴市| 阳泉市| 柳河县| 达孜县| 灵璧县| 科技| 咸宁市| 浑源县| 崇阳县| 巧家县| 抚顺市| 绥宁县| 莫力| 海宁市|