
2008年11月1日
| 控件 |
主要数据结构 |
功能 |
描述和主要用途 |
| GridView |
表 |
读取与编辑 |
每个字段一列
每个字段值对应于自已的一个单元格
在网络中显示多条记录
编辑现有记录 |
| DataList |
表或树 |
读取和编辑 |
所有字段在一个单元格中
一个单元格等于一条记录
在网格中显示多条记录
在GridView创建新记录 |
| Repeater |
表或树 |
只读 |
所有字段在一个单元格中
一个单元格等于一条记录
在网格中显示多条记录.为GridView创建新记录 |
| DetailView |
表或树 |
读取与编辑、创建 |
显示单个记录
提供默认结构
编辑现有记录
创建新记录 |
| FormView |
表或树 |
读取与编辑、创建 |
显示单个记录
没有默认结构
编辑现有记录
创建新记录 |
| DropDownList和ListBox |
表或树 |
只读 |
列出字段
让用户选择
显示供用户选择的数据 |
| SiteMapPath |
树 |
只读 |
列出主页和当前页面之间的页面名称
用于确定当前所处的站点位置 |
| Menu |
树 |
只读 |
显示根节点,能够选择一次展开一个子节点
用于显示选择的菜单 |
| TreeView |
树 |
只读 |
显示根节点,能够选择一次展开一个子节点
用于同时显示多个子节点 |
数据绑定控件比较(Reapter\DataList\GridView\DatailsView\FormView):
1.插入功能方面:
DetailsView和FormView具有插入功能,其它控件没有
2.模板
DataList\FormView\Repeater三种必须编辑模板,而
GridView和DetailsView只有在将列转换成模板列以后才会出现各种模板.
3.自动分页功能
GridView ,DetailsView和FormView都是2.0版本新增控件,内置了分页,排序等等功能,
其他需要手工定义
4.数据呈现方式:
GridView,DataList,Repeator用于呈现多列数据,
DetailsView,FormView用于呈现单列数据,即常用的数据明细.
DataList和Reapter都需要编辑模板列,而在模板列当中可以添加TextBox,同时可以指定TextBox的ID从而实现提取用户输入的值,但是DataGrid和GridView两个件是不需要编辑模板的,它的编辑功能是自动生成的我们无法知道那些文本框的ID,也就无法通过ID来获取用户的输入,那么可以通过对单元格的引用来实现:
private void DataGrid1_UpdateCommand(object source,xx)
{
string bkid=DataGrid1.DataKeys[e.Item.ItemIndex].toString();//提取主键
string bktitle=((TextBox)e.Item.Cells[1].Controls[0]).Text;//提取用户的输入
}
一.进入编辑状态:
DataList1.EditItemIndex = e.Item.ItemIndex;
DataGrid1.EditItemIndex = e.Item.ItemIndex;
GridView1.EditIndex = e.NewEditIndex;
DetailsView1.ChangeMode(DetailsViewMode.Edit);//进入编辑状态
DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);//退出编辑状态
二.设置主键:
DataList1.DataKeyField = "bkid";
DataGrid1.DataKeyField = "bkid";
string[] str={"bkid"};
GridView1.DataKeyNames = str;
三.提取主键:
string bkid = DataList1.DataKeys[e.Item.ItemIndex].ToString();//DataList
string bkid = DataGrid1.DataKeys[e.Item.ItemIndex].ToString();//DataGrid
string bkid = GridView1.DataKeys[e.RowIndex].Value.ToString();//GridView
string bkid = DetailsView1.DataKey[0].ToString();
四.查找控件:
string bktitle = ((TextBox)e.Item.FindControl("txtTile")).Text;//DataList
string bktitle = ((TextBox)e.Item.Cells[1].Controls[0]).Text;//DataGrid
string bktitle = ((TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0]).Text;
string bktitle = ((TextBox)DetailsView1.Rows[1].Cells[1].Controls[0]).Text;
注意查找控件有两种方法:(各数据绑定控件的都可以用下面两种方法进行查找)
1.如果知道控件的ID可以用这种方法
((TextBox)e.Item.FindControl("txtTile")).Text;//这是查找
2.如果不知道控件的ID可用这种方法
((TextBox)e.Item.Cells[1].Controls[0]).Text;//这是索引
五.给删除按钮添加确认:
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
LinkButton lbtn =(LinkButton) e.Item.FindControl("lbtndelete");
lbtn.Attributes.Add("OnClick","return confirm(‘确定要删除吗?‘)");
}
}
protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
{
LinkButton lbtn = (LinkButton)e.Item.Cells[3].Controls[0];
lbtn.Attributes.Add("OnClick","return confirm(‘确认删除?‘)");
}
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType== DataControlRowType.DataRow)
{
string strid = e.Row.Cells[0].Text;//获取第一行的字段值;
e.Row.Cells[3].Attributes.Add("OnClick", "return confirm(‘确认删除\""+strid+"\"?‘)");
//用了两个转义符将第一列的值用引号括起来,注意转义符后面一个将不被解释,是直接放上去;
}
}
posted @
2008-11-01 08:37 方庆生 阅读(24) |
评论 (0) |
编辑

