关于作者

用户名:jane3s
笔名:jane3s
地区: 上海
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



最新评论

★ DB

★ 3S

★ C#

★ 信息技术

★ OpenSource

嵌入式

访问统计:
文章个数:82
评论个数:0
留言条数:35




Powered by BlogDriver 2.1

★★★Jane 的点点滴滴★★★

 

★★★★★★★★★★★★ Jane的工作记录 ★ 技术追求 ★探索研究的外界窗口 ★★★★★★★★★★

文章

安装ArcGis9.3后,Win7系统所受到的影响
    安装过ArcGIS9.3后,Win7的注册表限制大小被修改了,导致系统“Windows Modules Installer服务”无法正常启动;手动启动也会出现系统资源不足的问题(错误编码:1450)。该服务无法启动,直接引起【打开或关闭Windows功能】无法使用。
    解决该问题的方法:
    1、 到注册表【HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control】中修改键【RegistrySizeLimit】的值为【FFFFFFFF】。
    2、重启系统。
    3、执行命令【SFC /SCANNOW】,扫描系统保护文件。
    4、确认【Windows Modules Installer服务】是否正常启动,如果没有启动,则手动设置自动启动模式,并启动该服务。
    5、确认【打开或关闭Windows功能】可以正常使用。

- 作者: jane3s 2011年08月29日, 星期一 10:25  回复(0) |  引用(0) 加入博采

Win7和Xp双系统安装的一点心得

   Win7和Xp双系统使用了一段时间,发现磁盘空间不够,需要重新整理。上次做了一个Win7的Ghost,这次要讨论下Win7和Xp两个系统安装的一些问题。

    下面是不同安装方法,所达到的不同效果。当然,两个系统分别安装在不同的分区上。

    第一种方法,先安装Xp,再安装Win7。两个系统安装完成后,系统启动后,有系统选择界面,可以正常登陆两个系统。

    第二种方法,先安装Win7,再安装Xp。两个系统安装完成后,系统启动后,没有系统选择界面,只可以正常登陆Xp系统。接下来,重新启动,使用Win7 光盘启动,选择系统修复连接,自动修复启动选项(根据安装情况,有的需要修复两次)。重新启动后,可以直接登陆Win7,依然没有系统选择界面。在 Win7系统中,安装EasyBCD工具,并添加Xp系统,保存后,重新启动,发现系统选择界面出现,并且两个系统可以正常安装。

   原因分析,微软从Vista开始,系统引导方法发生了改变,Xp以前使用的是NTLDR引导,可以直接文本编辑修改引导信息;而vista之后,使用的是 Winload程序引导,需要通过BCDedit命令来编辑引导信息。两种引导信息都是存在活动的主引导分区中,并不兼容。

   如果磁盘分区存在多个主分区,且Xp和Win7均安装在不同的两个主分区上,此时的安装和上述两种方法的结果就截然不同了。无论怎样安装的顺序,此时,只 能正确登录最后一次安装的系统,且没有选在系统界面。如果最后一次安装的是Xp,使用Win7系统盘,修复引导程序虽然成功,可是仍然没有系统选择界面, 也只能登录Xp系统。此时,如果一定要登录到Win7系统,可以在Xp系统中,进入磁盘管理工具,设置Win7所在驱动为活动状态。启动后,系统提示 NTLDR信息找不到之类的信息,不要理会这些,直接使用Win7系统盘修复,第一次修复的是系统引导程序文件,第二次才是Win7系统的启动信息。经过 两次的修复,可以登录到Win7中了。在Win7中,再次使用EasyBCD工具添加Xp的引导系统信息,发现无法自动添加。人工添加的方法,我暂时还没 有研究明白。

- 作者: jane3s 2011年02月12日, 星期六 13:05  回复(0) |  引用(0) 加入博采

