Discuz2.5菜鸟解析-2
接着上一节我们讲到的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相关推荐
- Discuz2.5菜鸟解析-1
前天上CSDN看到,Discuz出了新的版本2.5.当时立马跑到了Discuz的老家下载了源程序来看看.对于第一次看Discuz的兄弟们基本上100%都是不适应的,因为discuz为了考虑到程序员与美 ...
- C语言整数加法器,【菜鸟解析】C++大数加法器的实现
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //数组倒置函数 void Big_int::reversal() { int i,temp; for(i=0;i { temp=addend[i]; a ...
- 全网最简单的C# json数据解析 无敌菜鸟教程 十分钟搞定json数据解析
全网最简单的C# json数据解析 无敌菜鸟教程 十分钟搞定json数据解析 废话先说一点,算了.直接进入正题吧. 用例子说话: JSON数据: string json: " {" ...
- 爬虫之bs4、xpath数据解析(案例—scrapy获取菜鸟HTML页面数据)
文章结构 1.爬虫概念简介 2.爬虫的流程 3.数据解析 (1)bs4解析 (I)根据标签名查找 soup.a (II)获取属性 soup.a[attr] (III)soup.a.text 获取响应文 ...
- 视频基础知识:告别菜鸟 高清视频编码及封装格式解析
告别菜鸟 高清视频编码及封装格式解析 在如今的互联网时代,对于全高清视频文件来说,非常容易获取.不像以前在拨号上网的年代,可谓是资源匮乏,平时电脑看个VCD,就已经觉得是比较出色的画质了.时代在发展, ...
- 安卓小菜鸟重拾Java系列002.Java转义字符与与sax解析xml
已经好久没有更新博客了,炎热的夏天正如我的心情一样枯燥乏味,今年是互联的寒冬,作为一个菜鸟已经深深的感觉到了,因为自己失业了.从去年的年末的一些听闻,自己竟没有准备好迎接失业,以至于一年了,只比以前强 ...
- [游戏开发-学习笔记]菜鸟慢慢飞(12)- Unity3D中LitJson 解析遇到的问题
1.数据格式问题 问题:服务器那边设置的HP的类型是float,如果传给客户端的是1000,没有小数点解析的时候LitJson会优先按照int去解析.但是呢,服务器回头还有可能传回的是1000.50这 ...
- 菜鸟学习Spring——SpringMVC注解版解析不同格式的JSON串
一.概述 不同格式的JSON串传到后台来实现功能这个是我们经常要做的一件事,本篇博客就给大家介绍四种不同的JSON串传到后台后台如何用@RequestBody解析这些不同格式的JSON串的. 二.代码 ...
- Java菜鸟补给站--HTML,XML,以及解析XML
目录 HTML,XML的区别 解析XML DOM解析 SAX解析 选择DOM还是选择SAX? DOM4J解析 JDOM解析 HTML,XML的区别 1. XML是区分大小写字母的,HTML不区分. 2 ...
最新文章
- Swift和Java在函数(method/方法)方面的比较
- SVN中 “containing working copy admin area is missin
- 单交换机VLAN虚拟局域网划分
- Nginx教程-location配置
- MySQL面试准备——64页pdf
- 源码包安装mysql5.7.25_centos源码安装mysql5.7.25-boost
- 今日恐慌与贪婪指数为40 恐慌程度有所上升
- 动态规划(四)--最长公共子序列
- Python 的NumPy 库中dot()函数详解
- 毕业后半年就变成了一条“狗
- CVE-2017-4901 VMware虚拟机逃逸漏洞分析【Frida Windows实例】
- 拓端tecdat|R语言用RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测
- 推荐子龙山人的emacs的教程
- 微信小程序原生自定义弹窗
- 第四篇Scrum冲刺博客
- 牛客刷题系列(C++)——详解MGJ8 链表合并(目前内存开销最小)
- 使用sklearn构建完整的回归项目(一)
- 微软宣布 IE 浏览器将于 6 月 16 日正式退役,你对它有哪些回忆?
- android指南针Demo,谁有安卓简易指南针的DEmo
- 【折腾电脑】win笔记本雷电3外接显卡过程记录(使用内屏)、雷电三驱动怎么更新