ERP环境检测工具设计与实现 Environment Detection

环境检测的功能在安装程序中应用的很普遍,ERP程序中也需要在系统第一次启动时,对所安装的环境进行检测,遇到不满足的情况要及时提示用户更新系统。

image

网格中显示要检测的编号,内容描述,最后一列是检测结果,工具栏Export可以将检测结果导出为EXCEL文件。

先来看检测规则的设定,仍然是发挥XML文件的功效,设定放到Xml文件中

image

当需要检测新的项目时,一般只需要更改此文件内容,增加检测方法。

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 安装在本机,可以考虑自动启动它的,允许远程访问。

image

当然也不能做的太霸道了,蓝软ERP,每次以集成认证方式登陆系统后,会修改sa的密码,让我的其它ERP产品无法连接到数据库中。记得学数据库的时候,推荐安装好SQL Server后把SA帐户禁用,但我看到有些ERP产品,却以SA作为连接帐户,理论与实践确实有些差异。

3  Dot Net时代,COM/COM+已经不是很重要的技术。以.NET Framework内建的事务机制可满足事务需求。

操作系统的安全补丁,因很少用到和发现问题,没有去检测。

4  Excel/Word/PowerPoint项目的检测是为产生导出文件。ERP项目中,绝大部分单据都可以导出到EXCEL进行编辑,查看。部分单据,比如员工信息,员工简历要导出成WORD格式,以便于打印装订。

PPT格式的导出很少遇到。最近遇到一个需求,要求可以把物料清单导出为Visio格式的图形格式,以图形的方式直观的显示当前物料清单它的下一层物料列出。这个功能需求很实用,目前还没有找到办法去实现。

posted @ 2013-05-08 16:22  信息化建设  阅读(1346)  评论(2编辑  收藏  举报