接着上一节我们讲到的Install,我们接着来看第二步的实现。

在这个页面中检测的功能,主要是通过以下这段代码来实现检测功能,呵呵,还是用的字符串拼接输出,呵呵,晕没有办法,Discuz的程序员就是这样写的。》

   1:  <%
   2:       bool err = false;
   3:       string result = SetupPage.InitialSystemValidCheck(ref err);
   4:       Response.Write("<font color=red>"+result+"</font>");
   5:  %>

具体的实现代码如下:

   1:  public static string InitialSystemValidCheck(ref bool error)
   2:  {
   3:      error = false;
   4:      StringBuilder sb = new StringBuilder();
   5:      sb.Append("<table cellSpacing='0' cellPadding='0' width='90%' align='center' border='0' 
   6:                 bgcolor='#666666' style='font-size:12px'>");
   7:   
   8:      HttpContext context = HttpContext.Current;
   9:   
  10:      string filename = null;
  11:      if (context != null)
  12:          filename = context.Server.MapPath("/DNT.config");
  13:      else
  14:          filename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DNT.config");
  15:   
  16:      //系统BIN目录检查
  17:      sb.Append(IISSystemBINCheck(ref error));
  18:   
  19:   
  20:      //            GetRootDntconfigPath();
  21:      //检查Dnt.config文件的有效性
  22:      if (!GetRootDntconfigPath())
  23:      {
  24:          sb.Append("<tr style=\"height:15px\"><td bgcolor='#ffffff' width='5%'><img src='images/error.gif' 
  25:                     width='16' height='16'></td><td bgcolor='#ffffff' width='95%'> DNT.config 
  26:                     不可写或没有放置正确, 相关问题详见安装文档!</td></tr>");
  27:          error = true;
  28:      }
  29:      else
  30:      {
  31:          sb.Append("<tr style=\"height:15px\"><td bgcolor='#ffffff' width='5%'><img src='images/ok.gif' 
  32:                     width='16' height='16'></td><td bgcolor='#ffffff' width='95%'>对 DNT.config 验证通过!</td>
  33:                    </tr>");
  34:      }
  35:   
  36:   
  37:      //检查系统目录的有效性
  38:      string folderstr = "admin,aspx,avatars,cache,config,editor,images,templates,upload";
  39:      foreach (string foldler in folderstr.Split(','))
  40:      {
  41:          if (!SystemFolderCheck(foldler))
  42:          {
  43:              sb.Append("<tr><td bgcolor='#ffffff' width='5%'><img src='images/error.gif' width='16' height='16'>
  44:                        </td><td bgcolor='#ffffff' width='95%'>对 " + foldler + " 目录没有写入和删除权限!</td>
  45:                        </tr>");
  46:              error = true;
  47:          }
  48:          else
  49:          {
  50:              sb.Append("<tr><td bgcolor='#ffffff' width='5%'><img src='images/ok.gif' width='16' height='16'>
  51:                </td><td bgcolor='#ffffff' width='95%'>对 " + foldler + " 目录权限验证通过!</td></tr>");
  52:          }
  53:      }
  54:      string filestr = "admin\\xml\\navmenu.config,javascript\\mymenu.js,install\\systemfile.aspx,upgrade
  55:                       \\systemfile.aspx";
  56:      foreach (string file in filestr.Split(','))
  57:      {
  58:          if (!SystemFileCheck(file))
  59:          {
  60:              sb.Append("<tr><td bgcolor='#ffffff' width='5%'><img src='images/error.gif' width='16' height='16'>
  61:                        </td><td bgcolor='#ffffff' width='95%'>对 " + file.Substring(0,file.LastIndexOf('\\')) +
  62:                        " 目录没有写入和删除权限!</td></tr>");
  63:              error = true;
  64:          }
  65:          else
  66:          {
  67:              sb.Append("<tr><td bgcolor='#ffffff' width='5%'><img src='images/ok.gif' width='16' height='16'>
  68:              </td><td bgcolor='#ffffff' width='95%'>对 " + file.Substring(0, file.LastIndexOf('\\')) + 
  69:              " 目录权限验证通过!</td></tr>");
  70:          }
  71:      }
  72:   
  73:     if(!TempTest())
  74:     {
  75:         sb.Append("<tr><td bgcolor='#ffffff' width='5%'><img src='images/error.gif' width='16' height='16'>
  76:                  </td><td bgcolor='#ffffff' width='95%'>您没有对 " + Path.GetTempPath() + 
  77:                  " 文件夹访问权限,详情参见安装文档.</td></tr>");
  78:         error = true;
  79:     }
  80:     else
  81:     {
  82:      if (!SerialiazeTest())
  83:      {
  84:          sb.Append("<tr><td bgcolor='#ffffff' width='5%'><img src='images/error.gif' width='16' height='16'>
  85:                     </td><td bgcolor='#ffffff' width='95%'>对config文件反序列化失败,详情参见安装文档.</td>
  86:                    </tr>");
  87:          error = true;
  88:      }
  89:      else
  90:      {
  91:          sb.Append("<tr><td bgcolor='#ffffff' width='5%'><img src='images/ok.gif' width='16' height='16'>
  92:                 </td><td bgcolor='#ffffff' width='95%'>反序列化验证通过!</td></tr>");
  93:      } 
  94:     }
  95:      sb.Append("</table>");
  96:   
  97:      return sb.ToString();
  98:  }

在以上程序中,它首先会去检测DNT.Config文件的有效性

   1:    string filename = null;
   2:     if (context != null)
   3:                  filename = context.Server.MapPath("/DNT.config");
   4:     else
   5:                  filename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DNT.config");

接着再去检测IIS目录中的DLL是否存在的有效性:

   1:   public static string IISSystemBINCheck(ref bool error)
   2:   {
   3:       string binfolderpath = HttpRuntime.BinDirectory;
   4:   
   5:       string result = "";
   6:       try
   7:       {
   8:           string[] assemblylist = new string[] { "Discuz.Aggregation.dll", "Discuz.Cache.dll", 
   9:                                                  "Discuz.Common.dll", "Discuz.Config.dll", 
  10:               "Discuz.Control.dll", "Discuz.Data.dll", "Discuz.Data.SqlServer.dll","Discuz.Entity.dll",
  11:               "Discuz.Event.dll", "Discuz.Forum.dll",
  12:               "Discuz.Install.dll", "Discuz.Plugin.dll","Discuz.Plugin.Preview.Jpg.dll",
  13:               "Discuz.Plugin.Spread.dll", "Discuz.Web.Admin.dll",
  14:               "Discuz.Web.dll", "Discuz.Web.Services.dll","Interop.SQLDMO.dll","Newtonsoft.Json.dll" };
  15:           bool isAssemblyInexistence = false;
  16:           ArrayList inexistenceAssemblyList = new ArrayList();
  17:           foreach (string assembly in assemblylist)
  18:           {
  19:               if (!File.Exists(binfolderpath + assembly))
  20:               {
  21:                   isAssemblyInexistence = true;
  22:                   error = true;
  23:                   inexistenceAssemblyList.Add(assembly);
  24:               }
  25:           }
  26:           if (isAssemblyInexistence)
  27:           {
  28:               foreach (string assembly in inexistenceAssemblyList)
  29:               {
  30:                       result += "<tr><td bgcolor='#ffffff' width='5%'><img src='images/error.gif' 
  31:                                 width='16' height='16'></td><td bgcolor='#ffffff' width='95%'>" + assembly + 
  32:                                " 文件放置不正确<br/>请将所有的dll文件复制到目录 " + binfolderpath + 
  33:                                " 中.</td></tr>";
  34:               }
  35:           }
  36:       }
  37:       catch
  38:       {
  39:           result += "<tr><td bgcolor='#ffffff' width='5%'><img src='images/error.gif' width='16' height='16'>
  40:                     </td><td bgcolor='#ffffff' width='95%'>请将所有的dll文件复制到目录 " + binfolderpath 
  41:                      + " 中.</td></tr>";
  42:           error = true;
  43:       }
  44:   
  45:       return result;
  46:   }
在以上代码中用到了一些不常用的类,比如HttpRuntime类,我们过HttpRuntime这个类中的BinDirectory这个属性找到WEB程序所用到的bin目录,
之后用IO中的File.Exist来检测这个文件是否存在,不过我再一次的问一下,难道Discuz的程序员不知道@号的存在???,再一个就是对StringBuilder
在程序中的性能问题表示怀疑。

再接下来是检测Dnt.config文件的有效性:

   1:   public static bool GetRootDntconfigPath()
   2:   {
   3:       try
   4:       {
   5:   
   6:           HttpContext context = HttpContext.Current;
   7:           string webconfigfile = "";
   8:           if (!Utils.FileExists(webconfigfile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DNT.config"))
   9:               && (!Utils.FileExists(webconfigfile = Path.Combine(context.Request.PhysicalApplicationPath, "dnt.config")))
  10:               && (!Utils.FileExists(webconfigfile = Utils.GetMapPath("../dnt.config")))
  11:               && (!Utils.FileExists(webconfigfile = Utils.GetMapPath("http://www.cnblogs.com/dnt.config")))
  12:               && (!Utils.FileExists(webconfigfile = Utils.GetMapPath("http://www.cnblogs.com/../dnt.config"))))
  13:           {
  14:               return false;
  15:           }
  16:           else
  17:           {
  18:               StreamReader sr = new StreamReader(webconfigfile);
  19:               string content = sr.ReadToEnd();
  20:               sr.Close();
  21:               content += " ";
  22:               StreamWriter sw = new StreamWriter(webconfigfile, false);
  23:               sw.Write(content);
  24:               sw.Close();
  25:               return true;
  26:           }
  27:       }
  28:       catch
  29:       {
  30:           return false;
  31:       }
  32:   }
在这个检测的过程中用到了Discuz.Common中的Utils.cs这个类,这个类中主要是提供了一些工具类的支持,呵呵。其中有一些真的是不错的,以后可以
拿来借鉴一下。

为了方便 大家理解我做了一张思维图,供大家分析。

其中的SerialiazeTest()成员方法中用到了序列化的功能。在下一小节中再继续分析。

转自:http://www.cnblogs.com/chu888chu888/archive/2008/07/30/1256630.html

Discuz2.5菜鸟解析-2相关推荐

  1. Discuz2.5菜鸟解析-1

    前天上CSDN看到,Discuz出了新的版本2.5.当时立马跑到了Discuz的老家下载了源程序来看看.对于第一次看Discuz的兄弟们基本上100%都是不适应的,因为discuz为了考虑到程序员与美 ...

  2. C语言整数加法器,【菜鸟解析】C++大数加法器的实现

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //数组倒置函数 void Big_int::reversal() { int i,temp; for(i=0;i { temp=addend[i]; a ...

  3. 全网最简单的C# json数据解析 无敌菜鸟教程 十分钟搞定json数据解析

    全网最简单的C# json数据解析 无敌菜鸟教程 十分钟搞定json数据解析 废话先说一点,算了.直接进入正题吧. 用例子说话: JSON数据: string json: " {" ...

  4. 爬虫之bs4、xpath数据解析(案例—scrapy获取菜鸟HTML页面数据)

    文章结构 1.爬虫概念简介 2.爬虫的流程 3.数据解析 (1)bs4解析 (I)根据标签名查找 soup.a (II)获取属性 soup.a[attr] (III)soup.a.text 获取响应文 ...

  5. 视频基础知识:告别菜鸟 高清视频编码及封装格式解析

    告别菜鸟 高清视频编码及封装格式解析 在如今的互联网时代,对于全高清视频文件来说,非常容易获取.不像以前在拨号上网的年代,可谓是资源匮乏,平时电脑看个VCD,就已经觉得是比较出色的画质了.时代在发展, ...

  6. 安卓小菜鸟重拾Java系列002.Java转义字符与与sax解析xml

    已经好久没有更新博客了,炎热的夏天正如我的心情一样枯燥乏味,今年是互联的寒冬,作为一个菜鸟已经深深的感觉到了,因为自己失业了.从去年的年末的一些听闻,自己竟没有准备好迎接失业,以至于一年了,只比以前强 ...

  7. [游戏开发-学习笔记]菜鸟慢慢飞(12)- Unity3D中LitJson 解析遇到的问题

    1.数据格式问题 问题:服务器那边设置的HP的类型是float,如果传给客户端的是1000,没有小数点解析的时候LitJson会优先按照int去解析.但是呢,服务器回头还有可能传回的是1000.50这 ...

  8. 菜鸟学习Spring——SpringMVC注解版解析不同格式的JSON串

    一.概述 不同格式的JSON串传到后台来实现功能这个是我们经常要做的一件事,本篇博客就给大家介绍四种不同的JSON串传到后台后台如何用@RequestBody解析这些不同格式的JSON串的. 二.代码 ...

  9. Java菜鸟补给站--HTML,XML,以及解析XML

    目录 HTML,XML的区别 解析XML DOM解析 SAX解析 选择DOM还是选择SAX? DOM4J解析 JDOM解析 HTML,XML的区别 1. XML是区分大小写字母的,HTML不区分. 2 ...

最新文章

  1. Swift和Java在函数(method/方法)方面的比较
  2. SVN中 “containing working copy admin area is missin
  3. 单交换机VLAN虚拟局域网划分
  4. Nginx教程-location配置
  5. MySQL面试准备——64页pdf
  6. 源码包安装mysql5.7.25_centos源码安装mysql5.7.25-boost
  7. 今日恐慌与贪婪指数为40 恐慌程度有所上升
  8. 动态规划(四)--最长公共子序列
  9. Python 的NumPy 库中dot()函数详解
  10. 毕业后半年就变成了一条“狗
  11. CVE-2017-4901 VMware虚拟机逃逸漏洞分析【Frida Windows实例】
  12. 拓端tecdat|R语言用RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测
  13. 推荐子龙山人的emacs的教程
  14. 微信小程序原生自定义弹窗
  15. 第四篇Scrum冲刺博客
  16. 牛客刷题系列(C++)——详解MGJ8 链表合并(目前内存开销最小)
  17. 使用sklearn构建完整的回归项目(一)
  18. 微软宣布 IE 浏览器将于 6 月 16 日正式退役,你对它有哪些回忆?
  19. android指南针Demo,谁有安卓简易指南针的DEmo
  20. 【折腾电脑】win笔记本雷电3外接显卡过程记录(使用内屏)、雷电三驱动怎么更新

热门文章

  1. ZJOI2019 线段树
  2. mongodb服务安装及部署配置
  3. CentOS 6下SSH限制IP和用户登录
  4. 支持统一码 10 的花园明朝字库终于更新出来了
  5. 关于 Injection of autowired dependencies failed 错误的解决方法
  6. angular学习笔记(六)-非入侵式javascript
  7. Centos5.5几种提高工作效率的方法
  8. Markdown 调整图片位置与大小
  9. 10532: 花 [dp]
  10. curl传post数据流