謝小魁
(1.北部灣大學資源與環境學院;2.欽州市海洋資源與環境遙感重點實驗室;3.廣西北部灣海洋生物多樣性養護重點實驗室,廣西欽州 535011)
地理信息系統(GIS)自20 世紀60 年代以來,在全球范圍內得到了高度重視和廣泛應用,無論在系統理論、研究方法、基礎平臺還是在應用開發等方面都快速發展[1]。當前,國際上使用較多、二次開發功能較強的GIS 平臺有美國的ArcGIS[2]和MapInfo[3],以及國產的SuperMap[4]和MapGIS[5]。其中,ArcGIS 是目前主流的GIS 教學、研究、應用和開發平臺[6-7]。使用Google Scholar 搜索關鍵詞“GIS”、“ArcGIS”、“MapInfo”、”SuperMap GIS”、”MapGIS”,得到記錄條數分別為321萬、66.5萬、4.13萬、0.58萬和2.63萬。
一直以來,ArcGIS 許可安裝和配置比較復雜,工程技術人員進行了一定探索,研究了多版本ArcGIS 應用虛擬化部署[8]、基于ArcGIS 平臺的局域網安裝環境搭建[9]、Arc-GIS Server 分布式體系結構研究與服務器部署策略[10]、Linux 環境下部署ArcGIS 平臺服務器端的技術[11]等,這些為計算機專業人員部署ArcGIS 提供了參考信息。對科研工作者和地理信息專業的工程技術人員而言,使用較多的是ArcGIS for Desktop[6],目前未見文獻對其許可原理進行分析,對許可流程也未見報道。并且,ArcGIS for Desktop安裝過程過于復雜,通常需要反復嘗試、多次安裝才能成功。ArcGIS 初學者往往因為安裝困難,望而卻步,缺少繼續學習下去的信心。機房管理員需要在數十臺甚至數百臺電腦上安裝ArcGIS,如果手工配置許可,需要花費過長時間。同時,目前大量采取ArcGIS 插件模式[12],開發了很多實用工具[13-16],但可能由于許可配置過于復雜,很難在大眾中推廣開來。因此,有必要分析ArcGIS 的許可安裝、許可服務運行和許可認證方式,為排除許可配置錯誤,編寫許可自動配置APP 提供理論依據。
經過對軟件的反復測試和分析發現,ArcGIS for Desktop 許可認證采用的是服務方式,每次啟動都要進行認證。ArcGIS for Desktop 授權的許可服務器來源主要通過Arc-GIS Administrator(管理器)配置。ArcGIS License Server(許可服務器)提供許可服務,并進行管理(例如啟動、停止服務)。進一步分析發現,ArcGIS for Desktop 的許可運行機制如圖1 所示,涉及3 個主體:ArcGIS for Desktop、ArcGIS License Server 和ArcGIS Administrator。其中,ArcGIS Administrator 充當中介牽線搭橋的角色,在設置完ArcGIS for Desktop 的權限類型和來源后即可退出,甚至可以刪除(卸載)。而ArcGIS for Desktop 在運行時,ArcGIS License Server必須一直運行,以提供授權服務。

Fig.1 Interaction process of ArcGIS licensing圖1 ArcGIS 許可服務交互過程
1.2.1 分析思路
為了快速排除手動配置許可產生的錯誤,或者編寫自動化的許可配置程序,就必須獲得ArcGIS for Desktop 許可認證所需要的所有交互信息,具體包括ArcGIS for Desktop的版本、安裝路徑和目錄結構,ArcGIS License Server 的安裝路徑、目錄結構和許可服務管理,以及ArcGIS Administrator的許可配置內容。
問題的出發點是這些信息存儲在哪里,如何獲取?首先需分析ArcGIS 的技術基礎和所運行的操作系統。
(1)ArcGIS for Desktop 非常龐大,其技術基礎是ArcObjects(AO)。AO 是COM 組件,而COM 組件的接口信息存儲在Windows 注冊表中[17-18]。
(2)對于Windows 操作系統,全局數據或者交互數據,例如版本信息,一般存儲在注冊表(register table)、INI 配置文件、XML 配置文件等。既然AO 基于COM 技術,大量采用注冊表,那么為了統一,ArcGIS for Desktop 的許可認證交互信息可能也會優先考慮存儲在Windows 注冊表中。因此,下一步研究的重點是進一步探索注冊表結構。
1.2.2 Windows注冊表關鍵結構
注冊表是Windows 操作系統、硬件設備及應用程序正常運行和保存設置的核心數據庫,具有樹狀分層結構[19-20]。注冊表數據信息保存在system.dat 和user.dat 中,利用regedit.exe 程序能夠存取注冊表文件。通過RegEdit命令打開注冊表,發現其包括5 個根鍵(見圖2),分別是HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS、HKEY_CURRENT_CONFIG。其中,HKEY_LOCAL_MACHINE 存儲本地計算機的系統信息,包括硬件和操作系統信息、安全數據和計算機專用的各類軟件設置信息,因此是ArcGIS 許可分析需優先考慮的內容。