2008年10月10日
右下角出现一个红色带白色叉的图标提示Your computer is infected!
Windows has detected spyware infection
It is recomended to use special antispyware tools to pervent
data loss.Windows will now downlond and install the most
up-to-date antispyware for you.
Click here to protect you computer from spyware!
中文翻译:
windows检测到有间谍软件侵入!要使用特殊的反间谍工具防止数据丢失。windows准备为你下载安装wost-up-date反间谍软件。
Win32.Troj.GuiseAV.ak.28672
病毒名称(中文): 恶毒保安28672 病毒别名:
威胁级别:★☆☆☆☆
病毒类型:黑客程序 病毒长度: 28672
影响系统:Win9x WinMe WinNT Win2000 WinXP Win2003
病毒行为:
这是一个伪装成安全软件的恶意程序,运行后修改注册表中安全设置项,同时恐吓用户系统中已发现恶意软件,称必须下载安装其指定的安全工具。
1.病毒运行后首先检测注册表是否存在如下项,判断系统是否已被感染:
HKLM"Software"WinReanimator"license;
检测如下位置判断是否有同类“产品”进驻系统:
HKLM"SoftWare"XP_SecurityCenter"license
HKLM"SoftWare"WinAntispyware2008"license
发现存在以上键值时,病毒进程结束。
2.查询注册表项HKLM"SOFTWARE"Microsoft"Windows"CurrentVersion"ProgramFilesDir获取应用程序安装路径,判断是否存在%ProgramFiles%"XP_SecurityCenter"XP_SecurityCenter.exe文件,同样,若存在该文件,进程结束。
3.修改注册表如下键值,降低Internet Exporer的安全设置
HKLM"SOFTWARE"Microsoft"Windows"CurrentVersion"Internet Settings"Zones"0
"1200"=0
"1201"=0
"1208"=0
"1608"=0
"1804"=1
4.修改以下注册表项,减低系统安全设置 HKLM"SOFTWARE"Microsoft"SecurityCenter""AntiVirusDisableNotify" = "01000000"
HKLM"SOFTWARE"Microsoft"SecurityCenter""FirewallDisableNotify" = "01000000"
HKLM"SOFTWARE"Microsoft"SecurityCenter""UpdatesDisableNotify" = "01000000"
HKCU"SOFTWARE"Microsoft"SecurityCenter""AntiVirusDisableNotify" = "01000000"
HKCU"SOFTWARE"Microsoft"SecurityCenter""FirewallDisableNotify" = "01000000"
HKCU"SOFTWARE"Microsoft"SecurityCenter""UpdatesDisableNotify" = "01000000"
HKLM"SYSTEM"CurrentControlSet"Services"SharedAccess"Parameters"FirewallPolicy"Standa
rdProfile"EnableFirewall" = "00000000"
5. 删除系统中的所有BHO插件,修改注册表项
HKCU"Software"Microsoft"InternetExplorer"Main""EnableBrowserExtensions" = "yes"
HKCU"Software"Microsoft"InternetExplorer"Main""SearchBar" = "http://www.google.com/ie"
HKCU"Software"Microsoft"InternetExplorer"Main""SearchPage" = "http://www.google.com"
HKCU"Software"Microsoft"InternetExplorer"Main""StartPage" = "http://www.google.com"
HKLM"Software"Microsoft"InternetExplorer"Main""Default_Search_URL" = "http://www.google.com/ie"
HKLM"Software"Microsoft"InternetExplorer"Main""SearchPage" = "http://www.google.com"
HKLM"Software"Microsoft"InternetExplorer"Main""StartPage" = "http://www.google.com"
HKLM"Software"Microsoft"InternetExplorer"Search""SearchAssistant" = http://www.google.com/
6.从指定地址下载文件http://virus-q***k-s**n.com/?wmid=1049&l=12&it=2&s=7,保存为%windir%"system32"winivstr.exe(已无法下载);
7.在系统托盘区弹出警告窗口,显示"Your computer is infected………………",恐吓用户电脑已被病毒感染,需要安装该安全软件,当用户点击该窗口时即运行文件winivstr.exe。
posted @
2008-10-10 19:08 方庆生 阅读(71) |
评论 (0) |
编辑

