用AUTOIT來管理升級分發公司設計圖框及字體庫
筆者所在的公司隸屬製造業,想必大家第一反映就會想到CAD軟件,筆者所在的公司是個有"年頭"的公司,當然地,從CadR14,2000,2004,2006......一直到最新的2015,這些如繁星的CAD版本遍佈公司各個專業部門及設計人員,由此帶來一系列的問題:
1.帶有公司LOGO及管理特色的圖框在公司歷年發展更新過程中,很多已出現新舊圖框混用;
2.經常有用戶抱怨,打開DWG,因字體原因亂碼啦;
3.公司明明正版化了某些版本,因盜版版本依舊存在,造成低版本打不開高版本DWG,有關圖框適配性也跟不上;
......
如何形成一個機制向全體用戶分發?分發後,若升級變更了,如何向全體用戶分發更新的版本?傳統意義上靠行政發通知的形勢在一些小公司很有效果?若在一些有多個辦公地點,部門衆多,用戶衆多複雜的環境裏呢?再加之這個行業經常性出差的員工佔一定比重,如何能確保及時地執行到位?就算行政通知執行力很強,當升級了三五個版本後,終端用戶有新入職的員工、在重做操作系統後、出差請假回到工作等後續工作中識別這幾版本的最新版,恐怕也是一個問題;
在這個事件中IT部門能做什麼?如何在不增加經濟成本的情況下協助好有關部門的此項工作,好在筆者公司有域環境,雖無任何其它管理分發平臺,但藉助"AD+腳本"可以有一個突破口:
進行任務分解:1.向全體用分發我們自定義版本號的圖框和字體庫(也可以精確到裝有CAD軟件的設計專業用戶才分發);2.圖框和字體庫的版本號管理,檢測到舊版本提示升級,檢測到新版版本就略過提示;3.向盜版CAD版本彈窗提示用戶(也可以實現回傳檢測LOG,客戶端智能啓動其卸載等)
結合公司當下具體環境,若對客戶端盜版CAD彈窗及其啓動卸載會干擾業務運行,從用戶體驗的角度肯定不可取,Leader說會在行政發文中明確這一點,讓各部門和項目組“自治”。那麼以上分解的三項任務只剩下兩項。
;示範腳本如下,若需進一步精確定位,實現全自動識別CAD版本並複製替換也是可行的.......
#cs Au3 版本: v3.3.9.21 (Beta) 腳本作者:boyhong 技術介紹: http://boyhong.blog.51cto.com #ce #NoTrayIcon #include <Date.au3> ; 請置於程序頂部 $g_szVersion = "CheckCad" If WinExists($g_szVersion) Then Exit ; 此程序已經運行了 AutoItWinSetTitle($g_szVersion) Local $iniconfig = @ScriptDir & "\config.ini" Local $Version = IniRead($iniconfig, "cad", "Version", "NotFound") ;今後升級這個配置文件中的版本號即可。比如:1.0 1.1....以此類推。 If $Version = "NotFound" Then Exit (MsgBox(14, "有誤:", "配置文件中[Version]讀取失敗.")) Local $readme = IniRead($iniconfig, "cad", "readme", "NotFound") ;彈窗的話語。 If $readme = "NotFound" Then Exit (MsgBox(14, "有誤:", "配置文件中[readme]讀取失敗.")) Local $file = IniRead($iniconfig, "cad", "file", "NotFound") ;可壓縮好包放置在某可訪問共享目錄下,比如:\\ip\JCT.ZIP 並手動修改好配置文件 If $file = "NotFound" Then Exit (MsgBox(14, "有誤:", "配置文件中[file]讀取失敗.")) ElseIf FileExists($file) = 0 Then Exit (MsgBox(14, "有誤:", "不能訪問的物理路徑:" & $file)) EndIf Local $localiniconfig = @AppDataDir & "\" & @UserName & "JCTCAD.ini" Local $localVersion = IniRead($localiniconfig, "cad", "Version", "") If $Version <> $localVersion Then $tmpname = "Update" & $Version & @YEAR & @MON & @MDAY & StringRight($file, 4) ;在用戶終端構造一個個性的文件名。 If FileCopy($file, @DesktopDir & "\" & $tmpname, 1) Then Run('explorer /select, "' & @DesktopDir & "\" & $tmpname & '"') If MsgBox(262144 + 1, "提示:", $readme & @LF & @LF & "相關文件已更新到桌面,點擊確定,不再提示.") = 1 Then IniWrite($localiniconfig, "cad", "Version", $Version) ;將服務器上的版本號更新到本地來 IniWrite($localiniconfig, "cad", "time", _Now()) ;將更新時間寫到本地 EndIf Else SplashTextOn("Title", "拷貝更新失敗", 200, 50, -1, -1, 1) Sleep(3000) SplashOff() EndIf Else SplashTextOn("Title", @UserName & "已於:" & IniRead($localiniconfig, "cad", "time", "NotFound") & "確認過更新.", 500, 50, -1, -1, 1) Sleep(3000) SplashOff() EndIf Exit
config.ini文件的示範內容:
[cad] Version=1.0 readme=公司正在推進標準化的字體與圖框.請參照內帶的說明文檔進行更新. file=\\172.16.128.25\kaba\temp\readme.rar
然後做一個域用戶開機啓動的GPO.VBS腳本:
On error resume next wscript.sleep 4000 Set wshShell = CreateObject("Wscript.Shell") strPath = wshShell.CurrentDirectory wshshell.run \\IP\上邊生成的.exe
實施後,至少可以得到: 1.相當大的一個客戶端自動化更新率;2.管理升級維護易常方便,畢竟只需更新config.ini的內容來控制版本號及相關指向的壓縮包內容即可.與此同時,也得到了公司領導的支持,向全體用戶發通知郵件在並相關信息系統上掛接瞭如上內容實現手動更新.
這樣,行政加技術進行了一次配合.自動推向用戶終端與用戶手動更新進行結合將此項工作更加深入地執行了落實。
後注:上文提到了CAD版本的識別,並且相關圖框及字體進行直接安裝部署,免去用戶手動的過程,也是可以輕鬆實現的,CAD安裝路徑和版本號通過註冊表有關鍵值來讀取.後續替換FONTS之類的小事就更不在話下了.若有困惑也可發郵件給我一起研究.^-^