Fig.2 Root directory of registry table for Windows OS圖2 Windows操作系統注冊表根目錄
ArcGIS for Desktop 主要包括ArcMap、ArcCatalog、Arc-Scene、ArcGlobe 等桌面程序。不同版本的ArcGIS for Desktop 相互沖突,不能安裝在同一臺電腦。實際上,任何基于AO 的軟件都必須版本一致,包括ArcGIS for Desktop 及插件、ArcGIS Engine,或者其他基于AO 的軟件。因此,獲取ArcGIS版本號尤為重要。
2.1.1 版本信息
由于歷史原因和商業戰略,ArcGIS for Desktop 只有32位,沒有64 位。根據上文對注冊表的分析,軟件版本信息的根鍵(基項)應該為HKEY_LOCAL_MACHINE。對于32位操作系統,軟件全局信息的注冊表路徑一般為SOFTWARE<公司><軟件>;對于64 位操作系統,路徑一般為SOFTWAREWow6432Node<公司><軟件>。利用regedit程序打開注冊表進行搜索、排查分析發現,ArcGIS for Desktop 的版本信息所對應的注冊表存儲在子鍵RealVersion 中,如表1所示。例如,對于ArcGIS 10.3,版本號為10.3.4322,對應的注冊表項為“RealVersion REG_SZ 10.3.4322”。

Table 1 Registry table catalog for the version of ArcGIS for Desktop表1 ArcGIS for Desktop版本號的注冊表目錄
2.1.2 安裝路徑
獲取版本號之后,再根據軟件名稱和版本獲取安裝路徑。
經分析發現,在注冊表中,ArcGIS for Desktop 軟件名稱為Desktop<主要版本號>.<次要版本號>。例如,對于ArcGIS for Desktop 10.3,在注冊表中的名稱為Desktop10.3。
進一步分析發現,在注冊表中,ArcGIS for Desktop 的安裝路徑存儲在“InstallDir”子鍵中,如表2所示。
例如,當安裝路徑為F:Program Files(x86)Arc-GISDesktop10.3,對應的注冊表項為“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安裝路徑的注冊表目錄
2.1.3 應用程序目錄結構
通過分析文件系統結構發現,ArcGIS for Desktop 應用程序(.exe)所在路徑為
2.1.4 注冊表應用
通過注冊表信息,可以獲得ArcGIS for Desktop 的版本和安裝路徑;結合目錄結構和應用程序名稱,可以提高手動操作的靈活性,也可以開發程序并進行自動化處理。
手工處理:在不使用開始/程序菜單(例如Win8操作系統)的條件下,可以用文件管理器直接導航到應用程序文件夾
自動處理:編寫程序從注冊表讀取安裝路徑,利用應用程序目錄結構,打開對應的程序。
License Manager Administrator(許可服務器管理器)對許可服務進行管理,包括啟動服務、暫停服務、重啟服務等。
2.2.1 安裝路徑
通過許可服務器關鍵字在注冊表中進行查找發現,許可服務器安裝路徑信息的注冊表項為:對于32 位操作系統,路徑為HKEY_LOCAL_MACHINE SOFTWAREESRIArcGIS 10.3 License Manager;對于64 位操作系統,路徑為HKEY_LOCAL_MACHINESOFTWAREWow6432NodeE SRIArcGIS 10.3 License Manager;子鍵為InstallDir;值類型為REG_SZ,為字符串,例如“F:Program Files(x86)Arc-GISLicense10.3”。
2.2.2 目錄結構
在
2.2.3 許可服務器管理
許可服務器為lmgrd.exe,其服務名稱為ArcGIS License Manager。可以通過ArcGIS許可服務器管理器LSAdmin.exe對服務進行管理,如圖3(a)所示。在不使用ArcGIS軟件時可手動停止服務,在需要時再啟動服務;也可通過Windows操作系統的服務管理ArcGIS許可服務,如圖3(b)所示。

Fig.3 Managing license service圖3 管理許可服務
2.2.4 注冊表應用
通過編寫程序,在注冊表中找到許可服務器安裝路徑,通過操作許可文件service.txt 自動對軟件進行授權。在更改授權前,需先停止服務,修改后要啟動服務。
還可以編寫程序,利用許可服務名稱查找服務,判斷服務是否安裝,獲得當前服務狀態(是否運行、停止或正在啟動),以及按需啟動服務和停止服務,也可以通過定時器觸發這些操作。
2.3.1 許可配置
ArcGIS Administrator(管理器)可以對ArcGIS for Desktop 的許可來源進行配置(見圖4),包括軟件功能、許可類型,以及許可管理器地址。軟件功能分為高級版(相當于ArcInfo)、標準版(相當于ArcEditor)和基礎版(相當于ArcView);許可類型分為浮動版、單機版。