2008年10月9日
耦合这个概念大家都很清楚,它的强弱直接影响软件的维护和升级。耦合的强弱叫做耦合度。
我们的软件工程里面一个基本原则是高内聚,低耦合。
模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。
降低模块间的耦合度能减少模块间的影响,防止对某一模块修改所引起的“牵一发动全身”的水波效应,保证系统设计顺利进行。
两个模块之间的耦合方式通常可分为7种,按其耦合度从低到高的次序依此为:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。
内聚度是指内部各元素之间联系的紧密程度,模块的内聚种类通常可分为7种,
按其内聚度从低到高的次序依此为:偶然内聚、逻辑内聚、瞬时内聚、过程内聚、通信内聚、顺序内聚、功能内聚。
關于耦合度的概念,這是很空乏的話題。很容易陷入混亂。
推薦文章:
耦合度量如何影响代码的质量
http://www-128.ibm.com/developerworks/cn/java/j-perf07304/index.html
posted @
2008-10-09 17:13 方庆生 阅读(33) |
评论 (0) |
编辑

2008年10月7日
C# 中的常用正则表达式总结
新手朋友注意一定要手册一下哦,这样可以节省很多写代码的时间,中国自学编程网为新手朋友整理发布。
只能输入数字:"^[0-9]*$"。
只能输入n位的数字:"^\d{n}$"。
只能输入至少n位的数字:"^\d{n,}$"。
只能输入m~n位的数字:。"^\d{m,n}$"
只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。
只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。
只能输入非零的正整数:"^\+?[1-9][0-9]*$"。
只能输入非零的负整数:"^\-[1-9][]0-9"*$。
只能输入长度为3的字符:"^.{3}$"。
只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。
验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
验证是否含有^%&’,;=?$\"等字符:"[^%&’,;=?$\x22]+"。
只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"
验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。
验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。
验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。
利用正则表达式限制网页表单里的文本框输入内容:
用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,’’)" onbeforepaste="clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^\u4E00-\u9FA5]/g,’’))"
用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,’’)" onbeforepaste="clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^\uFF00-\uFFFF]/g,’’))"
用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,’’) "onbeforepaste="clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^\d]/g,’’))"
用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,’’) "onbeforepaste="clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^\d]/g,’’))"
得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1
以下是引用片段:
s="http://www.9499.net/page1.htm"
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s) |
匹配双字节字符(包括汉字在内):[^\x00-\xff]
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
以下是引用片段:
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;} |
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
以下是引用片段:
String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
} |
利用正则表达式分解和转换IP地址:
下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:
以下是引用片段:
function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
} |
posted @
2008-10-07 00:39 方庆生 阅读(35) |
评论 (0) |
编辑

