ERP环境检测工具设计与实现 Environment Detection
环境检测的功能在安装程序中应用的很普遍,ERP程序中也需要在系统第一次启动时,对所安装的环境进行检测,遇到不满足的情况要及时提示用户更新系统。
网格中显示要检测的编号,内容描述,最后一列是检测结果,工具栏Export可以将检测结果导出为EXCEL文件。
先来看检测规则的设定,仍然是发挥XML文件的功效,设定放到Xml文件中
当需要检测新的项目时,一般只需要更改此文件内容,增加检测方法。
Method方法定义于程序中的一个静态方法,运行时反射调用此方法进行判断。
public bool CheckIfDotNetFrameworkInstalled() { return BaseCommon.CheckIfDotNetFrameworkInstalled(DotNetFrameworkVersion.Version20); } /* Could have a look in the registry for things like: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\ Excel\InstallRoot and then check in that path for excel.exe. */ public bool CheckExcelInstalled() { Type officeType = Type.GetTypeFromProgID("Excel.Application"); return officeType != null; } /* Detecting if an Oracle Database is Installed Check for the existence of an ORACLE_HOME. It's also reasonable to expect that this environment should be configured for the installation, so testing the environment variables and exiting with a sensible diagnostic (possibly suggesting they run oraenv) is a good first start. If you have an ORACLE_HOME, ORACLE_SID or other appropriate environment variable set up, you can then check for the existence of an oracle home and test for database connectivity and permissions. */ public bool CheckOracleInstalled() { string ORACLE_HOME = Environment.GetEnvironmentVariable("ORACLE_HOME"); string ORACLE_SID = Environment.GetEnvironmentVariable("ORACLE_SID"); return !string.IsNullOrWhiteSpace(ORACLE_HOME) && !string.IsNullOrWhiteSpace(ORACLE_SID); } public bool CheckJavaInstalled() { string JAVA_HOME = Environment.GetEnvironmentVariable("JAVA_HOME"); return !string.IsNullOrWhiteSpace(JAVA_HOME); } public bool CheckForMySQLServer() { string query = "SELECT Name FROM Win32_Product WHERE Name LIKE '%MySQL Server%'"; var searcher = new ManagementObjectSearcher(query); var collection = searcher.Get(); return collection.Count > 0; }
这几个功能方法是我从StackOverflow中找到的,在Windows 7 x86的机器上,结果值与实际值没有偏差。
再来分析一下,在具体的环境中,为了运行一个ERP程序有哪些内容需要我们去检测。
1 基本的.NET Framework 需要检测。现在项目基本上都升级到Target=.NET 4.0,版本4.0也要检测。.NET 4.5因为不支持XP系统,短时间还没有打算编译为.NET 4.5版本。
.NET 4.0 不允许运行于Windows 2000系统中,但可运行于XP中,XP至今仍然非常的流行,断绝了XP的支持,等于把一大批客户抛到脑后,这是不可接受的。
2 SQL Server 是否安装。应当要检测SQL Server是否已经安装,而不是在系统连接数据库时,提示无法连接到服务器。而对于数据库,SQL Server是否允许远程访问这一项,至今没有找到方法可以去检测。如果SQL Server 安装在本机,可以考虑自动启动它的,允许远程访问。
当然也不能做的太霸道了,蓝软ERP,每次以集成认证方式登陆系统后,会修改sa的密码,让我的其它ERP产品无法连接到数据库中。记得学数据库的时候,推荐安装好SQL Server后把SA帐户禁用,但我看到有些ERP产品,却以SA作为连接帐户,理论与实践确实有些差异。
3 Dot Net时代,COM/COM+已经不是很重要的技术。以.NET Framework内建的事务机制可满足事务需求。
操作系统的安全补丁,因很少用到和发现问题,没有去检测。
4 Excel/Word/PowerPoint项目的检测是为产生导出文件。ERP项目中,绝大部分单据都可以导出到EXCEL进行编辑,查看。部分单据,比如员工信息,员工简历要导出成WORD格式,以便于打印装订。
PPT格式的导出很少遇到。最近遇到一个需求,要求可以把物料清单导出为Visio格式的图形格式,以图形的方式直观的显示当前物料清单它的下一层物料列出。这个功能需求很实用,目前还没有找到办法去实现。