Fig.4 Configure license for ArcGIS for Desktop by ArcGIS administrator圖4 ArcGIS管理器配置ArcGIS for Desktop許可
2.3.2 許可服務器地址
許可服務器地址可以是計算機名稱、IP 地址等,通過在ArcGIS Administrator 反復修改許可服務器地址,然后在注冊表中查找對應的信息,并結合相似路徑分析,可以找到對應的注冊表。對于32 位操作系統,許可服務器地址的注冊表路徑為 HKEY_LOCAL_MACHINE SOFTWAREESRILicense10.3,對于64 位操作系統,路徑為SOFTWAREWow6432NodeESRILicense10.3;子鍵為LICENSE_SERVER;值類型為REG_SZ。當許可服務器地址設置為本機(localhost)時,值為“@localhost”。
2.3.3 許可服務器類型
進一步分析發現,在注冊表中,許可類型在注冊表中存儲路徑:對于32 位操作系統為HKEY_LOCAL_MACHINESOFTWAREESRILicense10.3;對于64 位操作系統為HKEY_LOCAL_MACHINESOFTWAREWow6432NodeESRILicense10.3;子鍵為SEAT_PREFERENCE;數據類型為REG_SZ;當許可類型為floa(t浮動)時,值為“Float”。
在注冊表中可以獲取或設置許可服務器的類型和地址。例如,對機房所有電腦安裝的ArcGIS for Desktop 的許可全部定向到某一許可服務器。如果許可服務器發生了更新、升級等,自動對ArcGIS for Desktop 的許可進行更改。基于許可服務器注冊表分析結果,了解其原理,就可以開發出許可自動配置程序。
(1)開發語言選擇。開發語言(支持平臺)需能夠方便地讀寫注冊表、訪問文件系統(以讀寫許可文件)、訪問系統服務(以啟動、停止許可服務),具有快速開發、界面設計和調試方便等優點,在Windows 平臺可選Python 和C#。Python 雖然具有良好的計算生態,開發速度快,但存在界面設計不便、調試困難等缺點,因此本文選擇C#作為開發語言。
(2)開發界面可采用WinForm 或WPF 進行設計。本文選擇WPF,以自適應屏幕分辨率變化。
(3)程序功能包括手動設置許可(位于窗體的左邊)、自動設置許可(位于窗體的右邊)。
手動設置許可是通過點擊按鈕進行版本檢測、許可服務器狀態監測、啟動和停止許可服務、刪除原有許可、更新許可等操作。
自動設置許可是設置經典許可(已經安裝了許可服務器LicenseManger),也可以設置簡易許可(不用安裝許可服務器)。
最后提供了2 個小工具,一個是讀取ESRI 全部的注冊表信息,方便高級管理員分析安裝的ESRI 產品;一個是讀取ESRI 幾個主要的注冊表信息,用于輔助分析軟件運行情況。程序運行效果如圖5所示。

Fig.5 Auto-license configuration APP for ArcGIS圖5 ArcGIS自動許可配置程序
本文通過邏輯分析、反復測試,揭示了ArcGIS 許可運行機制及相關注冊表信息,為排除許可配置錯誤、開發自動配置軟件提供了全面的理論支撐?;诖嗽黹_發自動配置許可APP,可以讀取注冊表、修改注冊表,即可直接修改許可認證方式,無需手動交互操作ArcGIS License Administraot 或ArcGIS Administrator,從而達到自動化、批量化目的。該App 跨Windows 操作系統版本(32 位、64 位),跨ArcGIS 版本(9.2-10.8),具有較強的通用性、較好的實用性。因為使用C#開發,所以需要安裝.NET Framework。
該APP 可用于個人初學者輔助安裝ArcGIS,對實驗室大規模安裝有顯著效果。同時,本文分析結論對安裝和配置二次開發的Python 腳本、插件(Addin)和工具箱(toolbox)有較大啟發作用[12]。自動配置許可APP 源代碼(C#)和編譯好的應用程序(exe)可以從百度網盤下載,鏈接:https://pan.baidu.com/s/113DOUeofJ1X6FfeZo-G7NA 提取碼:s2ja。需特別說明的是,該APP 僅限于學習和研究之用,不得用于商業用途。出于演示需要,本文上傳了ArcGIS 10.2 和10.3的許可,這些許可均來自網絡。