2008年10月6日
'/Web' 應用程式中發生伺服器錯誤。
--------------------------------------------------------------------------------
無法存取 IIS Metabase。
描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。
例外詳細資訊: System.Web.Hosting.HostingEnvironmentException: 無法存取 IIS Metabase。
用來執行 ASP.NET 的處理序帳戶必須擁有 IIS Metabase (例如 IIS://servername/W3SVC) 的讀取權限。如需修改 Metabase 使用權限的詳細資訊,請參閱 http://support.microsoft.com/?kbid=267904。
原始程式錯誤:
在執行目前 Web 要求期間,產生未處理的例外狀況。如需有關例外狀況來源與位置的資訊,可以使用下列的例外狀況堆疊追蹤取得。
堆疊追蹤:
[HostingEnvironmentException: 無法存取 IIS Metabase。]
System.Web.Configuration.MetabaseServerConfig.MapPathCaching(String siteID, VirtualPath path) +3609834
System.Web.Configuration.MetabaseServerConfig.System.Web.Configuration.IConfigMapPath2.MapPath(String siteID, VirtualPath vpath) +9
System.Web.Hosting.HostingEnvironment.MapPathActual(VirtualPath virtualPath, Boolean permitNull) +169
System.Web.CachedPathData.GetConfigPathData(String configPath) +382
System.Web.CachedPathData.GetConfigPathData(String configPath) +243
System.Web.CachedPathData.GetApplicationPathData() +68
System.Web.CachedPathData.GetVirtualPathData(VirtualPath virtualPath, Boolean permitPathsOutsideApp) +3503459
System.Web.Configuration.RuntimeConfig.GetLKGRuntimeConfig(VirtualPath path) +189
--------------------------------------------------------------------------------
版本資訊: Microsoft .NET Framework 版本:2.0.50727.832; ASP.NET 版本:2.0.50727.832
解決方法:
執行「aspnet_regiis -i」重新安裝ASP.NET就可以了。
在DOS命令行下執行:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727> aspnet_regiis -i
posted @
2008-10-06 14:26 方庆生 阅读(13) |
评论 (0) |
编辑

2008年10月5日
Server Error in '/Web' Application.
Parser Error
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.
Parser Error Message: Could not load the assembly 'App_Web_lzqno_ql'. Make sure that it is compiled before accessing the page.
Source Error:
Line 1: <%@ page language="C#" autoeventwireup="true" inherits="_Default, App_Web_lzqno_ql" %>
Line 2:
Line 3: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
Source File: /Web/Default.aspx Line: 1
Version Information: Microsoft .NET Framework Version:2.0.50727.1433; ASP.NET Version:2.0.50727.1433
这是因为编译之后上传到IIS上,才会这样。
在<%@ page language="C#" autoeventwireup="true" inherits="_Default, App_Web_lzqno_ql" %> 去掉 App_Web_lzqno_ql 即可!
问题解决:
重新進行預編譯,然后请使用“网站”---“网站发布”
posted @
2008-10-05 20:34 方庆生 阅读(28) |
评论 (0) |
编辑
事件类型: 警告
事件来源: ASP.NET 2.0.50727.0
事件种类: Web Event
事件 ID: 1310
日期: 2008-10-05
事件: 1
6:20
用户: N/A
计算机: LQ-5-209
描述:
Event code: 3006
Event message: A parser error has occurred.
Event time: 2008-10-05 19:52:08
Event time (UTC): 2008-10-05 11:52:08
Event ID: c982f4f4d7024cd29e510128919c504f
Event sequence: 60
Event occurrence: 2
Event detail code: 0
Application information:
Application domain: /LM/w3svc/1/ROOT/Web-8-128676804551562500
Trust level: Full
Application Virtual Path: /Web
Application Path: c:\inetpub\wwwroot\Web\
Machine name: LQ-5-209
Process information:
Process ID: 3644
Process name: aspnet_wp.exe
Account name: LQ-5-209\ASPNET
Exception information:
Exception type: HttpParseException
Exception message: Could not load the assembly 'App_Web_lzqno_ql'. Make sure that it is compiled before accessing the page.
Request information:
Request URL: http://localhost/Web/Default.aspx
Request path: /Web/Default.aspx
User host address: 127.0.0.1
User:
Is authenticated: False
Authentication Type:
Thread account name: LQ-5-209\ASPNET
Thread information:
Thread ID: 1
Thread account name: LQ-5-209\ASPNET
Is impersonating: False
Stack trace: at System.Web.UI.TemplateParser.ParseString(String text, VirtualPath virtualPath, Encoding fileEncoding)
at System.Web.UI.TemplateParser.ParseFile(String physicalPath, VirtualPath virtualPath)
at System.Web.UI.TemplateParser.ParseInternal()
at System.Web.UI.TemplateParser.Parse()
at System.Web.Compilation.BaseTemplateBuildProvider.get_CodeCompilerType()
at System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider)
at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders()
at System.Web.Compilation.BuildProvidersCompiler.PerformBuild()
at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)
at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean noAssert)
at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp, Boolean noAssert)
at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
at System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)
at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Custom event details:
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
posted @
2008-10-05 20:28 方庆生 阅读(35) |
评论 (0) |
编辑

