謝小魁
(1.北部灣大學(xué)資源與環(huán)境學(xué)院;2.欽州市海洋資源與環(huán)境遙感重點(diǎn)實(shí)驗(yàn)室;3.廣西北部灣海洋生物多樣性養(yǎng)護(hù)重點(diǎn)實(shí)驗(yàn)室,廣西欽州 535011)
地理信息系統(tǒng)(GIS)自20 世紀(jì)60 年代以來(lái),在全球范圍內(nèi)得到了高度重視和廣泛應(yīng)用,無(wú)論在系統(tǒng)理論、研究方法、基礎(chǔ)平臺(tái)還是在應(yīng)用開(kāi)發(fā)等方面都快速發(fā)展[1]。當(dāng)前,國(guó)際上使用較多、二次開(kāi)發(fā)功能較強(qiáng)的GIS 平臺(tái)有美國(guó)的ArcGIS[2]和MapInfo[3],以及國(guó)產(chǎn)的SuperMap[4]和MapGIS[5]。其中,ArcGIS 是目前主流的GIS 教學(xué)、研究、應(yīng)用和開(kāi)發(fā)平臺(tái)[6-7]。使用Google Scholar 搜索關(guān)鍵詞“GIS”、“ArcGIS”、“MapInfo”、”SuperMap GIS”、”MapGIS”,得到記錄條數(shù)分別為321萬(wàn)、66.5萬(wàn)、4.13萬(wàn)、0.58萬(wàn)和2.63萬(wàn)。
一直以來(lái),ArcGIS 許可安裝和配置比較復(fù)雜,工程技術(shù)人員進(jìn)行了一定探索,研究了多版本ArcGIS 應(yīng)用虛擬化部署[8]、基于ArcGIS 平臺(tái)的局域網(wǎng)安裝環(huán)境搭建[9]、Arc-GIS Server 分布式體系結(jié)構(gòu)研究與服務(wù)器部署策略[10]、Linux 環(huán)境下部署ArcGIS 平臺(tái)服務(wù)器端的技術(shù)[11]等,這些為計(jì)算機(jī)專業(yè)人員部署ArcGIS 提供了參考信息。對(duì)科研工作者和地理信息專業(yè)的工程技術(shù)人員而言,使用較多的是ArcGIS for Desktop[6],目前未見(jiàn)文獻(xiàn)對(duì)其許可原理進(jìn)行分析,對(duì)許可流程也未見(jiàn)報(bào)道。并且,ArcGIS for Desktop安裝過(guò)程過(guò)于復(fù)雜,通常需要反復(fù)嘗試、多次安裝才能成功。ArcGIS 初學(xué)者往往因?yàn)榘惭b困難,望而卻步,缺少繼續(xù)學(xué)習(xí)下去的信心。機(jī)房管理員需要在數(shù)十臺(tái)甚至數(shù)百臺(tái)電腦上安裝ArcGIS,如果手工配置許可,需要花費(fèi)過(guò)長(zhǎng)時(shí)間。同時(shí),目前大量采取ArcGIS 插件模式[12],開(kāi)發(fā)了很多實(shí)用工具[13-16],但可能由于許可配置過(guò)于復(fù)雜,很難在大眾中推廣開(kāi)來(lái)。因此,有必要分析ArcGIS 的許可安裝、許可服務(wù)運(yùn)行和許可認(rèn)證方式,為排除許可配置錯(cuò)誤,編寫(xiě)許可自動(dòng)配置APP 提供理論依據(jù)。
經(jīng)過(guò)對(duì)軟件的反復(fù)測(cè)試和分析發(fā)現(xiàn),ArcGIS for Desktop 許可認(rèn)證采用的是服務(wù)方式,每次啟動(dòng)都要進(jìn)行認(rèn)證。ArcGIS for Desktop 授權(quán)的許可服務(wù)器來(lái)源主要通過(guò)Arc-GIS Administrator(管理器)配置。ArcGIS License Server(許可服務(wù)器)提供許可服務(wù),并進(jìn)行管理(例如啟動(dòng)、停止服務(wù))。進(jìn)一步分析發(fā)現(xiàn),ArcGIS for Desktop 的許可運(yùn)行機(jī)制如圖1 所示,涉及3 個(gè)主體:ArcGIS for Desktop、ArcGIS License Server 和ArcGIS Administrator。其中,ArcGIS Administrator 充當(dāng)中介牽線搭橋的角色,在設(shè)置完ArcGIS for Desktop 的權(quán)限類(lèi)型和來(lái)源后即可退出,甚至可以刪除(卸載)。而ArcGIS for Desktop 在運(yùn)行時(shí),ArcGIS License Server必須一直運(yùn)行,以提供授權(quán)服務(wù)。
Fig.1 Interaction process of ArcGIS licensing圖1 ArcGIS 許可服務(wù)交互過(guò)程
1.2.1 分析思路
為了快速排除手動(dòng)配置許可產(chǎn)生的錯(cuò)誤,或者編寫(xiě)自動(dòng)化的許可配置程序,就必須獲得ArcGIS for Desktop 許可認(rèn)證所需要的所有交互信息,具體包括ArcGIS for Desktop的版本、安裝路徑和目錄結(jié)構(gòu),ArcGIS License Server 的安裝路徑、目錄結(jié)構(gòu)和許可服務(wù)管理,以及ArcGIS Administrator的許可配置內(nèi)容。
問(wèn)題的出發(fā)點(diǎn)是這些信息存儲(chǔ)在哪里,如何獲???首先需分析ArcGIS 的技術(shù)基礎(chǔ)和所運(yùn)行的操作系統(tǒng)。
(1)ArcGIS for Desktop 非常龐大,其技術(shù)基礎(chǔ)是ArcObjects(AO)。AO 是COM 組件,而COM 組件的接口信息存儲(chǔ)在Windows 注冊(cè)表中[17-18]。
(2)對(duì)于Windows 操作系統(tǒng),全局?jǐn)?shù)據(jù)或者交互數(shù)據(jù),例如版本信息,一般存儲(chǔ)在注冊(cè)表(register table)、INI 配置文件、XML 配置文件等。既然AO 基于COM 技術(shù),大量采用注冊(cè)表,那么為了統(tǒng)一,ArcGIS for Desktop 的許可認(rèn)證交互信息可能也會(huì)優(yōu)先考慮存儲(chǔ)在Windows 注冊(cè)表中。因此,下一步研究的重點(diǎn)是進(jìn)一步探索注冊(cè)表結(jié)構(gòu)。
1.2.2 Windows注冊(cè)表關(guān)鍵結(jié)構(gòu)
注冊(cè)表是Windows 操作系統(tǒng)、硬件設(shè)備及應(yīng)用程序正常運(yùn)行和保存設(shè)置的核心數(shù)據(jù)庫(kù),具有樹(shù)狀分層結(jié)構(gòu)[19-20]。注冊(cè)表數(shù)據(jù)信息保存在system.dat 和user.dat 中,利用regedit.exe 程序能夠存取注冊(cè)表文件。通過(guò)RegEdit命令打開(kāi)注冊(cè)表,發(fā)現(xiàn)其包括5 個(gè)根鍵(見(jiàn)圖2),分別是HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS、HKEY_CURRENT_CONFIG。其中,HKEY_LOCAL_MACHINE 存儲(chǔ)本地計(jì)算機(jī)的系統(tǒng)信息,包括硬件和操作系統(tǒng)信息、安全數(shù)據(jù)和計(jì)算機(jī)專用的各類(lèi)軟件設(shè)置信息,因此是ArcGIS 許可分析需優(yōu)先考慮的內(nèi)容。
Fig.2 Root directory of registry table for Windows OS圖2 Windows操作系統(tǒng)注冊(cè)表根目錄
ArcGIS for Desktop 主要包括ArcMap、ArcCatalog、Arc-Scene、ArcGlobe 等桌面程序。不同版本的ArcGIS for Desktop 相互沖突,不能安裝在同一臺(tái)電腦。實(shí)際上,任何基于AO 的軟件都必須版本一致,包括ArcGIS for Desktop 及插件、ArcGIS Engine,或者其他基于AO 的軟件。因此,獲取ArcGIS版本號(hào)尤為重要。
2.1.1 版本信息
由于歷史原因和商業(yè)戰(zhàn)略,ArcGIS for Desktop 只有32位,沒(méi)有64 位。根據(jù)上文對(duì)注冊(cè)表的分析,軟件版本信息的根鍵(基項(xiàng))應(yīng)該為HKEY_LOCAL_MACHINE。對(duì)于32位操作系統(tǒng),軟件全局信息的注冊(cè)表路徑一般為SOFTWARE<公司><軟件>;對(duì)于64 位操作系統(tǒng),路徑一般為SOFTWAREWow6432Node<公司><軟件>。利用regedit程序打開(kāi)注冊(cè)表進(jìn)行搜索、排查分析發(fā)現(xiàn),ArcGIS for Desktop 的版本信息所對(duì)應(yīng)的注冊(cè)表存儲(chǔ)在子鍵RealVersion 中,如表1所示。例如,對(duì)于ArcGIS 10.3,版本號(hào)為10.3.4322,對(duì)應(yīng)的注冊(cè)表項(xiàng)為“RealVersion REG_SZ 10.3.4322”。
Table 1 Registry table catalog for the version of ArcGIS for Desktop表1 ArcGIS for Desktop版本號(hào)的注冊(cè)表目錄
2.1.2 安裝路徑
獲取版本號(hào)之后,再根據(jù)軟件名稱和版本獲取安裝路徑。
經(jīng)分析發(fā)現(xiàn),在注冊(cè)表中,ArcGIS for Desktop 軟件名稱為Desktop<主要版本號(hào)>.<次要版本號(hào)>。例如,對(duì)于ArcGIS for Desktop 10.3,在注冊(cè)表中的名稱為Desktop10.3。
進(jìn)一步分析發(fā)現(xiàn),在注冊(cè)表中,ArcGIS for Desktop 的安裝路徑存儲(chǔ)在“InstallDir”子鍵中,如表2所示。
例如,當(dāng)安裝路徑為F:Program Files(x86)Arc-GISDesktop10.3,對(duì)應(yīng)的注冊(cè)表項(xiàng)為“InstallDir REG_SZ F:Program Files(x86)ArcGISDesktop10.3”。
Table 2 Registry table catalog for the installation directory of ArcGIS for Desktop表2 ArcGIS for Desktop安裝路徑的注冊(cè)表目錄
2.1.3 應(yīng)用程序目錄結(jié)構(gòu)
通過(guò)分析文件系統(tǒng)結(jié)構(gòu)發(fā)現(xiàn),ArcGIS for Desktop 應(yīng)用程序(.exe)所在路徑為
2.1.4 注冊(cè)表應(yīng)用
通過(guò)注冊(cè)表信息,可以獲得ArcGIS for Desktop 的版本和安裝路徑;結(jié)合目錄結(jié)構(gòu)和應(yīng)用程序名稱,可以提高手動(dòng)操作的靈活性,也可以開(kāi)發(fā)程序并進(jìn)行自動(dòng)化處理。
手工處理:在不使用開(kāi)始/程序菜單(例如Win8操作系統(tǒng))的條件下,可以用文件管理器直接導(dǎo)航到應(yīng)用程序文件夾
自動(dòng)處理:編寫(xiě)程序從注冊(cè)表讀取安裝路徑,利用應(yīng)用程序目錄結(jié)構(gòu),打開(kāi)對(duì)應(yīng)的程序。
License Manager Administrator(許可服務(wù)器管理器)對(duì)許可服務(wù)進(jìn)行管理,包括啟動(dòng)服務(wù)、暫停服務(wù)、重啟服務(wù)等。
2.2.1 安裝路徑
通過(guò)許可服務(wù)器關(guān)鍵字在注冊(cè)表中進(jìn)行查找發(fā)現(xiàn),許可服務(wù)器安裝路徑信息的注冊(cè)表項(xiàng)為:對(duì)于32 位操作系統(tǒng),路徑為HKEY_LOCAL_MACHINE SOFTWAREESRIArcGIS 10.3 License Manager;對(duì)于64 位操作系統(tǒng),路徑為HKEY_LOCAL_MACHINESOFTWAREWow6432NodeE SRIArcGIS 10.3 License Manager;子鍵為InstallDir;值類(lèi)型為REG_SZ,為字符串,例如“F:Program Files(x86)Arc-GISLicense10.3”。
2.2.2 目錄結(jié)構(gòu)
在
2.2.3 許可服務(wù)器管理
許可服務(wù)器為lmgrd.exe,其服務(wù)名稱為ArcGIS License Manager。可以通過(guò)ArcGIS許可服務(wù)器管理器LSAdmin.exe對(duì)服務(wù)進(jìn)行管理,如圖3(a)所示。在不使用ArcGIS軟件時(shí)可手動(dòng)停止服務(wù),在需要時(shí)再啟動(dòng)服務(wù);也可通過(guò)Windows操作系統(tǒng)的服務(wù)管理ArcGIS許可服務(wù),如圖3(b)所示。
Fig.3 Managing license service圖3 管理許可服務(wù)
2.2.4 注冊(cè)表應(yīng)用
通過(guò)編寫(xiě)程序,在注冊(cè)表中找到許可服務(wù)器安裝路徑,通過(guò)操作許可文件service.txt 自動(dòng)對(duì)軟件進(jìn)行授權(quán)。在更改授權(quán)前,需先停止服務(wù),修改后要啟動(dòng)服務(wù)。
還可以編寫(xiě)程序,利用許可服務(wù)名稱查找服務(wù),判斷服務(wù)是否安裝,獲得當(dāng)前服務(wù)狀態(tài)(是否運(yùn)行、停止或正在啟動(dòng)),以及按需啟動(dòng)服務(wù)和停止服務(wù),也可以通過(guò)定時(shí)器觸發(fā)這些操作。
2.3.1 許可配置
ArcGIS Administrator(管理器)可以對(duì)ArcGIS for Desktop 的許可來(lái)源進(jìn)行配置(見(jiàn)圖4),包括軟件功能、許可類(lèi)型,以及許可管理器地址。軟件功能分為高級(jí)版(相當(dāng)于ArcInfo)、標(biāo)準(zhǔn)版(相當(dāng)于ArcEditor)和基礎(chǔ)版(相當(dāng)于ArcView);許可類(lèi)型分為浮動(dòng)版、單機(jī)版。
Fig.4 Configure license for ArcGIS for Desktop by ArcGIS administrator圖4 ArcGIS管理器配置ArcGIS for Desktop許可
2.3.2 許可服務(wù)器地址
許可服務(wù)器地址可以是計(jì)算機(jī)名稱、IP 地址等,通過(guò)在ArcGIS Administrator 反復(fù)修改許可服務(wù)器地址,然后在注冊(cè)表中查找對(duì)應(yīng)的信息,并結(jié)合相似路徑分析,可以找到對(duì)應(yīng)的注冊(cè)表。對(duì)于32 位操作系統(tǒng),許可服務(wù)器地址的注冊(cè)表路徑為 HKEY_LOCAL_MACHINE SOFTWAREESRILicense10.3,對(duì)于64 位操作系統(tǒng),路徑為SOFTWAREWow6432NodeESRILicense10.3;子鍵為L(zhǎng)ICENSE_SERVER;值類(lèi)型為REG_SZ。當(dāng)許可服務(wù)器地址設(shè)置為本機(jī)(localhost)時(shí),值為“@localhost”。
2.3.3 許可服務(wù)器類(lèi)型
進(jìn)一步分析發(fā)現(xiàn),在注冊(cè)表中,許可類(lèi)型在注冊(cè)表中存儲(chǔ)路徑:對(duì)于32 位操作系統(tǒng)為HKEY_LOCAL_MACHINESOFTWAREESRILicense10.3;對(duì)于64 位操作系統(tǒng)為HKEY_LOCAL_MACHINESOFTWAREWow6432NodeESRILicense10.3;子鍵為SEAT_PREFERENCE;數(shù)據(jù)類(lèi)型為REG_SZ;當(dāng)許可類(lèi)型為floa(t浮動(dòng))時(shí),值為“Float”。
在注冊(cè)表中可以獲取或設(shè)置許可服務(wù)器的類(lèi)型和地址。例如,對(duì)機(jī)房所有電腦安裝的ArcGIS for Desktop 的許可全部定向到某一許可服務(wù)器。如果許可服務(wù)器發(fā)生了更新、升級(jí)等,自動(dòng)對(duì)ArcGIS for Desktop 的許可進(jìn)行更改。基于許可服務(wù)器注冊(cè)表分析結(jié)果,了解其原理,就可以開(kāi)發(fā)出許可自動(dòng)配置程序。
(1)開(kāi)發(fā)語(yǔ)言選擇。開(kāi)發(fā)語(yǔ)言(支持平臺(tái))需能夠方便地讀寫(xiě)注冊(cè)表、訪問(wèn)文件系統(tǒng)(以讀寫(xiě)許可文件)、訪問(wèn)系統(tǒng)服務(wù)(以啟動(dòng)、停止許可服務(wù)),具有快速開(kāi)發(fā)、界面設(shè)計(jì)和調(diào)試方便等優(yōu)點(diǎn),在Windows 平臺(tái)可選Python 和C#。Python 雖然具有良好的計(jì)算生態(tài),開(kāi)發(fā)速度快,但存在界面設(shè)計(jì)不便、調(diào)試?yán)щy等缺點(diǎn),因此本文選擇C#作為開(kāi)發(fā)語(yǔ)言。
(2)開(kāi)發(fā)界面可采用WinForm 或WPF 進(jìn)行設(shè)計(jì)。本文選擇WPF,以自適應(yīng)屏幕分辨率變化。
(3)程序功能包括手動(dòng)設(shè)置許可(位于窗體的左邊)、自動(dòng)設(shè)置許可(位于窗體的右邊)。
手動(dòng)設(shè)置許可是通過(guò)點(diǎn)擊按鈕進(jìn)行版本檢測(cè)、許可服務(wù)器狀態(tài)監(jiān)測(cè)、啟動(dòng)和停止許可服務(wù)、刪除原有許可、更新許可等操作。
自動(dòng)設(shè)置許可是設(shè)置經(jīng)典許可(已經(jīng)安裝了許可服務(wù)器LicenseManger),也可以設(shè)置簡(jiǎn)易許可(不用安裝許可服務(wù)器)。
最后提供了2 個(gè)小工具,一個(gè)是讀取ESRI 全部的注冊(cè)表信息,方便高級(jí)管理員分析安裝的ESRI 產(chǎn)品;一個(gè)是讀取ESRI 幾個(gè)主要的注冊(cè)表信息,用于輔助分析軟件運(yùn)行情況。程序運(yùn)行效果如圖5所示。
Fig.5 Auto-license configuration APP for ArcGIS圖5 ArcGIS自動(dòng)許可配置程序
本文通過(guò)邏輯分析、反復(fù)測(cè)試,揭示了ArcGIS 許可運(yùn)行機(jī)制及相關(guān)注冊(cè)表信息,為排除許可配置錯(cuò)誤、開(kāi)發(fā)自動(dòng)配置軟件提供了全面的理論支撐。基于此原理開(kāi)發(fā)自動(dòng)配置許可APP,可以讀取注冊(cè)表、修改注冊(cè)表,即可直接修改許可認(rèn)證方式,無(wú)需手動(dòng)交互操作ArcGIS License Administraot 或ArcGIS Administrator,從而達(dá)到自動(dòng)化、批量化目的。該App 跨Windows 操作系統(tǒng)版本(32 位、64 位),跨ArcGIS 版本(9.2-10.8),具有較強(qiáng)的通用性、較好的實(shí)用性。因?yàn)槭褂肅#開(kāi)發(fā),所以需要安裝.NET Framework。
該APP 可用于個(gè)人初學(xué)者輔助安裝ArcGIS,對(duì)實(shí)驗(yàn)室大規(guī)模安裝有顯著效果。同時(shí),本文分析結(jié)論對(duì)安裝和配置二次開(kāi)發(fā)的Python 腳本、插件(Addin)和工具箱(toolbox)有較大啟發(fā)作用[12]。自動(dòng)配置許可APP 源代碼(C#)和編譯好的應(yīng)用程序(exe)可以從百度網(wǎng)盤(pán)下載,鏈接:https://pan.baidu.com/s/113DOUeofJ1X6FfeZo-G7NA 提取碼:s2ja。需特別說(shuō)明的是,該APP 僅限于學(xué)習(xí)和研究之用,不得用于商業(yè)用途。出于演示需要,本文上傳了ArcGIS 10.2 和10.3的許可,這些許可均來(lái)自網(wǎng)絡(luò)。