Win7 Ghost

      由于项目需要,一直使用XP和Win7双系统,使用两个比较小的硬盘,Win7系统单独使用一个盘,Xp和工作文档使用另一个硬盘。渐渐地,磁盘空间不 够,需要重新申请新的电脑,开发使用的环境配置又比较繁琐,于是乎,想到ghost。决定将两个系统ghost到新的电脑中。

      将原来的两个磁盘的数据,合并ghost到一个新的硬盘中:首先,按照自己的需要,给两个系统分配适当的空间,接下就是ghost软件的工作了。 ghost完成后,使用Win7的安装盘,进行启动修复,生成新的BCD引导信息,一切大功告成。等到在新的电脑上运行两个系统时,问题出现了。Xp一切 正常,可是Win7就有问题了,现象是:系统启动时,键盘和鼠标状态正常,等到系统欢迎界面输入密码时,发现键盘无效,和没有驱动的状况相同,系统也无法 自动检测到键盘驱动;鼠标一切正常。

      这个问题可把我个难坏了,上网寻早解决办法,最终无果。只见一些提出问题的大侠,不见实质解决效果。问题诸如:“系统异常退出后,键盘无法输 入。”,“ghost系统后,win7无法输入登录密码”等等。现象和我遇到的相同,我就花费一点点时间,解决问题,和大家分享。

      问题根源是,ghost使用的源盘的系统运行的硬件环境和生成目标盘的环境不同所致。本人的Win7源盘系统运行于sata的4号端口,而生成目标Win7系统盘则运行于sata的0号端口。

      解决办法,首先,将Win7源盘接入sata的0号端口,正常进入系统(当然原来的Xp所在盘不接入,只有Win7一个盘接入),正常关闭系统;其次,将 Xp所在盘接入sata的0号端口,Win7所在盘接入sata的4号端口,Xp登录系统,使用ghost工具,将Win7以分区的方式ghost到新的 磁盘中。最后,使用新的磁盘,确认Win7和Xp系统,一切正常。

      总结,电脑的硬件环境,影响Win7的系统,而Xp几乎没有影响。

- 作者: jane3s 2011年01月30日, 星期日 17:40  回复(0) |  引用(0) 加入博采

验证针对在 Visual C#.net 中的 xml 架构的 XML 片段
本分步指南介绍了如何使用 XmlValidatingReaderXMLSchemaCollection 对象来验证对 XML 架构的可扩展标记语言 (XML) 碎片。

XmlValidatingReader 实现 XmlReader 类,并提供对 XML 数据验证的支持。XmlValidatingReader架构 属性将读取器连接到在一个 XmlSchemaCollection 中缓存的架构文件。XmlValidatingReaderValidationType 属性指定读者应执行的验证的类型。如果将该属性设置为 ValidationType.None,您将创建一个 nonvalidating 读取器。

您只能将 XML 架构定义语言 (XSD) 架构和 XML 数据缩减 (XDR) 架构添加到 XmlSchemaCollection。加载架构命名空间 URI 与使用 Add 方法。XML 架构的典型的命名空间 URI 是 targetNamespace 属性架构。

要求

下面的列表概述了建议的硬件、 软件、 网络的基础结构和服务包,您需要:
  • Microsoft Visual Studio.net 兼容的 Microsoft Windows 操作系统上安装
本文假定您熟悉下列主题:
  • visual C#.net
  • 基本 XML 标准
  • XSD 架构

创建一个 XSD 架构

将以下代码粘贴到新的文本文件名为 C:\Books.xsd:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:bookstore-schema" elementFormDefault="qualified" targetNamespace="urn:bookstore-schema">
<xsd:element name="bookstore" type="bookstoreType" />
<xsd:element name="comment" type="xsd:string" />
<xsd:element name="author" type="authorName"/>
<xsd:complexType name="authorName">
<xsd:sequence>
<xsd:element name="first-name" type="xsd:string" />
<xsd:element name="last-name" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="bookstoreType">
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="book" type="bookType" />
<xsd:element ref="comment" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="bookType">
<xsd:sequence>
<xsd:element name="title" type="xsd:string" />
<xsd:element ref="author" />
<xsd:element name="price" type="xsd:decimal" />
</xsd:sequence>
<xsd:attribute name="genre" type="xsd:string" />
</xsd:complexType>