2008年10月4日
IIS 服务器无法加载应用程序 '/LM/W3SVC/1/Root/web'。
错误是 'Class not registered2008-08-07 09:22IIS 服务器无法加载应用程序 '/LM/W3SVC/1/ROOT'。错误是 '没有注册类别
IIS 服务器无法加载应用程序 '/LM/W3SVC/1/Root/web'。错误是 'Class not registered
现象:
浏览ASP页面提示 500内部错误
事件查看器中:
[1]:
服务器无法加载应用程序 '/LM/W3SVC/1/ROOT'。错误是 '没有注册类别'。
有关此消息的详细信息,请访问 Microsoft 联机支持站点: http://www.microsoft.com/contentredirect.asp。
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
[2]:
无法启动 MS DTC 事务管理器。
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
[3]:
MS DTC 事务管理器启动失败。LogInit 返回错误 0x2。
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
[4]:
找不到 MS DTC 日志文件。在确认所有由 MS DTC 协调的资源管理器不具有“不确定”状态的事务
之后,请运行 msdtc -resetlog 创建日志文件。
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
运行环境:
WinXP Pro SP2;
解决办法:
[1]:检查你的DTC服务(全名:Distributed Transaction Coordinator)是否可以正常启动,如果正常的话,请你跳过此步骤;如果出错,无法正常启动,先把DTC服务设为自动,然后在开始菜单的运行中 运行:msdtc -resetlog 以创建日志文件,然后重启电脑。
如果运行这个命令没出错 请跳过下面这行字。
如果运行这个命令出错请转到本文的下半部分的这个地方开始看。(==== 以下部分是网上重新找的资料 (如果执行上面步骤仍然不行,请继续) ==)
重起机器,检查IIS是否可以正常使用,若不行继续。
[2]:在CMD下执行以下命令:
cd /d %windir%\system32\inetsrv
rundll32 wamreg.dll, CreateIISPackage
regsvr32 asptxn.dll
重起机器,我的问题到这步已经可以完美解决!遇到这个郁闷的问题 系统导了一次,IIS重装了若干
次,BAIDU了一些资料,终于解决了,希望对你有帮助。
========= 以下部分是网上重新找的资料 (如果执行上面步骤仍然不行,请继续) ==============================
1. 系统开始菜单里 点 运行 输入:
regsvr32 jscript.dll (注:这个命令修复java脚本相关的动态链接库)
重新点运行 输入:
regsvr32 vbscript.dll (注:这个命令修复vb脚本相关的动态链接库)
2. 微软的关于MS DTC 无法安装的解决办法的文章:
如何在运行 Windows XP 的计算机上重新安装 Microsoft 分布式事务处理协调器
http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B891801
==========================
将步骤摘抄到这里:
==========================
本文介绍如何在运行 Microsoft Windows XP 的计算机上重新安装 Microsoft 分布式事务处理协调器 (MS DTC)。
更多信息
一般而言,在运行 Windows XP 或更高版本的计算机上不必重新安装 Microsoft 分布式事务处理协调器 (Msdtc.exe)。如果使用较早的操作系统,在安装诸如 Microsoft SQL Server 6.5 的软件后,可能必须重新安装 MS DTC,因为此软件会使用其包含的版本覆盖 MS DTC 二进制文件。重新安装正确版本的 Msdtc.exe 可以还原二进制文件。在 Windows XP 和更高版本中,Windows 文件保护 (WFP) 功能可确保当前系统二进制文件不被替换。
但是,如果必须在运行 Windows XP 的计算机上重新安装 MS DTC,请使用下列过程。
警告:如果使用下列步骤,则所有未完成的事务都将丢失。确保在执行下列步骤之前,没有活动的事务。
警告:注册表编辑器使用不当可导致严重问题,可能需要重新安装操作系统。Microsoft 不能保证您可以解决因注册表编辑器使用不当而导致的问题。使用注册表编辑器需要您自担风险。 1. 在“管理工具”中,打开“服务”,然后停止所有服务。
2. 在“启动类型”列中,除下表中的服务以外,将所有其他服务的启动类型更改为“手动”。
注意:建议您记下所更改的服务,以便可以在步骤 7 中正确还原这些值。 • Alerter
• COM+ Event System
• Computer Browser
• Distributed Link Tracking Client
• DNS Client
• Event Log
• IPSEC Services
• Logical Disk Manager
• Messenger
• Net Logon
• NT LM Security Support Provider
• Network Connections
• Plug and Play
• Remote Procedure Call (RPC)
• Remote Procedure Call (RPC) Locator
• Removable Storage
• Security Accounts Manager
• Server
• System Event Notification
• Task Scheduler
• TCP/IP NetBIOS Helper
• Windows Management Instrumentation
• Windows Management Instrumentation Driver Extensions
• Windows Time
• Workstation
3. 关闭“服务”,然后重新启动计算机。
4. 在命令提示符下,键入以下命令:
%WINDIR%\System32\msdtc.exe -uninstall
5. 启动注册表编辑器,如果存在下列注册表项则将其删除: • HKEY_CLASSES_ROOT\CID
• HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC
• HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MSDTC
• HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\MSDTC
• HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC
6. 在命令提示符下,键入 %WINDIR%\System32\msdtc.exe -install。
7. 等待磁盘活动停止,然后将所更改的服务的启动类型还原为其原始值。
8. 在注册表中,创建以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\XADLL
9. 在命令提示符下,键入 regsvr32 mtxoci.dll。
您将收到一条表明 Mtxoci.dll 中的 DllRegisterServer 已成功的消息。单击“确定”关闭该消息。
10. 重新启动计算机。
11. 在命令提示符下,键入 %WINDIR%\System32\msdtc.exe -resetlog。
=======================================================================================
到这里MS DTC 已经安装成功 重新运行msdtc -resetlog 和解决办法的步骤2
posted @
2008-10-04 18:23 方庆生 阅读(20) |
评论 (0) |
编辑

