用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版本并复制替换也是可行的.......

#csAu3 版本: v3.3.9.21 (Beta)脚本作者:boyhong技术介绍: http://boyhong.blog.51cto.com#ce#NoTrayIcon#include 
; 请置于程序顶部$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" ThenExit (MsgBox(14, "有误:", "配置文件中[file]读取失败."))ElseIf FileExists($file) = 0 ThenExit (MsgBox(14, "有误:", "不能访问的物理路径:" & $file))EndIfLocal $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) ThenRun('explorer /select, "' & @DesktopDir & "\" & $tmpname & '"')If MsgBox(262144 + 1, "提示:", $readme & @LF & @LF & "相关文件已更新到桌面,点击确定,不再提示.") = 1 ThenIniWrite($localiniconfig, "cad", "Version", $Version) ;将服务器上的版本号更新到本地来IniWrite($localiniconfig, "cad", "time", _Now()) ;将更新时间写到本地EndIfElseSplashTextOn("Title", "拷贝更新失败", 200, 50, -1, -1, 1)Sleep(3000)SplashOff()EndIfElseSplashTextOn("Title", @UserName & "已于:" & IniRead($localiniconfig, "cad", "time", "NotFound") & "确认过更新.", 500, 50, -1, -1, 1)Sleep(3000)SplashOff()EndIfExit

 

config.ini文件的示范内容:

[cad]Version=1.0readme=公司正在推进标准化的字体与图框.请参照内带的说明文档进行更新.file=\\172.16.128.25\kaba\temp\readme.rar

 

然后做一个域用户开机启动的GPO.VBS脚本:

On error resume nextwscript.sleep 4000Set wshShell = CreateObject("Wscript.Shell")strPath = wshShell.CurrentDirectorywshshell.run \\IP\上边生成的.exe

 

实施后,至少可以得到: 1.相当大的一个客户端自动化更新率;2.管理升级维护易常方便,毕竟只需更新config.ini的内容来控制版本号及相关指向的压缩包内容即可.与此同时,也得到了公司领导的支持,向全体用户发通知邮件在并相关信息系统上挂接了如上内容实现手动更新.  

这样,行政加技术进行了一次配合.自动推向用户终端与用户手动更新进行结合将此项工作更加深入地执行了落实。

 

后注:上文提到了CAD版本的识别,并且相关图框及字体进行直接安装部署,免去用户手动的过程,也是可以轻松实现的,CAD安装路径和版本号通过注册表有关键值来读取.后续替换FONTS之类的小事就更不在话下了.若有困惑也可发邮件给我一起研究.^-^