</xsd:schema>

创建一个 Visual C#.net 应用

  • 创建一个新的 Visual C#.net 控制台应用程序。
  • 在 Class1.cs 代码替换下面的代码:
using System;
using System.Xml;
using System.Xml.Schema;


namespace ConsoleApplication3
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
System.Boolean m_success;

[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start application here.
//
XmlValidatingReader reader = null;
XmlSchemaCollection myschema = new XmlSchemaCollection();
ValidationEventHandler eventHandler = new ValidationEventHandler(Class1.ShowCompileErrors );


try
{
//Create the XML fragment to be parsed.
String xmlFrag = "<author xmlns='urn:bookstore-schema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>" +
"<first-name>Herman</first-name>" +
"<last-name>Melville</last-name>" +
"</author>";

//Create the XmlParserContext.
XmlParserContext context = new XmlParserContext(null, null, "", XmlSpace.None);

//Implement the reader.
reader = new XmlValidatingReader(xmlFrag, XmlNodeType.Element, context);
//Add the schema.
myschema.Add("urn:bookstore-schema", "c:\\Books.xsd");

//Set the schema type and add the schema to the reader.
reader.ValidationType = ValidationType.Schema;
reader.Schemas.Add(myschema);

while (reader.Read())
{
}

Console.WriteLine("Completed validating xmlfragment");
}
catch (XmlException XmlExp)
{
Console.WriteLine(XmlExp.Message);
}
catch(XmlSchemaException XmlSchExp)
{
Console.WriteLine(XmlSchExp.Message);
}
catch(Exception GenExp)
{
Console.WriteLine(GenExp.Message);
}
finally
{
Console.Read();
}

}
public static void ShowCompileErrors(object sender, ValidationEventArgs args)
{
Console.WriteLine("Validation Error: {0}", args.Message);
}
}
}

  •  当在输出窗口中显示以下消息时,XML 片段是一个有效的元素:
Completed validating xmlfragment

: 根据 XML 架构会验证仅在类型声明和 XML 架构中的顶级元素。子元素被认为是作为本地的因此无法验证。为了验证一个子元素,声明一个顶级元素,并参考的。

- 作者: jane3s 2010年12月21日, 星期二 03:32  回复(0) |  引用(0) 加入博采

自定义ConfigSections节
在Net2.0以上的版本对自定义configSection是件相对容易的事情.
比如,我们要创建以下自定义的配置节ConfigSectionsLib
<configuration>
<configSections>
<section name="ConfigSectionsLib" type="ConfigSectionsLib.IPSection,ConfigSectionsLib"/>
</configSections>
<ConfigSectionsLib configSource="ConfigFiles\IPAllow.config" />
......
<configuration>


IPAllow.config文件结构如下:

<?xml version="1.0" encoding="utf-8" ?>
<ConfigSectionsLib>
<IPItemElement>
<IPItem Name="1" IP="192.168.1.1"></IPItem>
<IPItem Name="2" IP="192.168.1.2"></IPItem>
<IPItem Name="3" IP="192.168.1.3"></IPItem>
<IPItem Name="4" IP="192.168.1.4"></IPItem>
</IPItemElement>
</ConfigSectionsLib>


我们该如何开始呢,
首先应该建个项目(名称空间为ConfigSectionsLib,  DLL文件名:ConfigSectionsLib.dll)
创建类:IPSection 让它继承ConfigurationSection
代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.ComponentModel;

namespace ConfigSectionsLib
{
public class IPSection : ConfigurationSection
{
/// <summary>
/// Gets the IPItemElement element.
/// </summary>
[ConfigurationProperty("IPItemElement")]
public IPItemElementCollection IPItems
{
get { return (IPItemElementCollection)this["IPItemElement"]; }
}


}
}
这代表我们要创建一个IPItems属性,这个属性是个IPItemElementCollection集合,它的定义在下面:

[ConfigurationCollection(typeof(IPItemElement), AddItemName = "IPItem", CollectionType = ConfigurationElementCollectionType.BasicMap)]
public class IPItemElementCollection : ConfigurationElementCollection
{
public IPItemElement this[int index]
{
get { return (IPItemElement)base.BaseGet(index); }
set
{
if (base.BaseGet(index) != null)
{
base.BaseRemoveAt(index);
}
base.BaseAdd(index, value);
}
}

public new IPItemElement this[string name]
{
get { return (IPItemElement)base.BaseGet(name); }
}


protected override ConfigurationElement CreateNewElement()
{
return new IPItemElement();
}

protected override object GetElementKey(ConfigurationElement element)
{
return (element as IPItemElement).Name;
}

public override ConfigurationElementCollectionType CollectionType
{
get { return ConfigurationElementCollectionType.BasicMap; }
}

protected override string ElementName
{
get { return "IPItem"; }
}

}
如果想创建跟appSettings和connectionStrings一样的配置节,就是由<add/>子节组成的配置节,
你可以这样定义IPItemElementCollection
[ConfigurationCollection(typeof(IPItemElement),  CollectionType = ConfigurationElementCollectionType.AddRemoveClearMap)]
public class IPItemElementCollection : ConfigurationElementCollection
{
public IPItemElement this[int index]
{
get { return (IPItemElement)base.BaseGet(index); }
set
{
if (base.BaseGet(index) != null)
{
base.BaseRemoveAt(index);
}
base.BaseAdd(index, value);
}
}

public new IPItemElement this[string name]
{
get { return (IPItemElement)base.BaseGet(name); }
}


protected override ConfigurationElement CreateNewElement()
{
return new IPItemElement();
}

protected override object GetElementKey(ConfigurationElement element)
{
return (element as IPItemElement).Name;
}
       // 将下面的注释
// public override ConfigurationElementCollectionType CollectionType
// {
//     get { return ConfigurationElementCollectionType.BasicMap; }
//  }

// protected override string ElementName
// {
//      get { return "IPItem"; }
//  }


}
这种形式的配置节将以以下的形式出现:
<ConfigSectionsLib>
<IPItemElement>
<Add Name="1" IP="192.168.1.1"></Add>
<Add Name="2" IP="192.168.1.2"></Add>
<Add Name="3" IP="192.168.1.3"></Add>
<Add Name="4" IP="192.168.1.4"></Add>
</IPItemElement>
</ConfigSectionsLib>


剩下的就是IPItemElement的定义:
public class IPItemElement : ConfigurationElement
{
[ConfigurationProperty("Name", DefaultValue = "")]
public string Name
{

get { return this["Name"] as string; }

}

[ConfigurationProperty("IP", DefaultValue = "")]
public string IP
{
get { return this["IP"] as string; }

}
}

这样就大功告成了,我们就可以写个类来封装对它的访问:
public class CustomIP
{
private string mName;

public string Name
{
get { return mName; }
set { mName = value; }
}
private string mIP;

public string IP
{
get { return mIP; }
set { mIP = value; }
}


}

public class SectionSetting
{
static IPSection ipSection = ConfigurationManager.GetSection("ConfigSectionsLib") as IPSection;

public static List<CustomIP> GetCustomIPList()
{
List<CustomIP> lst = new List<CustomIP>();
foreach (IPItemElement item in ipSection.IPItems)
{
CustomIP cip = new CustomIP();
cip.IP = item.IP;
cip.Name = item.Name;
lst.Add(cip);
}
//这边返回的就是所有子节的集合
return lst;
}

}

- 作者: jane3s 2010年12月21日, 星期二 03:24  回复(0) |  引用(0) 加入博采