2008年9月18日
IIS权限设置参考
2008-09-10 10:47
虽然 Apache 的名声可能比 IIS 好,但我相信用 IIS 来做 Web 服务器的人一定也不少。说实话,我觉得 IIS 还是不错的,性能和稳定性都相当不错。但是我发现许多用 IIS 的人不太会设置 Web 服务器的权限,因此,出现漏洞被人黑掉也就不足为奇了。但我们不应该把这归咎于 IIS 的不安全。如果对站点的每个目录都配以正确的权限,出现漏洞被人黑掉的机会还是很小的(Web 应用程序本身有问题和通过其它方式入侵黑掉服务器的除外)。下面是我在配置过程中总结的一些经验,希望对大家有所帮助。
IIS Web 服务器的权限设置有两个地方,一个是 NTFS 文件系统本身的权限设置,另一个是 IIS 下网站->站点->属性->主目录(或站点下目录->属性->目录)面板上。这两个地方是密切相关的。下面我会以实例的方式来讲解如何设置权限。
IIS 下网站->站点->属性->主目录(或站点下目录->属性->目录)面板上有:
脚本资源访问
读取
写入
浏览
记录访问
索引资源
6 个选项。这 6 个选项中,“记录访问”和“索引资源”跟安全性关系不大,一般都设置。但是如果前面四个权限都没有设置的话,这两个权限也没有必要设置。在设置权限时,记住这个规则即可,后面的例子中不再特别说明这两个权限的设置。
另外在这 6 个选项下面的执行权限下拉列表中还有:
无
纯脚本
纯脚本和可执行程序
3 个选项。
而网站目录如果在 NTFS 分区(推荐用这种)的话,还需要对 NTFS 分区上的这个目录设置相应权限,许多地方都介绍设置 everyone 的权限,实际上这是不好的,其实只要设置好 Internet 来宾帐号(IUSR_xxxxxxx)或 IIS_WPG 组的帐号权限就可以了。如果是设置 ASP、PHP 程序的目录权限,那么设置 Internet 来宾帐号的权限,而对于 ASP.NET 程序,则需要设置 IIS_WPG 组的帐号权限。在后面提到 NTFS 权限设置时会明确指出,没有明确指出的都是指设置 IIS 属性面板上的权限。
例1 —— ASP、PHP、ASP.NET 程序所在目录的权限设置:
如果这些程序是要执行的,那么需要设置“读取”权限,并且设置执行权限为“纯脚本”。不要设置“写入”和“脚本资源访问”,更不要设置执行权限为“纯脚本和可执行程序”。NTFS 权限中不要给 IIS_WPG 用户组和 Internet 来宾帐号设置写和修改权限。如果有一些特殊的配置文件(而且配置文件本身也是 ASP、PHP 程序),则需要给这些特定的文件配置 NTFS 权限中的 Internet 来宾帐号(ASP.NET 程序是 IIS_WPG 组)的写权限,而不要配置 IIS 属性面板中的“写入”权限。
IIS 面板中的“写入”权限实际上是对 HTTP PUT 指令的处理,对于普通网站,一般情况下这个权限是不打开的。
IIS 面板中的“脚本资源访问”不是指可以执行脚本的权限,而是指可以访问源代码的权限,如果同时又打开“写入”权限的话,那么就非常危险了。
执行权限中“纯脚本和可执行程序”权限可以执行任意程序,包括 exe 可执行程序,如果目录同时有“写入”权限的话,那么就很容易被人上传并执行木马程序了。
对于 ASP.NET 程序的目录,许多人喜欢在文件系统中设置成 Web 共享,实际上这是没有必要的。只需要在 IIS 中保证该目录为一个应用程序即可。如果所在目录在 IIS 中不是一个应用程序目录,只需要在其属性->目录面板中应用程序设置部分点创建就可以了。Web 共享会给其更多权限,可能会造成不安全因素。
总结:也就是说一般不要打开-主目录-(写入),(脚本资源访问) 这两项以及不要选上(纯脚本和可执行程序),选(纯脚本)就可以了.需要asp.net的应用程序的如果应用程序目录不止应用程序一个程序的可以在应用程序文件夹上(属性)-目录-点创建就可以了.不要在文件夹上选web共享.
例2 —— 上传目录的权限设置:
用户的网站上可能会设置一个或几个目录允许上传文件,上传的方式一般是通过 ASP、PHP、ASP.NET 等程序来完成。这时需要注意,一定要将上传目录的执行权限设为“无”,这样即使上传了 ASP、PHP 等脚本程序或者 exe 程序,也不会在用户浏览器里就触发执行。 网站精华 top.admin5.com
同样,如果不需要用户用 PUT 指令上传,那么不要打开该上传目录的“写入”权限。而应该设置 NTFS 权限中的 Internet 来宾帐号(ASP.NET 程序的上传目录是 IIS_WPG 组)的写权限。
如果下载时,是通过程序读取文件内容然后再转发给用户的话,那么连“读取”权限也不要设置。这样可以保证用户上传的文件只能被程序中已授权的用户所下载。而不是知道文件存放目录的用户所下载。“浏览”权限也不要打开,除非你就是希望用户可以浏览你的上传目录,并可以选择自己想要下载的东西。
总结:一般的一些asp.php等程序都有一个上传目录.比如论坛.他们继承了上面的属性可以运行脚本的.我们应该将这些目录从新设置一下属性.将(纯脚本)改成(无).
例3 —— Access 数据库所在目录的权限设置:
许多 IIS 用户常常采用将 Access 数据库改名(改为 asp 或者 aspx 后缀等)或者放在发布目录之外的方法来避免浏览者下载它们的 Access 数据库。而实际上,这是不必要的。其实只需要将 Access 所在目录(或者该文件)的“读取”、“写入”权限都去掉就可以防止被人下载或篡改了。你不必担心这样你的程序会无法读取和写入你的 Access 数据库。你的程序需要的是 NTFS 上 Internet 来宾帐号或 IIS_WPG 组帐号的权限,你只要将这些用户的权限设置为可读可写就完全可以保证你的程序能够正确运行了。
总结:Internet 来宾帐号或 IIS_WPG 组帐号的权限可读可写.那么Access所在目录(或者该文件)的“读取”、“写入”权限都去掉就可以防止被人下载或篡改了
例4 —— 其它目录的权限设置:
你的网站下可能还有纯图片目录、纯 html 模版目录、纯客户端 js 文件目录或者样式表目录等,这些目录只需要设置“读取”权限即可,执行权限设成“无”即可。其它权限一概不需要设置。
好了,我想上面的几个例子已经包含了大部分情况下的权限设置,其它情况根据这些例子,我想你一定可以想到该如何设置了吧。
posted @
2008-09-18 22:14 方庆生 阅读(24) |
评论 (0) |
编辑

2008年8月23日
摘要: 基本情况效果图:左移效果:其余效果:右边的listbox进行上下移动。listbox的属性设置为:Multiple解决方案(一):调试结果:PASS (√)[代码]解决方案(二):调试结果:PASS (√)结果:可操作性灵活,数据不会异常[代码]
阅读全文
posted @
2008-08-23 17:25 方庆生 阅读(115) |
评论 (1) |
编辑