升级win8.1后无法下载不了东西

ekhsofxe_ibb 2015-06-05 05:25:48
win8.0的时候一点问题都没有,而且网络也没问题,谁知道怎么弄啊
...全文
143 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
treetor 2015-06-09
  • 打赏
  • 举报
回复
估计是驱动的问题,把驱动都卸载,然后去官网重新下载
网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的诊断和测试以及恢复系统功能的工具。小编的确一直都想把这方面的命令做个总结,这次辛苦老范给我们整理了这份实用的秘笈。   Bootcfg   bootcfg 命令启动配置和故障恢复(对于大多数计算机,即 boot.ini 文件)。   含有下列参数的 bootcfg 命令仅在使用故障恢复控制台时才可用。可在命令提示符下使用带有不同参数的 bootcfg 命令。   用法:   bootcfg /default  设置默认引导项。   bootcfg /add    向引导列表中添加 Windows 安装。   bootcfg /rebuild  重复全部 Windows 安装过程并允许用户选择要添加的内容。   注意:使用 bootcfg /rebuild 之前,应先通过 bootcfg /copy 命令备份 boot.ini 文件。   bootcfg /scan    扫描用于 Windows 安装的所有磁盘并显示结果。   注意:这些结果被静态存储,并用于本次会话。如果在本次会话期间磁盘配置发生变化,为获得更新的扫描,必须先重新启动计算机,然后再次扫描磁盘。   bootcfg /list   列出引导列表中已有的条目。   bootcfg /disableredirect 在启动引导程序中禁用重定向。   bootcfg /redirect [ PortBaudRrate] |[ useBiosSettings]   在启动引导程序中通过指定配置启用重定向。   范例: bootcfg /redirect com1 115200 bootcfg /redirect useBiosSettings   hkdsk   创建并显示磁盘的状态报告。Chkdsk 命令还可列出并纠正磁盘上的错误。   含有下列参数的 chkdsk 命令仅在使用故障恢复控制台时才可用。可在命令提示符下使用带有不同参数的 chkdsk 命令。   vol [drive:] [ chkdsk [drive:] [/p] [/r]   参数  无   如果不带任何参数,chkdsk 将显示当前驱动器中的磁盘状态。 drive: 指定要 chkdsk 检查的驱动器。 /p   即使驱动器不在 chkdsk 的检查范围内,也执行彻底检查。该参数不对驱动器做任何更改。 /r   找到坏扇区并恢复可读取的信息。隐含着 /p 参数。   注意 Chkdsk 命令需要 Autochk.exe 文件。如果不能在启动目录(默认为 %systemroot%System32)中找到该文件,将试着在 Windows 安装 CD 中找到它。如果有多引导系统的计算机,必须保证是在包含 Windows 的驱动器上使用该命令。 Diskpart   创建和删除硬盘驱动器上的分区。diskpart 命令仅在使用故障恢复控制台时才可用。   diskpart [ /add |/delete] [device_name |drive_name |partition_name] [size]   参数 无   如果不带任何参数,diskpart 命令将启动 diskpart 的 Windows 字符模式版本。   /add   创建新的分区。   /delete   删除现有分区。   device_name   要创建或删除分区的设备。设备名称可从 map 命令的输出获得。例如,设备名称:   DeviceHardDisk0   drive_name   以驱动器号表示的待删除分区。仅与 /delete 同时使用。以下是驱动器名称的范例:   D:   partition_name   以分区名称表示的待删除分区。可代替 drive_name 使用。仅与 /delete 同时使用。以下是分区名称的范例:   DeviceHardDisk0Partition1    大小   要创建的分区大小,以兆字节 (MB)表示。仅与 /add 同时使用。   范例   下例将删除分区: diskpart /delete Device HardDisk0 Partition3 diskpart /delete F:   下例将在硬盘上添加一个 20 MB 的分区:   diskpart /add Device HardDisk0 20   Fixboot   向系统分区写入新的分区引导扇区。只有在使用故障恢复控制台时,才能使用 fixboot 命令。   fixboot [drive]   参数  驱动器   将要写入引导扇区的驱动器。它将替代默认的驱动器(即用户登录的系统分区)。例如,驱动器:D:   范例   下列命令范例向驱动器 D: 的系统分区写入新的分区引导扇区:   fixboot d:   注意: 如果不带任何参数,fixboot 命令将向用户登录的系统分区写入新的分区引导扇区。   Fixmbr   修复启动磁盘的 主启动记录。fixmbr 命令仅在使用故障恢复控制台时才可用。   fixmbr [ device_name]   参数   device_name   要写入新的主引导记录的设备(驱动器)。设备名称可从 map 命令的输出获得。例如,设备名称:   DeviceHardDisk0   范例   下列命令示例向指定设备写入一个新的主引导记录:   fixmbr DeviceHardDisk0   注意 如果不指定 device_name,新的主引导记录将被写入引导设备,即装载主系统的驱动器。 如果系统检测到无效或非标准分区表标记,将提示用户是否继续执行该命令。除非您访问驱动器有问题,否则不要继续进行。向系统分区写入新的主引导记录可能破坏分区表并导致分区无法访问。   format   将指定的驱动器格式化为指定的文件系统。含有下列参数的 format 命令仅在使用故障恢复控制台时才可用。可在命令提示符下使用带有不同参数的 format 命令。   format [ drive:] [ /fs:file-system]   参数   drive:   指定要格式化的驱动器。不能从故障恢复控制台格式化软盘。   /q   对驱动器进行快速格式化。不扫描驱动器看是否有坏区域,因此只应对以前格式化过的驱动器使用该参数。   /fs:file-system   指定要使用的文件系统:FAT、FAT32 或 NTFS 。如果未指定文件系统,将使用现有的文件系统格式。   Map   显示驱动器号与物理设备名称的映射。该信息在运行 fixboot 和 fixmbr 命令时非常有用。   map 命令仅在使用故障恢复控制台时才可用。   Map [ arc]   参数   arc   指示 map 命令显示高级 RISC 计算 (ARC)设备名称而不是设备名称。以下是 ARC 设备名称的范例:   multi(0)disk(0)rdisk(0)partition(1)   等价的设备名称是:   DeviceHardDisk0Partition1   范例   下例将物理设备名映射为使用 ARC 设备名称的驱动器号:   map arc   注意 如果不使用 arc 参数,则 map 命令显示设备名称。 map 命令还显示文件系统的类型和每个磁盘的大小(MB)。 二。★★★常见文件扩展名和它们的说明 常见文件扩展名和它们的说明 A ACE:Ace压缩档案格式 ACT:Microsoft office助手文件 AIF,AIFF:音频互交换文件,Silicon Graphic and Macintosh应用程序的声音格式 ANI:Windows系统中的动画光标 ARC:LH ARC的压缩档案文件 ARJ:Robert Jung ARJ压缩包文件 ASD:Microsoft Word的自动保存文件;Microsoft高级流媒体格式(microsoft advanced streaming format,ASF)的描述文件;可用NSREX打开 Velvet Studio例子文件 ASF:Microsoft高级流媒体格式文件 ASM:汇编语言源文件,Pro/E装配文件 ASP:动态网页文件;ProComm Plus安装与连接脚本文件;Astound介绍文件 AST:Astound多媒体文件;ClarisWorks“助手”文件 Axx:ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取01-99的数字) A3L:Authorware 3.x库文件 A4L:Authorware 4.x库文件 A5L:Authorware 5.x库文件 A3M,A4M:Authorware Macintosh未打包文件 A3W,A4W,A5W:未打包的Authorware Windows文件 B BAK:备份文件 BAS:BASIC源文件 BAT:批处理文件 BIN:二进制文件 BINHex:苹果的一种编码格式 BMP:Windows或OS/2位图文件 BOOK:Adobe FrameMaker Book文件 BOX:Lotus Notes的邮箱文件 BPL:Borlard Delph 4打包库 BSP:Quake图形文件 BUN:CakeWalk 声音捆绑文件(一种MIDI程序) C C0l:台风波形文件 CAB:Microsoft压缩档案文件 CAD:Softdek的Drafix CAD文件 CAM:Casio照相机格式 CAP:压缩音乐文件格式 CAS:逗号分开的ASCⅡ文件 CCB:Visual Basic动态按钮配置文件 CCH:Corel图表文件 CCO:CyberChat数据文件 CCT:Macromedia Director Shockwave投影 CDA:CD音频轨道 CDF:Microsoft频道定义格式文件 CDI:Philip的高密盘交互格式 CDM:Visual dBASE自定义数据模块文件 CDR:CorelDRAW绘图文件;原始音频CD数据文件 CDT:CorelDRAW模板 CDX:CorelDRAW压缩绘图文件;Microsoft Visual FoxPro索引文件 CFG:配置文件 CGI:公共网关接口脚本文件 CGM:计算机图形元文件 CH:OS/2配置文件 CHK:由Windows磁盘碎片整理器或磁盘扫描保存的文件碎片 CHM:编译过的HTML文件 CHP:Ventura Publisher章节文件 CHR:字符集(字体文件) CHT:ChartViem文件;Harvard Graphics矢量文件 CIF:Adaptec CD 创建器 CD映像文件 CIL:Clip Gallery下载包 CIM:SimCity 2000文件 CIN:OS/2改变控制文件用于跟踪INI文件中的变化 CLASS:Java类文件 CLP:Windows 剪贴板文件 CLL:Crick Software Clicker文件 CLS:Visual Basic类文件 CMD:Windows NT,OS/2的命令文件;DOS CD/M命令文件;dBASEⅡ程序文件 CPI:Microsoft MS-DOS代码页信息文件 CPL:控制面板扩展名,Corel颜色板 CPP:C++代码文件 CPR:Corel提供说明书文件 CPT:Corel 照片-绘画图像 CST:Macromedia Director Cast文件 CUR:Windows光标文件 D DBF:dBASE文件,一种由Ashton-Tate创建的格式,可以被ACT!、Lipper、FoxPro、Arago、Wordtech、Xbase和类似数据库或与数据库有关产品识别;可用数据文件(能被Excel 97打开);Oracle 8.1.x表格空间文件 DBX:DataBearn图像;Microsoft Visual FoxPro表格文件 DCT:Microsoft Visual FoxPro数据库容器 DCU:Delphi编译单元文件 DCX:Microsoft Visual FoxPro数据库容器;基于PCX的传真图像;宏 DIR:MacromediaDirector文件 DLL:动态链接库 DOC:FrameMaker或FrameBuilder文档;Word Star文档、Word Perfect文档、Microsoft:Word文档;DisplayWrite文档 DOT:Microsoft Word文档模板 DPL:Borland Delph 3压缩库 DRV:驱动程序 DRW:Micrografx Designer/Draw;Pro/E绘画文件 DSF:Micrografx Designer VFX文件 DSG:DOOM保存的文件 DSM:Dynamic Studio音乐模块(MOD)文件 DSP:Microsoft Developer Studio工程文件 DSQ:Corel QUERY(查询)文件 DST:刺绣机图形文件 DSW:Microsoft Developer Studio工作区文件 DTA:World Bank(世界银行)的STARS数据文件 DTD:SGML文档类型定义(DTD)文件 DTED:地面高度数字数据(图形的数据格式)文件 DTF:Symantec Q&A相关的数据库数据文件 DTM:DigiTrakker模块文件 DUN:Microsoft拔号网络导出文件 DV:数字视频文件(MIME) DWG:AutoCAD工程图文件;AutoCAD或Generic CADD老版本的绘图格式 DXR:Macromedia Director受保护(不可编辑)电影文件 E EDA:Ensoniq ASR磁盘映像 EDD:元素定义文档(FrameMaker+SGML文档) EDE:Ensoniq EPS磁盘映像 EDK:Ensoniq KT磁盘映像 EDQ:Ensoniq SQ1/SQ2/Ks32磁盘映像 EDS:Ensoniq SQ80磁盘映像 EDV:Ensoniq VFX-SD磁盘映像 EFA:Ensoniq ASR文件 EFE:Ensoniq EPS文件 EFK:Ensoniq KT文件 EFQ:Ensoniq SQ1/SQ2/Ks32文件 EFS:Ensoniq SQ80文件 EFV:Ensoniq VFX-SD文件 EMD:ABT扩展模块 EMF:Windows增强元文件 EML:Microsoft Outlook Express邮件消息(MIME RTC822)文件 EXE:可执行文件(程序) F FAV:Microsoft Outlook导航条 FAX:传真类型图像 FCD:虚拟CD-ROM FDF:Adobe Acrobat表单文档文件 FLA:Macromedia Flash电影 FND:Microsoft Explorer保存的搜索文件(Find applet) FON:系统字体 FRT:Microsoft FoxPro报表文件 FRX:Visual Basic表单文本;Microsoft FoxPro报表文件 FXP:经Microsoft FoxPro编译的源文件 G GDM:铃声、口哨声和声音板模块格式 GetRight:GetRight未完成的下载文件 GHO:Norton 克隆磁盘映像 GID:Windows 95全局索引文件(包括帮助状态) GIF:CompuServe位图文件 GL:动画格式 GRP:程序管理组 H HEX:Macintosh BinHex2.0文件 HLP:帮助文件;Date CAD Windows帮助文件 HPP:C++程序头文件 HQX:Macintosh BinHex 4.0文件 HT:HyperTerminal(超级终端) HTM,HTML:超文本文档 HTT:Microsoft超文本模板 HTX:扩展HTML模板 I ICO:Windows图标 IDX:Microsoft FoxPro相关数据库索引文件;Symantec Q&A相关数据库索引文件;Microsoft Outlook Express文件 IMG:GEM映像 INF:信息文件 INI:初始化文件;Mwave DSP Synth的“nwsynth.ini” GMS安装;Cravis Ultrasound bank安装 INP:Oracle 3.0版或早期版本的表单源代码 INRS:INRS远程通信声频 INS:InstallShield安装脚本;X-Internet签字文件;Ensoniq EPS字簇设备;Cell/ⅡMAC/PC抽样设备 INT:中间代码,当一个源程序经过语法检查后编译产生一个可执行代码 IOF:Findit文档 IQY:Microsoft Internet查询文件 ISO:根据ISD 9660有关CD-ROM文件系统标准列出CD-ROM上的文件 ISP:X-Internet签字文件 IST:数字跟踪设备文件 ISU:InstallShield卸装脚本 IT:脉冲跟踪系统音乐模块(MOD)文件 ITI:脉冲跟踪系统设备 ITS:脉冲跟踪系统抽样,Internet文档位置 IV:Open Inventor中使用的文件格式 IVD:超过20/20微观数据维数或变量等级文件 IVP:超过20/20的用户子集配置文件 IVT:超过20/20表或集合数据文件 IVX:超过20/20微数据目录文件 IW:Idlewild屏幕保护程序 IWC:Install Watch文档 J J62:Ricoh照相机格式 JAR:Java档案文件(一种用于applet和相关文件的压缩文件) JAVA:Java源文件 JAR:Java档案文件(一种用于applet和相关文件的压缩文件) JAVA:Java源文件 JFF,JFIF,JIF:JPEG文件 JPE,JPEG,JPG:JPEG图形文件 JS:javascript源文件 JSP:HTML网页,其中包含有对一个Java servlet的参考 K KAR:卡拉OK MIDI文件(文本+MIDI) L LAB:Visual dBASE标签文件 LBT,LBX:Microsoft FoxPro标签文件 LDB:Microsoft Access加锁文件 LHA:LZH更换文件后缀 LOG:日志文件 LZH:LH ARC压缩档案 M M1V:MPEG相关文件(MIME"mpeg"类型) M3D:Corel Motion 3D动画文件 M3U:MPEG URL(MIME声音文件) MAM:Microsoft Access宏 MAQ:Microsoft Access查询文件 MAR:Microsoft Access报表文件 MBX:Microsoft Outlook保存email格式;Eudora邮箱 MCW:Microsoft Word的Macintosh文档 MDB:Microsoft Access数据库 MDN:Microsoft Access空数据库模板 MDW:Microsoft Access工作组文件 MID:MIDI音乐 MMM:Microsoft多媒体电影 MOV:QuickTime for Windows电影 MP2:第二层MPEG音频文件 MP3:第三层MPEG音频文件 MPA:MPEG相关文件,MIME“mpeg类型” MPE,MPEG,MPG:MPEG动画文件 MPP:Microsoft工程文件;CAD绘图文件格式 MPR:Microsoft FoxPro菜单(已编译) MSI:Windows 安装器包 MSN:Microsoft 网络文档;Descent Mission文件 O OBD:Microsoft Office活页夹 OBJ:对象文件 OBZ:Microsoft Office活页夹向导 OCX:Microsoft对象链接与嵌入定制控件 ODS:Microsoft Outlook Express邮箱文件 OFT:Microsoft Outlook模板 OPX:OPL扩展DLL(动态链接库) OSS:Microsoft Office查找文件 OST:Microsoft Exchange / Outlook 离线文件 P PAL:压缩文件 PART:Go!Zilla部分下载文件 PAS:Pascal源代码 PCS:PICS动画文件 PDF:Adobe Acrobat 可导出文档格式文件(可用Web浏览器显示);Microsoft系统管理服务器包定义文件;NetWare打印机定义文件 PHP,PHP3:包含有PHP脚本的HTML网页 PHTML:包含有PHP脚本的HTML网页;由Perl分析解释的HTML PM5:Pagemaker 5.0文件 PM6:Pagemaker 6.0文件 PPS:Microsoft Powerpoint幻灯片放映 PPT:Microsoft Powerpoint演示文稿 PRF:Windows系统文件,Macromedia导演设置文件 PSD:Adobe photoshop位图文件 PSM:Protracker Studio模型格式;Epic游戏的源数据文件 PST:Microsoft Outlook个人文件夹文件 PWL:Windows 95口令列表文件 Q QIF:QuickTime相关图像(MIME);Quicken导入文件 QT,QTM:QuickTime电影 QTI,QTIF:QuickTime相关图像 QTP:QuickTime优先文件 QTS:Mac PICT图像文件;QuickTime相关图像 QTX:QuickTime相关图像 R RA:RealAudio声音文件 RAM:RealAudio元文件 RAR:RAR压缩档案(Eugene Roshall格式) REC:录音机宏;RapidComm声音文件 REG:注册表文件 REP:Visual dBASE报表文件 RES:Microsoft Visual C++资源文件 RM:RealAudio视频文件 RMF:Rich Map格式(3D游戏编辑器使用它来保存图) ROM:基于盒式磁带的家庭游戏仿真器文件(来自Atari 2600、Colecovision、Sega、Nintendo等盒式磁带里的ROM完全拷贝,在两个仿真器之间不可互修改) Rxx:多卷档案上的RAR压缩文件(xx=1~99间的一个数字) S SAV:游戏保存文件 SB:原始带符号字节(8位)数据 SBK:Creative Labs的Soundfont 1.0 Bank文件;(Soundb laster)/EMU SonndFont v1.x Bank文件 SBL:Shockwave Flash对象文件 SCF:Windows Explorer命令文件 SCH:Microsoft Schedule+1 SCP:拨号网络脚本文件 SCR:Windows屏幕保护;传真图像;脚本文件 SFX:RAR自解压档案 SHTML:含有服务器端包括(SSI)的HTML文件 SPL:Shockwave Flash对象;DigiTrakker抽样 SQL:Informix SQL查询;通常被数据库产品用于SQL查询(脚本、文本、二进制)的文件扩展名 STM:.shtml的短后缀形式,含有一个服务端包括(SSI)的HTML文件;Scream Tracker V2音乐模块(MOD)文件 STR:屏幕保护文件 SWA:在Macromedia导演文件(MP3文件)中的Shockwave声音文件 SWF:Shockwave Flash对象 SYS:系统文件 T T64:Commodore 64仿真器磁带映像文件 THEME:Windows 95桌面主题文件 TIF,TIFF:标签图像文件格式(TIFF)位图 TMP:Windows临时文件 TRM:终端文件 TXT:ASCⅡ文本格式的声音数据 TZ:老的压缩格式文件 V VBA:VBase文件 VBP:Microsoft Visual Basic工程文件 VBW:Microsoft Visual Basic工作区文件 VBX:Microsoft Visual Basic用户定制控件 VQE,VQL:Yamaha Sound-VQ定位器文件 VQF:Yamaha Sound-VQ文件(可能出现标准) VRF:Oracle 7配置文件 VSL:下载列表文件(GetRight) W WAB:Microsoft Outlook文件 WAD:包含有视频、玩家水平和其他信息的DOOM游戏的大文件 WAL:Quake 2正文文件 WAV:Windows波形声形 WBK:Microsoft Word备份文件 WFM:Visual dBASE Windows表单 WFN:在CorelDRAW中使用的符号 WIZ:Microsoft Word向导 WRL:虚拟现实模型 WWL:Microsoft Word内插器文件 X XLK:Microsoft Excel备份 XLL:Microsoft Excel内插器文件 XLM:Microsoft Excel宏 XLS:Microsoft Excel工作单 XLT:Microsoft Excel模板 XLV:Microsoft Excel VBA模块 XLW:Microsoft Excel工作簿/工作区 Z ZAP:Windows软件安装配置文件 ZIP:Zip文件 000-999:用于为老版本(或备份)文件编号(比如:被安装程序改变的CONFIG.SYS文件);又可用于为小范围的PC应用程序的多个用户相关数据文件编号 12M:Lotus 1-2-3 97 SmartMaster文件 123:Lotus 1-2-3 97文件 2D:VersaCAD的2维绘画文件 2GR,3GR:在Windows之下的VGA图形驱动程序/配置文件 386:在386或更高级处理器上使用的文件 3D:VersaCAD的3维绘画文件 3DM:3D NURBS建模器,Rhino 3DS:3D Studio(DOS下)格式文件 386:在386或更高级处理器上使用的文件 4GE:Informix 4GL编译后代码 4GL:Informix 4GL源代码 669:Composer 669;UNIX Composer音乐模型文件;669磁道模块 #01 及更高的号:为计算机演示而扫描的一系列电影的图片文件编号方法 ???:OS/2用来跟踪档案文件 @@@:用于安装过程中的屏幕文件和用于Microsoft Code view for C这样的应用程序的指导文件 [color=#6b6b6b] [/color] 三。★★★GHOST怎么用? 系统备份 使用Ghost进行系统备份,有整个硬盘(Disk)和分区硬盘(Partition)两种方式。在菜单中点击Local(本地)项,在右面弹出的菜单中有3个子项,其中Disk表示备份整个硬盘(即克隆)、Partition表示备份硬盘的单个分区、Check表示检查硬盘或备份的文件,查看是否可能因分区、硬盘被破坏等造成备份或还原失败。分区备份作为个人用户来保存系统数据,特别是在恢复和复制系统分区时具有实用价值。 选Local→Partition→To Image菜单,弹出硬盘选择窗口,开始分区备份操作。点击该窗口中白色的硬盘信息条,选择硬盘,进入窗口,选择要操作的分区(若没有鼠标,可用键盘进行操作:TAB键进行切换,回车键进行确认,方向键进行选择)。 在弹出的窗口中选择备份储存的目录路径并输入备份文件名称,注意备份文件的名称带有GHO的后缀名。 接下来,程序会询问是否压缩备份数据,并给出3个选择:No表示不压缩,Fast表示压缩比例小而执行备份速度较快,High就是压缩比例高但执行备份速度相当慢。最后选择Yes按钮即开始进行分区硬盘的备份。Ghost备份的速度相当快,不用久等就可以完成,备份的文件以GHO后缀名储存在设定的目录中。 系统克隆 硬盘的克隆就是对整个硬盘的备份和还原。选择菜单Local→Disk→To Disk,在弹出的窗口中选择源硬盘(第一个硬盘),然后选择要复制到的目标硬盘(第二个硬盘)。注意,可以设置目标硬盘各个分区的大小,Ghost可以自动对目标硬盘按设定的分区数值进行分区和格式化。选择Yes开始执行。 Ghost能将目标硬盘复制得与源硬盘几乎完全一样,并实现分区、格式化、复制系统和文件一步完成。只是要注意目标硬盘不能太小,必须能将源硬盘的数据内容装下。 Ghost还提供了一项硬盘备份功能,就是将整个硬盘的数据备份成一个文件保存在硬盘上(菜单Local→Disk→To Image),然后就可以随时还原到其他硬盘或源硬盘上,这对安装多个系统很方便。使用方法与分区备份相似。 系统还原 如果硬盘中备份的分区数据受到损坏,用一般数据修复方法不能修复,以及系统被破坏后不能启动,都可以用备份的数据进行完全的复原而无须重新安装程序或系统。当然,也可以将备份还原到另一个硬盘上。 要恢复备份的分区,就在界面中选择菜单Local→Partition→From Image,在弹出窗口中选择还原的备份文件,再选择还原的硬盘和分区,点击Yes按钮即可。 软件特性 存贮介质 Ghost 支持的存储介质超出了我们的想象,它支持对等LPT接口、对等USB接口、对等TCP/IP接口、SCSI磁带机、便携式设备(JAZ、ZIP、MO等)、光盘刻录机(CDR、CDRW)等。而这些特性不需要任何外带的驱动程序和软件,只需一张软盘就可以做到!特别是对光盘刻录机的支持,如今的刻录机和空白光盘都十分便宜,非常适合作备份的用途。 兼容性 Ghost 对现有的操作系统都有良好的支持,包括FAT16、FAT32、NTFS、HPFS、UNIX、NOVELL等文件存储格式。同以前版本不同的是,Ghost 2001加入了对Linux EX2的支持(FIFO文件存储格式),这也就意味着Linux的用户也可以用Ghost来备份系统了。 配套软件支持 Ghost浏览器:在以前的Ghost版本中,我们只能对系统进行简单的备份、复制、还原,要恢复单个的文件和文件夹还要使用外带的GhostEXP软件。现在,Symantec公司已经将Ghost浏览器整合在软件中。Ghost浏览器采用类似于资源管理器的界面,通过它,我们可以方便迅速地在备份包中找出我们想要的文件和文件夹并还原。 Gdisk:Gdisk是一个新加入的实用工具,它彻底取代了FDisk和format: * 快速格式化。 * 隐藏和显示分区的能力。此功能允许一个以上的主DOS分区,并且每个分区上的操作系统有不同的版本。隐藏分区的能力使计算机习惯于引导到选定的可引导分区,忽略其他隐藏分区中相同操作系统的安装。 * 全面的分区报告。 * 高度安全的磁盘擦除。提供符合美国国防部标准和更高安全标准的磁盘擦除选项。 和使用交互式菜单的FDisk不同,GDisk是由命令行驱动的。这提供了更快的配置磁盘分区和在批处理文件中定义GDisk操作的能力。但与此同时,几十个参数会令普通用户头疼,因此笔者不推荐一般用户使用,Symantec公司也应该推出相应的GUI(图形用户界面)控制台以方便用户使用。具体的参数说明可以用命令行gdisk/?了解。 Live Update Live Update是Symantec公司软件的一个通用升级程序,它能够检查当前系统中已安装的Symantec软件,并且通过英特网对软件进行在线升级。 在安装Ghost 2001时,安装程序自动升级了Live Update程序的版本。 Ghost 的进阶篇 附加的命令行参数:(限Ghost的无人备份/恢复/复制) 其实Ghost 2001的功能远远不止它主程序中显示的那些,Ghost可以在其启动的命令行中添加众多参数以实现更多的功能。命令行参数在使用时颇为复杂,不过我们可以制作批处理文件,从而“一劳永逸”(类似于无人安装Windows 98和Windows 2000)现在让我们来了解一些常用的参数(了解更加详细的参数介绍可查看Ghost的帮助文件)。 1.-rb 本次Ghost操作结束退出时自动重启。这样,在复制系统时就可以放心离开了。 2.-fx 本次Ghost操作结束退出时自动回到DOS提示符。 3.-sure 对所有要求确认的提示或警告一律回答“Yes”。此参数有一定危险性,只建议高级用户使用。 4.-fro 如果源分区发现坏簇,则略过提示强制拷贝。此参数可用于试着挽救硬盘坏道中的数据。 [email=5.@filename][color=#0000ff]5.@filename[/color][/email] 在filename中指定txt文件。txt文件中为Ghost的附加参数,这样做可以不受DOS命令行150个字符的限制。 6.-f32 将源FAT16分区拷贝后转换成FAT32(前提是目标分区不小于2G)。WinNT 4和Windows95、97用户慎用。 7.-bootcd 当直接向光盘中备份文件时,此选项可以使光盘变成可引导。此过程需要放入启动盘。 8.-fatlimit 将NT的FAT16分区限制在2G。此参数在复制Windows NT分区,且不想使用64k/簇的FAT16时非常有用。 9.-span 分卷参数。当空间不足时提示复制到另一个分区的另一个备份包。 10.-auto 分卷拷贝时不提示就自动赋予一个文件名继续执行。 11.-crcignore 忽略备份包中的CRC ERROR。除非需要抢救备份包中的数据,否则不要使用此参数,以防数据错误。 12.-ia 全部映像。Ghost会对硬盘上所有的分区逐个进行备份。 13.-ial 全部映像,类似于-ia参数,对Linux分区逐个进行备份。 14.-id 全部映像。类似于-ia参数,但包含分区的引导信息。 15.-quiet 操作过程中禁止状态更新和用户干预。 16.-script 可以执行多个Ghost命令行。命令行存放在指定的文件中。 17.-span 启用映像文件的跨卷功能。 18.-split=x 将备份包划分成多个分卷,每个分卷的大小为x兆。这个功能非常实用,用于大型备份包复制到移动式存储设备上,例如将一个1.9G的备份包复制到3张刻录盘上。 19.-z 将磁盘或分区上的内容保存到映像文件时进行压缩。-z或-z1为低压缩率(快速);-z2为高压缩率(中速);-z3至-z9压缩率依次增大(速度依次减慢)。 20.-clone 这是实现Ghost无人备份/恢复的核心参数。使用语法为: -clone,MODE=(operation),SRC=(source),DST=(destination),[SZE(size),SZE(size)......] 此参数行较为复杂,且各参数之间不能含有空格。   其中operation意为操作类型,值可取:copy:磁盘到磁盘;load:文件到磁盘;dump:磁盘到文件;pcopy:分区到分区;pload:文件到分区;pdump:分区到文件。 Source意为操作源,值可取:驱动器号,从1开始;或者为文件名,需要写绝对路径。 Destination意为目标位置,值可取:驱动器号,从1开始;或者为文件名,需要写绝对路径;@CDx,刻录机,x表示刻录机的驱动器号,从1开始。 下面举例说明 命令行参数:ghostpe.exe -clone,mode=copy,src=1,dst=2 完成操作:将本地磁盘1复制到本地磁盘2。 命令行参数:ghostpe.exe -clone,mode=pcopy,src=1:2,dst=2:1 完成操作:将本地磁盘1上的第二分区复制到本地磁盘2的第一分区。 命令行参数:ghostpe.exe-clone,mode=load,src=g:Λprtdisk.gho,dst=1,sze1=450M,sze2=1599M,sze3=2047M 完成操作:从映像文件装载磁盘1,并将第一个分区的大小调整为450MB,第二个调整为1599MB,第三个调整为2047MB。 命令行参数:ghostpe.exe -clone,mode=pdump,src2:1:4:6,dst=d:prt246.gho 完成操作:创建仅具有选定分区的映像文件。从磁盘2上选择分区1、4、6。 了解了这些参数后,我们就可以轻松地实现Ghost的无人备份/复制/恢复了。冲杯咖啡吧。 一些示例 ghost.exe -clone,mode=copy,src=1,dst=2 -sure 硬盘对拷 ghost.exe -clone,mode=pcopy,src=1:2,dst=2:1 -sure 将一号硬盘的第二个分区复制到二号硬盘的第一个分区 ghost.exe -clone,mode=pdump,src=1:2,dst=g:bac.gho 将一号硬盘的第二个分区做成映像文件放到g分区中 ghost.exe -clone,mode=pload,src=g:bac.gh2,dst=1:2 从内部存有两个分区的映像文件中,把第二个分区还原到硬盘的第二个分区 ghost.exe -clone,mode=pload,src=g:bac.gho,dst=1:1 -fx -sure -rb 用g盘的bac.gho文件还原c盘。完成后不显示任何信息,直接启动。 ghost.exe -clone,mode=load,src=g:bac.gho,dst=2,SZE1=60P,SZE2=40P 将映像文件还原到第二个硬盘,并将分区大小比例修改成60:40 还原磁盘 首先做一个启动盘,包含Config.sys,Autoexec.bat,Command.com,Io.sys,Ghost.exe文件(可以用windows做启动盘的程序完成)。 Autoexec.bat可以包含以下命令: Ghost.exe -clone,mode=pload,src=d:bac.gho,dst=1:1 -fx -sure -rb 利用在d盘的文件自动还原,结束以后自动跳出ghost并且重新启动。 开机自动做C区的备份,在D区生成备份文件bac.gho。 ghost.exe -clone,mode=pdump,src=1:1,dst=d:bac.gho -fx -sure -rb 还原光盘 包含文件:Config.sys,Autoexec.bat,Mscdex.exe(CDROM执行程序),Oakcdrom.sys(ATAPI CDROM兼容驱动程序),Ghost.exe Config.sys内容为: DEVICE=OAKCDROM.SYS /D:IDECD001 Autoexec.bat内容为: MSCDEX.EXE /D:IDECE001 /L:Z Ghost -clone,mode=load,src=z:bac.gho,dst=1:1 -sure -rb 可以根据下面的具体说明修改实例 -clone 在使用时必须加入参数,它同时也是所有的switch{batch switch}里最实用的一种,下面是clone所定义的参数 -clone, mode={copy|load|dump|pcopy|pload|pdump}, src={drive|file|driveartition}, dst={drive|file|driveartition} mode指定要使用哪种clone所提供的命令 copy 硬盘到硬盘的复制(disk to disk copy) load 文件还原到硬盘(file to disk load) dump 将硬盘做成映像文件(disk to file dump) pcopy 分区到分区的复制(partition to partition copy) pload 文件还原到分区(file to partition load) pdump 分区备份成映像文件(partition to file dump) src指定了ghost运行时使用的源分区的位置模式及其意义: mode命令 对应mode命令src所使用参数 例子 COPY/DUMP 源硬盘号。 以1代表第一号硬盘 LOAD 映像文件名 g:/back98/setup98.gho 或装置名称(drive) PCOPY/PDUMP 源分区号。 1:2代表的是硬盘1的第二个分区 PLOAD 分区映像文件名加上分区号或是驱动器名加上分区号。 g:back98setup98.gh2,代表映像文件里的第二个分区 dst运行Ghost时使用的目标位置模式及其意义: mode命令 对应mode命令dst所使用参数 例子 COPY/DUMP 目的硬盘号。 2代表第二号硬盘 LOAD 硬盘映像文件名。 例g:back98setup98.gho PCOPY/PLOAD 目的分区号。 2:2 代表的是,硬盘2的第二个分区 PDUMP 分区映像文件名加分区号。 g:back98setup98.gh2 SZEn指定所使用目的分区的大小 n=xxxxM 指定第n目的分区的大小为xxxxMB SZE2=800M表示分区2的大小为800MB n=mmP 指定地n的目的分区的大小为整个硬盘的mm个百分比。 其他参数 -fxo 当源物件出现坏块时,强迫复制继续进行 -fx 当ghost完成新系统的工作后不显示"press ctrl-alt-del to reboot"直接回到DOS下 -ia 完全执行扇区到扇区的复制。当由一个映像文件或由另一个硬盘为来源,复制一个分区时,Ghost将首先检查来源分区,再决定是要复制文件和目录结构还是要做映像复制(扇区到扇区)。预设是这种形式。但是有的时候,硬盘里特定的位置可能会放一些隐藏的与系统安全有关的文件。只有用扇区到扇区复制的方法才能正确复制 -pwd and -pwd=x 给映像文件加密 -rb 在还原或复制完成以后,让系统重新启动 -sure 可以和clone合用。Ghost不会显示"proceed with disk clone-destination drive will be overwritten?"提示信息 注意事项 1. 在备份系统时,单个的备份文件最好不要超过2GB。 2.在备份系统前,最好将一些无用的文件删除以减少Ghost文件的体积。通常无用的文件有:Windows的临时文件夹、IE临时文件夹、Windows的内存交换文件。这些文件通常要占去100多兆硬盘空间。 3.在备份系统前,整理目标盘和源盘,以加快备份速度。 4.在备份系统前及恢复系统前,最好检查一下目标盘和源盘,纠正磁盘错误。 5.在恢复系统时,最好先检查一下要恢复的目标盘是否有重要的文件还未转移,千万不要等硬盘信息被覆盖后才后悔莫及啊。 6.在选择压缩率时,建议不要选择最高压缩率,因为最高压缩率非常耗时,而压缩率又没有明显的提高。 7.在新安装了软件和硬件后,最好重新制作映像文件,否则很可能在恢复后出现一些莫名其妙的错误。 ------------------------------------------------------------------------------- Ghostpe.exe菜单选项介绍 Norton Ghost的帮助文件中要求Ghostpe.exe在纯DOS下运行,其实它在WINDOWS的MS-DOS中运行也是可以的,同样可以对系统进行备份和还原。 开机进入DOS,键入Ghostpe.exe所在的目录路径名,比如:E:Ghostpe.exe 回车,程序即开始运行。首先出现的是Ghost版本介绍窗口,回车后进入主界面。菜单选项有:   (一)“Local”(本地的)   1、Disk(磁盘) (1) To Disk(硬盘到硬盘的复制) (2)To Image(硬盘内容备份为镜像) (3)From Image(从镜像文件恢复至硬盘)  2、Partition(分区)   (1)To Partition(分区到分区的复制)   (2)To Image(分区内容备份为镜像)   (3)From Image(从镜像文件恢复至分区)  3、Check(检查) (1) Image File(镜像文件) (2)Disk(磁盘)   (二)Option(设置项,一般情况下使用默认值即可)   (三)Quit(退出) Norton ghost――克隆硬盘的魅影 我们能用Ghost做什么   ●可以创建硬盘镜像备份文件   ●可以将备份恢复到原硬盘上   ●磁盘备份可以在各种不同的存储系统间进行   ●支持FAT16/32、NTFS、OS/2等多种分区的硬盘备份   ●支持Win9X、NT、UNIX、Novell等系统下的硬盘备份   ●可以将备份复制(克隆)到别的硬盘上   ●在复制(克隆)过程中自动分区并格式化目的硬盘 Ghost是最著名的硬盘复制备份工具,因为它可以将一个硬盘中的数据完全相同地复制到另一个硬盘中,因此大家就将Ghost这个软件称为硬盘“克隆”工具。实际上,Ghost不但有硬盘到硬盘的克隆功能,还附带有硬盘分区、硬盘备份、系统安装、网络安装、升级系统等功能。1998年6月,出品Ghost的Binary公司被著名的Symantec公司购并,因此该软件的后续版本就改称为Norton Ghost,成为Nordon系列工具软件中的一员。1999年2月,Symantec公司发布了Norton Ghost的5.1C版本,该版本包含了多个硬盘工具,并且在功能上作了较大的改进,使之成为了一个真正的商业软件。 安装 本公司为使各位客户的机器万无一失,早已经为您的机器中装入了GHOST软件,并在您取走机器前为您做好备份,免去您的后顾之忧。此软件不需安装,复制即可使用。 Ghost硬盘克隆 Ghost就是克隆硬盘的程序,该程序在DOS下、Windows9.X下都可执行,所以要进行硬盘的克隆,请先进入到Ghost子目录,运行Ghost.exe程序,需要注意的是,如果是在DOS下运行该程序时,在运行该程序前最好启动DOS的鼠标驱动程序,因为Ghost的操作画面是仿窗口画面,使用鼠标点击来选择会方便一些――虽然也可以用键盘来操作。另外在备份或克隆硬盘前最好清理一下硬盘――删除不用文件、清空回收站、碎片整理等。 1. 分区备份 使用Ghost复制备份,有整个硬盘(Disk)和分区硬盘(Partition)两种备份方式。在菜单中点击“Local”(本地)项,在右面弹出的菜单中有三个子项,其中“Disk”表示整个硬盘备份(也就是克隆),“Partition”表示单个分区硬盘备份以及硬盘检查“Check”。“Check”项的功能是检查硬盘或备份的文件,看是否可能因分区、硬盘被破坏等造成备份或还原失败。而分区备份作为个人用户来保存系统数据,特别是在恢复和复制系统分区具有实用价值。 选“Local/Partition/To Image”菜单,弹出硬盘选择窗口,开始分区备份操作。点击该窗口中白色的硬盘信息条,选择硬盘,进入窗口,选择要操作的分区(用鼠标点击)。 然后在弹出的窗口中选择备份储存的目录路径并输入备份文件名称,注意备份文件的名称带有GHO的后缀名。 接下来,程序会询问是否压缩备份数据,并给出三个选择。“No”表示不压缩,“Fast”表示小比例压缩而备份执行速度较快,“High”就是高比例压缩但备份执行速度较慢。最后,选择“Yes”按钮即开始进行分区硬盘的备份。Ghost备份的速度相当快,不用久等就可以完成备份,备份的文件以GHO后缀名储存在设定的目录中。 2. 分区备份的还原 如果硬盘中备份的分区数据受到损坏,用一般磁盘数据修复方法不能修复,以及系统被破坏后不能启动,都可以用备份的数据进行完全的复原,无须重新安装程序或系统。当然,也可以将备份还原到另一个硬盘上。 要恢复备份的分区,就在界面中选择菜单“Local/Partition/From Image”,在弹出窗口中选择还原的备份文件,再选择还原的硬盘和分区,点击“Yes”按钮即可。 恢复还原时要注意的是,硬盘分区的备份还原是要将原来的分区一成不变地还原出来,包括分区的类型、数据的空间排列等。 3. 硬盘的克隆 硬盘的克隆就是对整个硬盘的备份和还原,选择菜单“Local/Disk/To Disk”,在弹出的窗口中选择源硬盘(第一个硬盘),然后选择要复制到的目的硬盘(第二个硬盘)。注意,可以设置目的硬盘各个分区的大小,Ghost可以自动对目的硬盘按设定的分区数值进行分区和格式化。选择“Yes”开始执行。 Ghost能将目的硬盘复制得与源硬盘几乎完全一样,并实现分区、格式化、复制系统和文件一步完成。只是要注意目的硬盘不能太小,必须能将源硬盘的内容装下。   Ghost还提供了一项硬盘备份功能,就是将整个硬盘的数据备份成一个文件保存在硬盘上(菜单“Local/Disk/To Image”),然后就可以随时还原到其它硬盘或原硬盘上。这对要安装多个系统硬盘很方便。使用方法与分区备份相似。要注意的是,备份成的文件不能大于2GB。 [table=96%][tr][td][align=right][color=#6b6b6b]网管联盟.[/color][/align][color=#6b6b6b]四。★★★如何防范恶意网站 知己知彼   如何判断自己是遇到了恶意网站的攻击,症状多种多样:   1. 开机自动登录网站。   2. 启动IE,自动登录网站,无法修复主页设置。   3. IE不断打开窗口。   4. 修改[主页]按钮和[搜索]按钮。   5. 修改右键菜单,甚至屏蔽右键菜单。   6. 更改收藏夹的内容。   7. 安装自动拨号程序。   8. 自动安装木马程序。   9. 自动格式化硬盘或删除某个文件夹中的所有文件。   10. 更新文件关联和锁死EXE程序。   11. 锁死注册表。 ……   ★对症下药   了解了症状,就要对症下药了! 一、备份   建议使用“超级兔子魔法设置”中的“注册表优化”进行备份,软件能将Classes.dat、System.dat、System.ini、User.dat、Win.ini等文件全部备份下来,上面提到的前五种恶意网站无非就是通过修改这些文件来达到其目的的。 二、弃用IE   大部分的攻击目标都是IE。如果我们用MyIE2(强烈建议使用Ver 0.8.220这一版本)代替IE浏览器,恶意网站就无的放矢了。MyIE2在启动时能够绕开主页直接打开空白页,而且还能保护主页不被修改。如果开机就自动运行IE,要先用超级兔子魔法设置中的“自动运行”功能将网址删除,再用MyIE2代替IE。   注意:这两个功能在默认状态下是关闭的,您要在[选项]→[MyIE2选项]→[常规]中和“启动时”中将其打开。由于MyIE2使用IE的内核,所以请勿删除IE。 三、解救被封死的收藏夹   某些恶意网站会对收藏夹进行修改,大多是通过修改“C: Windows/Favorites”中的“Desktop.ini”文件来实现的,所以只要删除这个文件就可以了。如果根本就无法打开“C: WindowsFavorites”文件夹,就到DOS下进行删除(要先用“attrib -r -s -h”后才能将其删除)。另外,“收藏夹”中的内容并没有被删除,只是放入了另一个文件夹中,名称和“Favorites”差不多(如“Favorites2”等),如果想恢复原来的“收藏夹”,只要剪切一下就可以了。   如果是将系统默认的“收藏夹”路径设置成指定的目录(如“C: WindowsFavorites2”等),只要恢复正常的“注册表”就一切OK了。 四、定期还原正常的注册表   如果遇到安装自动拨号程序的情况,你可要小心啦,小心惊人的国际长话费。对付它,最好是定期还原正常的注册表!这样做虽然不能彻底删除此类恶意程序,但却能让其完全禁止运行,因为这类程序是通过修改注册表来达到随机运行的目的的(只有极少数是在“开始”菜单的“启动”项内做文章),只不过我们无法通过手工删除干净。   这个方法对于自动安装木马程序的情况也同样适用。 五、防止硬盘被格式化   对于自动格式化硬盘的恶意网站,要把“C:WindowsCOMMAND”文件夹中的format.com、Fdisk.exe、Deltree.exe这三个程序文件删除或进行改名,因为这些恶意代码是需要这些程序才能够发挥“威力”的,只要让这些恶意代码找不到它们,您的电脑也就安全了! 六、打开“锁死”的程序   对于被锁死的EXE程序,只要事先已将“C:Windows”目录下正常的Classes.dat、System.dat、User.dat、System.ini、Win.ini这五个文件备份下来,在“中招”后用正常的文件覆盖一下并重新启动就OK了(注:Windows 95和98中可能没有Classes.dat文件,而且Windows 97以下版本的操作系统用此方法无效!甚至会使整个系统瘫痪。)。如果连复制都被禁止了的话,您可用启动盘到DOS下进行覆盖复制。 七、“防”要胜于“治”   通常恶意网站都披着具有“诱惑力”的外衣,设下诱人的陷阱让您“中招”。所以一定要意志坚强,抵制住诱惑。只要您能做到“任你花言巧语,我自岿然不动”。那么,什么样的陷阱也奈何不了您。   另外,现在有很多恶意网站开始通过即时通讯软件来传播了,比如QQ、ICQ等,方式虽然多种多样,但通常是在对方网友的话后面又发来了一个网站信息,有的会附有一些带有“诱惑性”的话(如:“看看我的样子”等),有的只是一个有着诱人域名的网址,对于这样的网站,原则也同样――就是不上当! [table=96%][tr][td][align=right][color=#6b6b6b]网管联盟.[/color][/align][color=#6b6b6b]五。★★★win2000/xp忘记密码的方法 1。清除sam文件: winnt系列的系统账户信息是存在%systemroot%system32configsam这个注册表文件里的。如果系统里没有重要的账户,或者账户比较少,用删除%systemroot%system32configsam的方法是比较简单的,不过因为系统会还原为只有administrator(密码为空)和guest二个账户,所以有些程序因为它们所依赖的账户丢失了,如iis、vmware就不能启动了。 原来听说这种方法只能适用于nt workstation系列(2kpro),不能用于server,我在2000professional和2000 advanced server上试验都是成功的。不知道为什么会有上述说法,可能是活动目录ad下不行把。 当然首先你要能够访问系统分区,来把sam文件改名或者删除。如果是fat32、fat分区,使用98启动盘就行了。如果是ntfs分区,可以使用winternal的ntfs for dos、ntfs for 98或者是支持ntfs的启动光盘,再或者挂到其他win2000、linux等机器上,再再或者重新安装一个新的win2000。 2。专用工具: windows管理员密码丢失还有一个解决方法是使用petter nordahl-hagen的the offline nt password editor([url=http://home.eunet.no/~pnordahl/ntpasswd/][color=#0000ff]http://home.eunet.no/~pnordahl/ntpasswd/[/color][/url]),这个工具是离线修改注册表文件sam来设置密码的。需要用他的映像文件制作启动盘来引导,进而访问ntfs分区重新设置密码;虽然作者经常更新他的程序,不过我还是会担心他直接操作sam文件的安全性,可能有时会导致系统出错。 可能还有其他类似工具把,恕我无知。 3。 还有一种想法就是用一个修改密码的小程序来替换系统启动的必要程序,然后系统启动时就会替换密码,随后把被替换的程序在还原就行了。当然首先你还是要能够访问系统分区,来替换随系统启动的程序。 替换系统启动的必要程序的一种方法是我写的一个清除administrator密码的小程序(cleanpwd),他所作的就是把administrator密码清空。使用方法如下: (2).用法 1) 用双系统或者启动盘或者挂到别的系统上,如果是ntfs分区其他系统或启动盘要能读写ntfs分区,把windows安装目录下的system32svchost.exe改名svchost.bak.exe备份,把cleanpwd.exe拷贝成svchost.exe。 2) 启动该系统,就把administrator的密码清空了,可以直接登陆。 3) 把svchost.bak.exe 恢复就行了。(如果使用替换的是svchost,最好再启动rpc服务) (3).为什么选用svchost.exe而不是其他程序。 每个windows2000系统都有这几个进程, system(kernel executive and kernel) smss(session manager) csrss(win32 subsystem) winlogon(logon process) services(service control manager) lsass(local security authentication server ) 如果任何一个被杀掉或者出错,系统将重新启动。不过在lsass启动之前你不能修改密码,所以不能选用这几个程序。 另外系统中一般还有以下一些程序: svchost.exe(remote procedure call (rpc) 还有其他一些服务) wbemwinmgmt.exe(windows management umentation) mstask.exe(task scheduler) regsvc.exe(remote registry service) 可能还有其他服务程序,你可能禁止了除rpc之外的其他服务,但不会禁止rpc,否则系统工作就不正常了。所以我选择了svchost,如果你知道其他服务会自动启动,你也可以选择它。 当然如果系统安装了杀毒软件的话,你替换杀毒软件也可以,因为一般杀毒软件都会在系统启动是启动杀毒防火墙来杀毒的。 (4).其他 有这个想法是几个月之前了,不过一直没有写这个程序 程序运行会在c:cleanpwd.txt记一个简单的日志,我也附了源码,你可以任意修改它以满足自己的要求,比如添加一个用户而不是修改管理员的密码(或者你把管理员改名了)。 4。我还在一个网站上看到这样一个方法: 就是把%systemroot%system32logon.scr替换为cmd.exe或者explorer.exe,然后在系统登陆处等待,过一会,系统就会去运行logon.scr这个屏保,因为你替换了这个屏保文件,所以实际上运行的是cmd.exe或者explorer.exe,并且是localsystem权限,于是你可以随便了,最简单的就是在cmd.exe里运行net user administrator "",成功后管理员密码也被清空了,关闭cmd或者explorer就可以用空口令登陆了。 其实这种方法和上边的那种思路是一致的。 ================= code begin ======================= #include #include #include #include #include #pragma comment(lib, "netapi32.lib") #define lof_file "c:\cleanpwd.txt" dword setuserpwd(char *user, char *pass); void banner(file *fp) { if(null == fp)return; fprintf(fp, "clean administrator??s password tool 1a. for lost password.n"); fprintf(fp, " by [email=bingle@email.com.cnn][color=#0000ff]bingle@email.com.cnn[/color][/email]"); fprintf(fp, "website: [url=http://www.binglesite.net/n][color=#0000ff]www.binglesite.netn[/color][/url]"); } int main(int argc, char *argv[]) { banner(stderr); file *fp = fopen(lof_file, "a"); if(fp) { fprintf(stderr, "log in file %sn", lof_file); banner(fp); } if(!fp) fp = stderr; char buff[256]; fprintf(fp, "%s: clean administrator??s password ", _strtime(buff)); dword n = setuserpwd("administrator", ""); if(nerr_success == n) fprintf(fp, "ok.n"); else fprintf(fp, "failed, error:%dn", n); fclose(fp); return -1; } dword setuserpwd(char *user, char *pass) { wchar_t wuser[pwlen], wpass[pwlen]; user_info_1003 ui; mbstowcs(wuser, user, strlen(user)+1); mbstowcs(wpass, pass, strlen(pass)+1); ui.usri1003_password = wpass; return netusersetinfo(null, wuser, 1003, (lpbyte)&ui, null); 六。★★★Windows XP 自带小工具 假设你使用的是WinXP,一般来讲你会把日常所用的工具软件都放到一个名为“Tools”的文件夹中。好的,先容我猜猜,里面都有些什么东东――加密的、图片浏览处理的、压缩/解压缩的、音视频播放的、刻录的、系统优化的……怎么样,猜得八九不离十吧?相信这些Tools平日里一定带来了不少方便,不过如果你仅满足于使用这些“Tools”的一般用途,那笔者就要为WinXP道一声“可惜”――它辛辛苦苦为你准备的百宝箱却被不经意地抛在了一旁。相比常用的工具软件,WinXP所提供工具的特点是整合在系统中,因此使用简单、快捷而方便,那么就随笔者一起掀开这个箱子,看看里面到底都有些什么宝贝吧。 一、文件保密 WinXP有着很好的多用户功能,允许不同用户拥有个性的系统设置。但在这样一个共享环境下,个人的隐私问题又凸现出来,由此涉及到了多用户使用下的文件保密问题。对于这个问题,你可能会考虑诸如“文件保密专家”之类的文件加密软件,其实在WinXP中,大可不必为文件的保密问题操心,因为它为我们提供了多种文件保密的方法。不过在为文件进行保密操作之前,首先要确定待保密的文件是放在NTFS分区上的,这是WinXP里进行文件保密的基础,以下的操作都是在NTFS分区上进行的。 1.个人文件夹的保密 在WinXP里最简单的文件保密方法是对“个人文件夹”的加密。所谓“个人文件夹”是指在“系统盘ocuments and Settings”下,以当前用户名命名的文件夹;其中包含了如“我的文档”、“开始菜单”一类的个人用户文件。对其进行加密,只需直接在其文件夹或其子文件夹的“属性”对话框的“共享”页上,勾选“将这个文件夹设为专用”(若为管理员用户则此处默认为勾选),那么其他用户(包括管理员)都无法访问此文件夹。此方法只适合于对“个人文件夹”的保密,对于系统的其他文件和文件夹则无能为力了。需要注意的是,设为“专用”的个人文件夹将不能被共享,同样,已共享的个人文件夹在取消共享之前也不能被设为“专用”。实际应用中,可将要保密的文件保存到设为专用的“我的文档”里,即可实现文件保密的目的。 2.利用用户权限保密文件 对于没有放在“个人文件夹”中的文件,我们可以有第2种保密方法:控制用户权限――通过对不同用户或者组,赋予对文件(文件夹)不同的操作权限,从而达到文件保密的目的。此操作进行之前先要确定WinXP中文件权限的设置功能是否开启:在文件浏览窗口中选择菜单“工具”→“文件夹选项”,选择“查看”页,确定“使用简单文件共享”没有被勾选。 之后,我们就能对系统的文件(文件夹)访问权限进行具体设置:打开文件夹的属性对话框,可以看到多出了一个“安全”页。在其中可以一目了然对于此文件夹可操作的用户及其不同的权限分派。各类权限有“允许”和“拒绝”两项可选,先在“组或用户名称”一栏里选择要保密的对象(如Guest用户),再将其“读取”的权限设为“拒绝”,如此便实现了此文件夹的保密。如果“组或用户名称”里没对象用户,选择下面的“添加”,输入(或搜索出)其用户名即可。 有可能你看到的用户权限设置是不可选的,那是因为此子文件夹从其父文件夹(上级文件夹)继承了权限,因此不可改。要使其权限可改,应删除其和父文件夹的继承关系:选择“安全”页的“高级”选项,打开“高级安全设置”对话框,在“权限”页里取消对“从父项继承那些可以应用到子对象的权限项目,包括那些在此明确定义的项目”的勾选,在弹出的对话框中选择“删除”即可。 3.加密文件系统(EFS)对文件的保密 这是WinXP我们提供的一种高级文件加密方法――加密文件系统(EFS)。EFS是一种数字加密方式:Windows首先以一把“公钥”(WinXP自己的加密算法)对文件进行加密,再配给用户一把用于解密的“私钥”(包含在个人数字证书中)。加密过的文件,只有通过“公钥”与“私钥”共同认证后产生的“金钥”才能被解密。 打开要加密的文件或文件夹的“属性”对话框,选择其“常规”页中的“高级”,勾选“高级属性”里的“加密内容以便保护数据”,确定后,加密的文件/文件夹名会以绿色表示,这样,即使是管理员账户,也不能读取文件的内容了。 这就是WinXP的高级文件保密,就这么简单。之后的问题是,如果加密文件拷贝到其他机器上,如何实现其解密?这就涉及到了个人数字证书的使用。 4.个人数字证书的导出与导入 在“运行”栏里输入“certmgr.msc”,打开“证书”,依次展开“个人”→“证书”,右键单击要导出的证书,在“所有任务”中选择“导出”,在向导中选择“是,导出私钥”,再按需要设置好私钥保护密码和导出路径后,即导出了个人数字证书。 加密文件被拷贝到其他机器上后,要对其进行解密,需要先在此机器上新建一个与原加密用户相同用户名及密码的账户,再将之前导出的证书拷贝到此机器上双击运行,即可实现数字证书的导入。 注意:WinXP为了防止私钥被随意导出,凡导入的证书在默认情况下均不能被再次导出。如果有再次导出的需要,需要在导入数字证书过程中,输入私钥保护密码一步时,勾选“标志此密钥为可导出的……”,这样才能使导入的证书能被再次导出。 二、资源管理器的增强 1.图片浏览 WinXP之前这一功能非ACDSee莫属,然而WinXP却带来了更为易用的图片浏览功能。众所周知,只要选择“缩略图”方式显示图片,我们就可以图片的缩略图预览其效果。选择“幻灯片”方式,则可以更清楚地看到图片的预览效果。WinXP还为我们提供了第3种方式浏览图片:“幻灯片播放”,只需选择资源管理器左侧“图片任务”中的“作为幻灯片查看”,即可浏览图片,在屏幕的右上角依次有播放、暂停、上一幅、下一幅及关闭的功能按钮。需要提醒的是,如果选择了一张或者多张图片后再选择“作为幻灯片查看”,则只会放映所选择的图片。 还有一点技巧:如果嫌“缩略图”方式预览的图片太小,我们可以通过修改注册表的方式改变其大小。在“运行”栏里输入“regedit”,打开注册表编辑器,依次展开HKEY_CUR RENT_USER Software MicrosoftWindows CurrentVersion Explorer,在其下新建一名为ThumbnailSize的DWORD值,将值改为十进制的200,可以看到预览图变大了吧。另外,新建名为ThumbnailQuality的DWORD值,通过设置其值改变缩略图的图片质量,如设为80,则以80%的质量显示缩略图。通过减小其值,可以缩短系统显示缩略图的时间。 注意:如果当前目录下有图片却没有出现“图片任务”或找不到“幻灯片”方式,可参见后文设置文件夹模板。 2.数码图片的处理 使用数码相机等设备,WinXP也准备了“扫描仪与照相机向导”。当数码相机连接到计算机后,在系统弹出的任务选择对话框里选择“将图片复制到计算机上的一个文件夹”,WinXP会自动读取相机里的图片,接下来在“扫描仪和照相机向导”选择要获取的图片,还有存放的路径,完成后WinXP就会把所选择的照片存放到指定目录了。值得一提的是,在选择存放路径时,WinXP已默认提供了一系列有助于分类的存放方式,方便我们对数码图片的管理。 双击一个图片文件,如果没有安装其他图片浏览软件,WinXP会首先调用“Windows图片和传真查看器”来打开文件(若已安装其他图片软件,也可右击图片文件并在“打开方式”中选择此工具)。可用其对图片进行简单加工,如缩放查看、旋转、打印、复制到等。试过用“Windows图片和传真查看器”打开TIFF文件吗?可以看到工具栏上又多出不少东西,通过这些工具可以给图片添加“注释”。至于用处,想想看,可以在数码相片上写上照相的时间地点,场景描述等,多年后回味,别有一番滋味啊。这一注释功能并不直接修改图片,在你不需要时可随时删去所加的注释,而保留图片的原样。 3.个性的文件夹 如果你也崇尚个性张扬,相信总会想方设法把自己的WinXP弄得与众不同。这里就来看一下,如何用WinXP百宝箱里的东东,把系统里大大小小的文件夹们,统统换掉那黄色的夹子外套。WinXP提供了很方便的文件夹自定义功能,在文件夹“属性”对话框的“自定义”页上,即可看见很多定义的内容。 文件夹模板:可供选择的有相册、图片、音乐和视频等,其区别在于不同的模板对应不同的默认文件查看方式(幻灯片、平铺、图标等)以及文件夹任务。使用了以上两种图片类文件夹模板,文件夹左侧的“常见任务栏”里,都会有“图片任务”供选择,而使用了音乐类或视频类文件夹模板,则分别对应的是“音乐任务”与“视频任务”。 文件夹图片:当文件夹以缩略图方式查看时,WinXP会把该文件夹里最近修改的4个图片作为默认的文件夹图片显示,但为了提醒自己,可以让它变得更醒目。只需单击“选择图片”就可选择某个图片作为此文件夹的图片。 文件夹图标:如果不以缩略图方式查看,文件夹将会以其“标准图标”表示――一个黄色的夹子,如果觉得这千篇一律的黄夹子没有个性,我们也可以换。单击“更改图标”,可以看到WinXP为我们在Shell32.dll里提供的许多图标,我们当然可以随便用上一用。 三、压缩与解压缩 目前我们使用的压缩解压缩软件想必都是WinZip或WinRAR等,它们各有自己的特点与用途,但实际应用中可以说95%以上的工作都是简单的压缩与解压缩,在这一点上,WinXP自带的压缩工具就足以满足需要了。 1.通过压缩磁盘对文件进行压缩 这种方法被WinXP冠名为“NTFS文件压缩”,只能在硬盘的NTFS分区上使用。打开要压缩文件/文件夹的“属性”对话框,选择“常规”页中的“高级”,勾选“高级属性”里的“压缩内容以便节省磁盘空间”,确定后,此文件/文件夹名会以蓝色显示。以这种方法压缩文件,实质上是对磁盘进行压缩,会带来了系统性能的降低(打开压缩文件时,系统将其解压缩,关闭文件时又重新压缩),因此建议仅用于对备份文件处理。 2.Zip文件的压缩 最先在Windows提供对Zip文件的支持始源于WinME,WinXP继承了这一特性,但基本上没有太多发展。这一功能被称为“Compressed(zipped) Folders”,只能进行最基本的压缩/解压缩工作,说好听点,就是“返璞归真”了。 实现方法一:在鼠标右键菜单上选择“新建”→“压缩(zipped)文件夹”。 实现方法二:选中欲压缩的文件(一个或多个),在其鼠标右键菜单上选择“发送到”→“压缩(zipped)文件夹”,即生成一个.zip文件。最后生成的文件名同鼠标单击的文件一致。 你还可以对.zip文件设置密码。打开一个.zip文件(确定是用WinXP自带功能打开,而不是用其他软件),选择菜单项的“文件”→“添加密码”,输入要设置的密码。之后,查看和解压缩此文件就需要密码了,可以满足一般的保密性要求。需要说明的是WinXP不能进行分卷压缩、添加注释等“高级任务”。 3.Zip文件的解压缩 压缩后的ZIP包可以像普通文件夹一样操作。如果要将ZIP包解压缩到指定位置,只需在其右键菜单上选择“全部提取...”利用“提取向导”,选择解压缩路径,输入密码(如果有的话),即可进行解压缩。 4.自解压包的制作 如果还有制作自解压包的需要,也不用去找什么专门工具,WinXP里仍然为你准备了――尽管微软并没有承认其存在。在“运行”对话框里输入“iexpress”,回车后打开“IExpress Wizard”。在向导里依次选择“Create new Self Extraction Directive file”→“Extract files only”(压缩目的:Package purpose)→输入解压缩时弹出对话框的标题(Package title)→输入对话框提示语(Confirmation prompt)→选择解压时是否显示许可协议(License agreement)→添加欲压缩的文件(Packaged files)→选择解压
<> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 第一章 第一章第一章 第一章 .NET 编 编 编程语言 程语言编程语言 程语言 C#.4 1.1 Microsoft.NET——一场新的革命.4 1.2 .NET 与 C#.6 1.3 C#语言的特点.8 1.4 小 结 .11 第二章 运行环境 全面了解.NET.12 2.1 .NET 结构.12 2.2 公用语言运行时环境与公用语言规范.13 2.3 开 发 工 具 .17 2.4 小 结 .19 第三章 编写第一个应用程序 .20 3.1 Welcome 程序 .20 3.2 代 码 分 析 .20 3.3 运 行 程 序 .23 .4 添 加 注 释 .25 3.5 小 结 .27 第二部分 C#程序设计基础.28 第四章 数 据 类 型 .28 4.1 值 类 型 .28 4.2 引 用 类 型 .33 4.3 装箱和拆箱 .39 4.4 小 结 .42 第五章 变量和常量 .44 5.1 变 量 .44 5.2 常 量 .46 5.3 小 结 .47 第六章 类 型 转 换 .48 6.1 隐式类型转换 .48 6.2 显式类型转换 .53 6.3 小 结 .56 第七章 表 达 式 .58 7.1 操 作 符 .58 7.2 算术操作符和算术表达式.59 7.3 赋值操作符和赋值表达式.64 7.4 关系操作符和关系表达式.65 <> page begin==================== 7.5 逻辑操作符和逻辑表达式.68 7.6 位 运 算 .69 7.7 其它特殊操作符 .72 7.8 小 结 .77 第八章 流 程 控 制 .79 8.1 条 件 语 句 .79 8.2 循 环 语 句 .86 8.3 条 件 编 译.90 8.4 异常处理语句 .95 8.5 小 结 .100 第三部分 面向对象的 C#.101 第九章 面向对象的程序设计 .101 9.1 面向对象的基本概念.101 9.2 对象的模型技术 .103 9.3 面向对象的分析 .105 9.4 面向对象的设计 .107 9.5 小 结 .110 第十章 类 .112 10.1 类 的 声 明 .112 10.2 类 的 成 员 .113 10.3 构造函数和析构函数 .119 10.4 小 结 .122 第十一章 方 法 .124 11.1 方法的声明.124 11.2 方法中的参数.125 11.3 静态和非静态的方法.129 11.4 方法的重载.130 11.5 操作符重载.134 11.6 小 结.137 第十二章 域 和 属 性 .139 12.1 域 .139 12.2 属 性 .143 12.3 小 结 .146 第十三章 事件和索引指示器 .148 13.1 事 件 .148 13.2 索引指示器 .151 13.3 小 结 .154 第十四章 继 承 .155 14.1 C#的继承机制.155 <> page begin==================== 14.2 多 态 性 .159 14.3 抽象与密封 .163 14.4 继承中关于属性的一些问题.169 14.5 小 结 .172 第四部分 深入了解 C#.174 第十五章 接 口 .174 15.1 组件编程技术 .174 15.2 接 口 定 义 .177 15.3 接口的成员 .178 15.4 接口的实现 .182 15.5 抽象类与接口 .195 15.6 小 结 .196 第十六章 组织应用程序 .198 16.1 基 本 概 念 .198 16.2 使用名字空间 .200 16.3 使用指示符 .203 16.4 程 序 示 例 .206 16.5 小 结 .213 第十七章 文 件 操 作 .215 17.1 .Net 框架结构提供的 I/O 方式 .215 17.2 文件存储管理 .217 17.3 读 写 文 件 .222 17.4 异步文件操作 .227 17.5 小 结 .234 第十八章 高 级 话 题 .235 18.1 注册表编程 .235 18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间成员速查.269 参 考 资 料 .300 <> page begin==================== 第一部分 C#语言概述 第一章 第一章第一章 第一章 .NET 编程语 编程编程 编程 言 语言语言 语言 C# 未来 未来未来 未来 5 年 年年 年 我们的目标就 我们的目标就我们的目标就 我们的目标就是超 是是 是 越今天各自为营的 超越今天各自为营的超越今天各自为营的 超越今天各自为营的 Web 站点 站点站点 站点 把 把把 把 Internet 建成一 建成建成 建成 个 一个一 一个可 可个可 可 以互相交换组件的地方 以互相交换组件的地方以互相交换组件的地方 以互相交换组件的地方 比尔 比尔比尔 比尔.盖茨 盖茨盖茨 盖茨 在本章中你将了解 Microsoft.NET 的概念 .NET 框架 C#语言在.NET 框架中的作用及其特性 1.1 Microsoft.NET 一场新的革命 1.1.1 什么是.NET 2000 年 6 月 22 日 不论对 Microsoft 还是对整个 IT 业界都将成为值得纪念的一天 这一天 微软公司正式推出了其下一代计算计划 Microsoft.NET(以下简称.NET) 这项计划将使微软现有的软件在 Web 时代不仅适用于传统的 PC 而且也能够满足目前 呈强劲增长势头的新设备 诸如蜂窝电话以及个人数字助理 Personal Digital Assistant, PDA 等的需要 微软还计划通过创建新的工具来吸引软件开发人员和合作伙伴对 Microsoft.NET 的认同 并且开发出其他基于 Internet 的服务 那么 你是否想知道 究竟什么是.NET? 请听听微软官员的声音 因特网的革命 从微软的角度来讲 我们就是要 建设一个平台来创建并且支持新一代的应用 我们必须有一套通用系统服务来支 持这样的操作 这种观点就说明 我们还有下一个层次的发展 也就是说因特网下一 步的发展 它将使因特网的作用远远超越展现一个网站 .NET 首先是一个开发平台 它定义了一种公用语言子集 Common Language Subset CLS ,这是一种为符合其规范的语言与类库之间提供无缝集成的混合语 .NET 统一了编程类库 提供了对下一代网络通信标准 可扩展标记语言 Extensible Markup <> page begin==================== Language XML 的完全支持 使应用程序的开发变得更容易 更简单 Microsoft.NET 计划还将实现人机交互方面的革命 微软将在其软件中添加手写和语音识别的功能 让人们能够与计算机进行更好的交流 并在此基础上继续扩展功能 增加对各种用户 终端的支持能力 最为重要的 .NET 将改变因特网的行为方式 软件将变成为服务 与 Microsoft 的其它产品一样 .NET 与 Windows 平台紧密集成 并且与其它微软产品 相比它更进一步 由于其运行库已经与操作系统融合在了一起 从广义上把它称为一 个运行库也不为过 简而言之 .NET 是一种面向网络 支持各种用户终端的开发平台环境 微软的宏 伟目标是让 Microsoft.NET 彻底改变软件的开发方式 发行方式 使用方式等等 并且 不止是针对微软一家 而是面向所有开发商与运营商 .NET 的核心内容之一就是要搭 建第三代因特网平台 这个网络平台将解决网站之间的协同合作问题 从而最大限度 地获取信息 在 .NET 平台上 不同网站之间通过相关的协定联系在一起 网站之间 形成自动交流 协同工作 提供最全面的服务 1.1.2 我们为什么需要.NET 某一天 你出差到外地 在机场租借手机电话 在向该终端插入自己的 IC 卡后 自己的地址簿和计划簿被自动下载 随即它就变成了你个人专用的 PDA 这不是梦境 这是.NET 为我们描绘的一个未来生活的场景 人们的需要总是无法满足 我们不断地问自己 我们还应该有些什么 需求推 动着技术的进步 在二十一世纪 Internet 将成为商业活动的主要场所 B2B B2C 等 电子商务的运作方式 一对一营销的经营概念将网络的服务功能提高到了前所未有的 程度 微软公司在此时提出.NET 有其深远的战略考虑 改革商务模型 微软公司感觉到只靠销售软件包的商务模型没有什么前途 该公 司打算今后将中心转移到可以在网络上使用“服务”型商务 这样 首要的问题就是解 决网络上用来开发并执行“服务”的平台 这就是 Microsoft.NET 提高软件开发生产效率 并且试图使应用软件的发布更为容易 再也不想因为 DLL 版本不同而烦恼 希望不用重新启动电脑就能够安装应用软件 改进用户界面 并能支持多种用户终端 用户界面演进的结果包括两方面的内容 一是完成传统的 PC 界面与基于 XML 的浏览器界面间的过渡 二是对自然语言和语音 识别的支持 从而使用户与各种终端之间的沟通更加透明 真正达到网络互连的 3A Anywhere Anytime Any device 今天 许多的人时常问 除了上网看新闻 我们究竟还能干什么 这是因为今 天的互联网与旧式的大型计算机的工作模式还有许多相似之处 信息被储存在中央服 务器内 而用户的所有操作都要依靠它们 让不同的网址之间相互传递有意义的信息 或者合作提供更广泛和更深层次的服务 还是一件十分困难的事 现代人时常有一种困惑 感觉到如今生活在技术与机器架构的丛林中 我们在努 力地去适应机器 适应技术 而不是机器和技术适应人类 科技以人为本还只是一个 美好的愿望 这是因为我们还不能将控制信息的权利交给那些需要信息的人们 .NET <> page begin==================== 的出现 意味着人们可以只用一种简单的界面就可以编写 浏览 编辑和分享信息 而且还可以得到功能强大的信息管理工具 由于使用的所有的文件都以符合网络协议 的格式存在 所以所有的商业用户和个人用户都可以方便地查找和使用其中的信息 任何规模的公司都可以使用相同的工具与他们的供应商 商业伙伴和客户高效地沟通 和分享信息 这样就创造出一种全新的协同工作模式 总之 .NET 战略是一场软件革命 .NET 对最终用户来说非常重要 因为计算机的功能将会得到大幅度提升 同 时计算机操作也会变得非常简单 特别地 用户将完全摆脱人为的硬件束缚 用户可 以自由冲浪于因特网的多维时空 自由访问 自由查看 自由使用自己的数据 而不 是束缚在便携式电脑的方寸空间——可通过任何桌面系统 任何便携式电脑 任何移 动电话或 PDA 进行访问 并可对其进行跨应用程序的集成 .NET 对开发人员来说也十分重要 因为它不但会改变开发人员开发应用程序 的方式 而且使得开发人员能创建出全新的各种应用程序 大幅提高软件生产率 .NET 将保证完全消除当今计算技术中的所有缺陷 .NET 定能实现确保用户从任何地点 任 何设备都可访问其个人数据和应用程序的宏伟蓝图 .NET 把雇员 客户和商务应用程序整和成一个协调的 能进行智能交互的整 体 而各公司无疑将是这场效率和生产力革命的最大受益者 .NET 承诺为人类创造一 个消除任何鸿沟的商务世界 1.1.3 .NET 的核心组件 .NET 的核心组件包括 一组用于创建互联网操作系统的构建块 其中包括 Passport.NET 用于用户认 证 以及用于文件存储的服务 用户首选项管理 日历管理以及众多的其它任务 构建和管理新一代服务的基本结构和工具 包括 Visual Studio.NET .NET 企 业服务器 .Net Framework 和 Windows.NET 能够启用新型智能互联网设备的.NET 设备软件 .NET 用户体验 1.2 .NET 与 C# 1.2.1 支持多种编程语言的.NET 结构框架 让我们翻开教科书 回顾一下近十年来软件开发的历史 多年以前 当微软的组件对象模型 Component Object Model, COM 尚未推出时 软件的复用性对于开发人员仅仅是一种美好的憧憬 成千上万的程序员为了处理通信 接口和不同语言间的冲突而通宵达旦地艰辛劳动 但却收效甚微 COM 的出现改变了 <> page begin==================== 这一切 通过将组件改变为通用 集成型的构件 开发人员正逐渐地从过去的繁复编 程事务中解脱出来 可以选择自己最得心应手的编程语言进行编程 然而 软件组件 与应用程序之间的联合仍然是松散的 不同的编程语言与开发平台限制了部件间的互 用性 其结果是产生了日益庞大的应用程序与不断升级的软硬件系统 举个很简单的 例子 只用五行 C 语言代码就能编写出的一个简单程序 若使用 COM 来编写 结果 会是令人吃惊的 我们需要几百行代码 COM 在带来巨大价值的同时 也大大增加了 开发开销 而.NET Framework 的出现使得一切问题都迎刃而解 实际上 在.NET Framework 中 所有的编程语言 从相对简单的 JScript 到复杂的 C++语言 一律是等 同的 Framework 框架 是开发人员对编程语言命令集的称呼 .Net 框架的意义就在 于只用统一的命令集支持任何的编程语言 正如微软 Web 服务中心的成组产品经理 John Montgomery 所说 只需简单地一用 .NET 框架便可消除各种异类框架之间的差异 将它们合并为一个整体 .NET 的作用不仅仅是将开发人员从必须掌握多种框架的束缚 中解脱出来 通过创建跨编程语言的公共 API 集 .NET 框架可提供强大的跨语言继承 性 错误处理和调试功能 现在 开发人员可以自由地选择他们喜欢的编程语言 .NET 平台欢迎所有人的垂顾 ”.NET 将使编程人员梦想的语言互用性变成为近在眼前的现 实 想想看 一个在 Visual Basic VB 中定义的类能够在另一种与它完全不同的语言 环境中使用 调试 甚至继承 这是多么令人兴奋的事情 .NET 框架是.NET 平台的基础架构 其强大功能来自于公共语言运行时 Common Language Runtime,CLR 将在第二章中进行详细的解释 环境和类库 CLR 和类库 包 括 Windows Forms ADO.NET 和 ASP.NET 紧密结合在一起 提供了不同系统之间 交叉与综合的解决方案和服务 .NET 框架创造了一个完全可操控的 安全的和特性丰 富的应用执行环境 这不但使得应用程序的开发与发布更加简单 并且成就了众多种 类语言间的无缝集成 1.2.2 面向.Net 的全新开发工具 C# 在最近的一段时间里 C 和 C++一直是最有生命力的程序设计语言 这两种语言 为程序员提供了丰富的功能 高度的灵活性和强大的底层控制能力 而这一切都不得 不在效率上作出不同程度的牺牲 如果你使用过包括 C 和 C++在内的多种程序设计语 言 相信你会深刻体会到它们之间的区别 比如与 Visual Basic 相比 Visual C++程序 员为实现同样的功能就要花费更长的开发周期 由于 C 和 C++即为我们带来了高度的 灵活性 又使我们必须要忍受学习的艰苦和开发的长期性 许多 C 和 C++程序员一直 在寻求一种新的语言 以图在开发能力和效率之间取得更好的平衡 今天 人们改进 开发出了许多语言以提高软件生产率 但这些或多或少都以牺 牲 C 和 C++程序员所需要的灵活性为代价 这样的解决方案在程序员身上套上了太多 的枷锁 限制了他们能力的发挥 它们不能很好地与原有的系统兼容 更为令人头痛 的是 它们并不总是与当前的 Web 应用结合得很好 理想的解决方案 是将快速的应用开发与对底层平台所有功能的访问紧密结合在 <> page begin==================== 一起 程序员们需要一种环境 它与 Web 标准完全同步 并且具备与现存应用间方便 地进行集成的能力 除此之外 程序员们喜欢它允许自己在需要时使用底层代码 针对该问题 微软的解决方案是一种称之为 C#的程序语言 C#是一种现代的面向 对象的程序开发语言 它使得程序员能够在新的微软.NET 平台上快速开发种类丰富的 应用程序 .NET 平台提供了大量的工具和服务 能够最大限度地发掘和使用计算及通 信能力 由于其一流的面向对象的设计 从构建组件形式的高层商业对象到构造系统级应 用程序 你都会发现 C#将是最合适的选择 使用 C#语言设计的组件能够用于 Web 服务 这样通过 Internet 可以被运行于任何操作系统上任何编程语言所调用 不但如此 C#还能为 C++程序员提供快捷的开发方式 又没有丢掉 C 和 C++的基 本特征 强大的控制能力 C#与 C 和 C++有着很大程度上的相似性 熟悉 C 和 C++ 的开发人员很快就能精通 C# 1.3 C#语言的特点 C#在带来对应用程序的快速开发能力的同时 并没有牺牲 C 与 C++程序员所关心 的各种特性 它忠实地继承了 C 和 C++的优点 如果你对 C 或 C++有所了解 你会发 现它是那样的熟悉 即使你是一位新手 C#也不会给你带来任何其它的麻烦 快速应 用程序开发 Rapid Application Development RAD 的思想与简洁的语法将会使你迅 速成为一名熟练的开发人员 正如前文所述 C#是专门为.NET 应用而开发出的语言 这从根本上保证了 C# 与.NET 框架的完美结合 在.NET 运行库的支持下 .NET 框架的各种优点在 C#中表现 得淋漓尽致 让我们先来看看 C#的一些突出的特点 相信在以后的学习过程中 你将 会深深体会到 # SHARP 的真正含义 简洁的语法 精心地面向对象设计 与 Web 的紧密结合 完整的安全性与错误处理 版本处理技术 灵活性与兼容性 1.3.1 简洁的语法 请原谅 虽然我们一再强调学习本书不需要任何的编程基础 但在这里还不得不 提到 C++ 在缺省的情况下 C#的代码在.NET 框架提供的 可操控 环境下运行 不允许直 接地内存操作 它所带来的最大特色是没有了指针 与此相关的 那些在 C++中被疯 狂使用的操作符 例如 -> 和 ., 已经不再出现 C#只支持一个 . 对 <> page begin==================== 于我们来说 现在需要理解的一切仅仅是名字嵌套而已 C#用真正的关键字换掉了那些把活动模板库 Active Template Library ALT 和 COM 搞 得 乱 糟 糟 的 伪 关 键 字 , 如 OLE_COLOR BOOL VARIANT_BOOL DISPID_XXXXX 等等 每种 C#类型在.NET 类库中都有了新名字 语法中的冗余是 C++中的常见的问题 比如 const”和 #define 各种各样的字 符类型等等 C#对此进行了简化 只保留了常见的形式 而别的冗余形式从它的语法 结构中被清除了出去 1.3.2 精心地面向对象设计 也许你会说 从 Smaltalk 开始 面向对象的话题就始终缠绕着任何一种现代程序 设计语言 的确 C#具有面向对象的语言所应有的一切特性 封装 继承与多态 这 并不出奇 然而 通过精心地面向对象设计 从高级商业对象到系统级应用 C#是建 造广泛组件的绝对选择 在 C#的类型系统中 每种类型都可以看作一个对象 C#提供了一个叫做装箱 boxing 与拆箱 unboxing 的机制来完成这种操作 而不给使用者带来麻烦 这在 以后的章节中将进行更为详细的介绍 C#只允许单继承 即一个类不会有多个基类 从而避免了类型定义的混乱 在后 面的学习中你很快会发现 C#中没有了全局函数 没有了全局变量 也没有了全局常 数 一切的一切 都必须封装在一个类之中 你的代码将具有更好的可读性 并且减 少了发生命名冲突的可能 整个 C#的类模型是建立在.NET 虚拟对象系统 Visual Object System VOS 的基 础之上 其对象模型是.NET 基础架构的一部分 而不再是其本身的组成成分 在下面 将会谈到 这样做的另一个好处是兼容性 借助于从 VB 中得来的丰富的 RAD 经验 C#具备了良好的开发环境 结合自身强 大的面向对象功能 C#使得开发人员的生产效率得到极大的提高 对于公司而言 软 件开发周期的缩短将能使它们更好地应付网络经济的竞争 在功能与效率的杠杆上人 们终于找到了支点 1.3.3 与 Web 的紧密结合 .NET 中新的应用程序开发模型意味着越来越多的解决方案需要与 Web 标准相统 一 例如超文本标记语言 Hypertext Markup Language HTML 和 XML 由于历史 的原因 现存的一些开发工具不能与 Web 紧密地结合 SOAP 的使用使得 C#克服了这 一缺陷 大规模深层次的分布式开发从此成为可能 由于有了 Web 服务框架的帮助 对程序员来说 网络服务看起来就像是 C#的本地 对象 程序员们能够利用他们已有的面向对象的知识与技巧开发 Web 服务 仅需要使 用简单的 C#语言结构 C#组件将能够方便地为 Web 服务 并允许它们通过 Internet 被 运行在任何操作系统上的任何语言所调用 举个例子 XML 已经成为网络中数据结构 传送的标准 为了提高效率 C#允许直接将 XML 数据映射成为结构 这样就可以有 <> page begin==================== 效地处理各种数据 1.3.4 完全的安全性与错误处理 语言的安全性与错误处理能力 是衡量一种语言是否优秀的重要依据 任何人都 会犯错误 即使是最熟练的程序员也不例外 忘记变量的初始化 对不属于自己管理 范围的内存空间进行修改 这些错误常常产生难以预见的后果 一旦这样的软 件被投入使用 寻找与改正这些简单错误的代价将会是让人无法承受的 C#的先进设 计思想可以消除软件开发中的许多常见错误 并提供了包括类型安全在内的完整的安 全性能 为了减少开发中的错误 C#会帮助开发者通过更少的代码完成相同的功能 这不但减轻了编程人员的工作量 同时更有效地避免了错误发生 .NET 运行库提供了代码访问安全特性 它允许管理员和用户根据代码的 ID 来配 置安全等级 在缺省情况下 从 Internet 和 Intranet 下载的代码都不允许访问任何本地 文件和资源 比方说 一个在网络上的共享目录中运行的程序 如果它要访问本地的 一些资源 那么异常将被触发 它将会无情地被异常扔出去 若拷贝到本地硬盘上运 行则一切正常 内存管理中的垃圾收集机制减轻了开发人员对内存管理的负担 .NET 平台提供的垃圾收集器 Garbage Colection GC 将负责资源的释放与对象撤销时的 内存清理工作 变量是类型安全的 C#中不能使用未初始化的变量 对象的成员变量由编译器负 责将其置为零 当局部变量未经初始化而被使用时 编译器将做出提醒 C#不支持不 安全的指向 不能将整数指向引用类型 例如对象 当进行下行指向时 C#将自动验 证指向的有效性 C#中提供了边界检查与溢出检查功能 1.3.5 版本处理技术 C#提供内置的版本支持来减少开发费用 使用 C#将会使开发人员更加轻易地开发 和维护各种商业应用 升级软件系统中的组件 模块 是一件容易产生错误的工作 在代码修改过程中 可能对现存的软件产生影响 很有可能导致程序的崩溃 为了帮助开发人员处理这些 问题 C#在语言中内置了版本控制功能 例如 函数重载必须被显式地声明 而不会 像在 C++或 Java 中经常发生的那样不经意地被进行 这可以防止代码级错误和保留版 本化的特性 另一个相关的特性是接口和接口继承的支持 这些特性可以保证复杂的 软件可以被方便地开发和升级 1.3.6 灵活性和兼容性 在简化语法的同时 C#并没有失去灵活性 尽管它不是一种无限制的语言 比如 它不能用来开发硬件驱动程序 在默认的状态下没有指针等等 但是 在学习过程中 你将发现 它仍然是那样的灵巧 如果需要 C#允许你将某些类或者类的某些方法声明为非安全的 这样一来 你 <> page begin==================== 将能够使用指针 结构和静态数组 并且调用这些非安全的代码不会带来任何其它的 问题 此外 它还提供了一个另外的东西 这样的称呼多少有些不敬 来模拟指针的 功能 delegates 代表 再举一个例子 C#不支持类的多继承 但是通过对接口的 继承 你将获得这一功能 下面谈谈兼容性 正是由于其灵活性 C#允许与 C 风格的需要传递指针型参数的 API 进行交互操作 DLL 的任何入口点都可以在程序中进行访问 C#遵守.NET 公用语言规范 Common Language Specification CLS 从而保证了 C#组件与其它语言组件间的互操作性 元 数据 Metadata 概念的引入既保证了兼容性 又实现了类型安全 1.4 小 结 Microsoft.NET 计划将彻底改变我们对因特网的认识 从而在这样一个网络时代彻 底改变我们的生活 软件是一种服务 技术是我们的仆人 时间与地点将不再是我们 面前的障碍 建立在 CLR 与类库基础上的.NET 框架是.NET 平台的核心组件之一 这 为软件的可移植性与可扩展能力奠定了坚实的基础 并为 C#语言的应用创造了良好的 环境 C#是.NET 平台的通用开发工具 它能够建造所有的.NET 应用 其固有的特性保 证了它是一种高效 安全 灵活的现代程序设计语言 从最普通的应用到大规模的商 业开发 C#与.NET 平台的结合将为你提供完整的解决方案 在本章中 我们提出了与.NET 以及与 C#语言相关的一些概念 例如 CLR VOS 和 GC 也许你是初次接触它们 但不用担心 在以后的各章中我们将详细地介绍这些 相关的概念与知识 相信通过学习 你将能够迅速掌握它们 并熟练地运用它们提供 的各种特性 复习题 1 什么是.NET 2 简要说明.NET 战略的意义 3 .NET 的核心组件包括哪些 4 C#与其它语言相比有哪些突出特点 <> page begin==================== 第二章 运行环境 全面了解.NET C#运行在.NET 平台之上 其各种特性与.NET 密切联系 它没有自己的运行库 许多强大的功能均来自.NET 平台的支持 因此 要想真正掌握 C#首先必须了解.NET 本章将向你介绍 C#的运行环境 重点放在.NET 公用语言运行时环境与公用语言规范 上 最后介绍了.NET 的开发工具 2.1 .NET 结构 .NET 包括四个组成部分 VOS 类型系统 元数据 公用语言规范 虚拟执行系统 下面分别对它们进行简要介绍 2.1.1 虚拟对象系统 .NET 跨语言集成的特性来自于虚拟对象系统 VOS 的支持 在不同语言间进行代码复用和应用集成中所遇到的最大问题 是不同语言类型系 统间的相容性问题 可以想象 不同的语言虽然语法结构大体相同 但数据类型与语 言环境本身的各种特点联系紧密 很难想象一种解释性的语言所拥有的数据类型会与 一种编译语言相同 而即使相同的数据类型在不同的语言环境中表示的意义也存在差 别 例如 同样是整数类型 在 MSSQL 中的长度是 32 位 而在 VB 中却是 16 位 至 于日期时间与字符串类型在这方面的区别就更加明显了 VOS 的建立就是为了改变这种状况 它既支持过程性语言也支持面向对象的语言 同时提供了一个类型丰富的系统来容纳它所支持的各种语言的特性 它在最大程度上 屏蔽了不同语言类型系统间的转换 使程序员能够随心所欲地选择自己喜欢的语言 当 然 这种语言必须支持.NET 应用 从事开发 保证了不同语言间的集成 对于过程性语言 它描述了值的类型并指定了类型的所有值必须遵守的规则 在 面向对象的语言方面 它统一了不同编程语言的对象模型 每一个对象在 VOS 中都被 唯一标识以与其它对象相区别 <> page begin==================== 2.1.2 元数据 元数据是对 VOS 中类型描述代码的一种称呼 在编译程序将源代码转换成为中间 代码时 它将自动生成 并与编译后的源代码共同包含在二进制代码文件中 元数据 携带了源代码中类型信息的描述 这在一定程度上解决了版本问题 程序使用的类型 描述与其自身绑定在一起 在 CLR 定位与装载类型时 系统通过读取并解析元数据来获得应用程序中的类型 信息 JIT 编译器获得加载的类型信息后 将中间语言代码翻译成为本地代码 在此基 础上根据程序或用户要求建立类型的实例 由于整个过程中 CLR 始终根据元数据建 立并管理对应特定应用程序的类型 从而保证了类型安全性 此外 元数据在解决方法的调用 建立运行期上下文界限等方面都有着自己的作 用 而关于元数据的一切都由.NET 在后台完成 2.1.3 公用语言规范 公用语言规范 Common Language Specification CLS 是 CLR 定义的语言特性 集合 主要用来解决互操作问题 如果一个类库遵守 CLS 那么同样遵守 CLS 规范的 其它编程语言将能够使用它的外部可见项 详细的内容见本章第二节 2.1.4 虚拟执行系统 虚拟执行系统 Visual Execution System VES 是 VOS 的实现 它用来驱动运行 环境 元数据的生成与使用 公用语言规范的满足性检查以及应用程序执行过程中的 内存管理均由它来完成 具体说来 VES 主要完成以下功能 装入中间代码 使用 JIT 将中间代码转换为本地码 装入元数据 代码管理服务 包括垃圾收集器和异常处理 定制与调试服务 线程和环境管理 2.2 公用语言运行时环境与公用语言规范 了解了.NET 的结构之后 我们该看看.NET 利用其结构为我们创造的运行环境 公用语言运行时环境 它是 C#及其它支持.NET 平台的开发工具的运行基础 具体 来说 它为我们的应用提供了以下益处 跨语言集成的能力 跨语言异常处理 内存管理自动化 <> page begin==================== 强化的安全措施 版本处理技术 组件交互的简化模型 2.2.1 理解 CLR .NET 提供了一个运行时环境 叫做公用语言运行时 它管理着代码的执行 并使 得开发过程变得更加简单 这是一种可操控的执行环境 其功能通过编译器与其它工 具共同展现 你的代码将受益于这一环境 依靠一种以运行时为目标的 指完全支持 运行时环境的 编译器所开发的代码叫做可操控代码 它得益于可操控环境的各种特 性 跨语言集成 跨语言异常处理 增强的安全性 版本处理与开发支持 简单的组 件交互模型以及调试服务 为了使运行时环境能够向可操控代码提供服务 语言编译 器需要产生一种元数据 它将提供在你使用语言中的类型 成员 引用的信息 元数 据与代码一起存储 每个可加载的 CLR 映像均包含了元数据 运行时环境使用元数据 定位并载入类 在内存中展开对象实例 解决方法调用 产生本地代码 强制执行安 全性 并建立运行时环境的边界 运行时环境自动处理对象的展开与引用 当它们不再使用时负责它们的释放 被 运行时环境进行这样的生命期管理的对象被称为可操控代码 自动内存管理消除了内 存溢出 同时也解决了其它一些常见的语法错误 如果你的代码是可操控的 你仍然 可以在需要的时候使用非可控代码 或者在你的.NET 应用中同时使用可控与非可控代 码 由于语言编译器支持他们自己的类型 比如一些原始类型 你可能并不总是知道 也不必知道 你的数据是否是可控的 CLR 使设计跨语言的组件与应用变得更加容易 以不同语言设计的对象能够彼此 间进行通信 并且它们的行为能够紧密地综合与协调 举个例子 你定义了一个类 然后可以在另一种不同的语言中从该类中派生了一个类或者调用它其中的一个方法 你也可以向另一种语言中类的方法传递该类的一个实例 这种跨语言的集成之所以可 能 因为以运行时间为目标的语言编译器与工具使用一种运行时间所定义的公用类型 系统 他们遵守运行时的规则 公用语言规范 来定义新的类型 生成 使用 保持 并绑定类型 作为元数据的一部分 所有可控组件携带了关于它们所依赖的组件与资源的信息 运行时环境使用这些信息来保证你的组件或应用具有需要的所有东西的特定版本 其 结果是你的代码将不会因为版本冲突而崩溃 注册信息与状态数据不再保存在难以建 立与维护的注册表中 你所定义的类型及附属信息作为元数据被保存 这使得复制与 移动组件的复杂程度得到降低 编译工具用他们自己的方式向开发人员展现 CLR 的功能 这意味着运行时间的一 些特性可能在不同的语言中的表现形式将会有所不同 你怎样体验运行时的特性将取 决于你所使用的语言 比如说 如果你是一位 VB 开发人员 你可能注意到在运行时 环境的帮助下 VB 语言比以前具有更多的面向对象的特性 <> page begin==================== 2.2.2 可操控执行的含义 前面的叙述中 我们多次提到了 可操控 这一概念 这意味着它指向的对象在 执行过程中完全被运行时环境所控制 在执行过程中 运行时环境提供以下服务 自 动内存管理 调试支持 增强的安全性及与非可操控代码的互操作性 例如 COM 组件 在可控执行进程中的第一步是选择源代码的生成工具 如果你希望你的应用拥有 CLR 提供的优势 你必须使用一种 或多种 以运行时为目标的语言编译器 例如 VB C# VC 的编译器 或者一种第三方编译器如 PERL 或 COBOL 编译器 由于运行时是一种多语言执行环境 它支持众多的数据类型和语言特性 你使用 的语言编译器决定你将使用运行时的哪一部分功能子集 在代码中使用的语法由你的 编译器决定 而不是运行时环境 如果你的组件需要被其他语言的组件完全使用 那 么你必须在你组件的输出类型中使用 CLR 所要求的语言特征 当你完成并编译你的代码时 编译器将它转换为微软中间语言 Microsoft Intermediate Language MSIL 同时产生元数据 当你要执行你的代码时 这种中间 语言被即时 Just In Time JIT 编译器编译成为本地代码 如果安全策略需要的代码 是类型安全的 通常情况下都是如此 JIT 编译器将在编译进程中对中间语言进行 类型检查 一旦失败 在代码执行中将会触发异常 2.2.3 CLR 的突出特色 跨语言集成的能力 CLR 包含了一个丰富的语言特性集 保证了它与各种程序设计语言的兼容性 这 一特性集即公用语言规范 稍后将对其进行详细说明 内存管理自动化 在执行过程中管理应用程序的资源是一项单调而困难的工作 它会将你的注意力 从你本应解决的问题中引开 而垃圾收集机制完全解决了程序员在编程过程中头痛的 问题 跟踪内存的使用 并知道何时将它们释放 在面向对象的环境中 每种类型都标识了对你的应用有用的某种资源 为了使用 这些资源 你需要为类型分配内存 在应用中 访问一种资源要通过以下步骤 1 为类型分配内存 2 初始化内存 设置资源的初始状态并使其可用 3 通过访问该类型的实例成员来访问资源 4 卸下将被清除的资源状态 5 释放内存 这一看似简单的过程在实际的编程中是产生程序错误的主要来源之一 更可怕的 是 内存中的错误往往导致不可预见的结果 如果你有过编程的经验 想想看 有多 少次你的程序因为内存访问错误而崩溃 CLR 要求所有的资源从可操控的堆 注 在此指一种内存结构 中分配 当一个 <> page begin==================== 进程被初始化后 CLR 保留了一个未被分配的地址空间 这一区域叫做可操控堆 在 堆中保持了指向下一个将被分配给对象的堆地址的指针 NEXT 初始状态下 该指 针是保留地址空间的基地址 一个应用使用新的操作产生对象 此操作首先检查新对 象需要字节的大小是否会超出保留空间 如果对象大小合适 指向下一个地址的指针 将指向堆中的这个对象 该对象的构造器被调用 新的操作返回对象的地址 当一个应用请求建立一个对象时 地址空间可能不够大 堆将发现这一点 通过 将新对象的大小与 NEXT 指针相加 并与堆的大小进行比较 这时垃圾收集器就将被 调用 在这里 CLR 引入了 代 的概念 代 指堆中对象产生的先后 这样 垃圾 收集器在将发生溢出时回收属于特定的 代 的对象 而不是回收堆中的所有对象 6 即时编译 在各种语言的编译器对源代码进行编译之后 在 CLR 环境中产生的是中间代码 出 于兼容性与跨语言集成的考虑 其内容虽然有效 但在转化为本地代码之前它本身是 不可执行的 这就是 JIT 编译器需要完成的工作 这里需要说明一个问题 为什么要即时编译 而不是一次性的将中间代码文件进 行编译 答案很简单 原因在于效率 在大型的应用中 你很少会用到程序的全部功 能 这种边执行边编译的措施比一次性的完全编译效率更高 在 Windows 平台中 CLR 带有三个不同的 JIT 编译器 7 缺省的编译器 主编译器 由它进行数据流分析并输出经过优化的本地代 码 所有的中间代码指令均可被它处理 8 PREJIT 它建立在主 JIT 编译器之上 其运行方式更像一个传统的编译器 每当一个.NET 组件被安装时它就运行 9 ECONOJIT 在并不充分优化的前提下 它能够快速完成 IL 代码到本地码的 转换 编译速度与运行速度都很快 为了配合编译器的工作 在.NET SDK 的安装路径下的/bin 目录中有一个负责管理 JIT 的应用程序 jitman.exe 具体的使用参见联机帮助 10 解决版本与发布问题 在当前以组件为基础的系统中 开发人员和用户对于软件版本和发布中存在的问 题已经十分熟悉了 当我们安装一个新的应用之后 我们很可能发现原本正常的某个 应用程序奇怪地停止了工作 绝大多数开发人员将时间花在了确保所有注册表入口的 一致性 以便激活 COM 类上 这就是所谓的 DLL 地狱 .NET 平台通过使用集合来解决这一问题 在这里 集合 是一个专有名词 指 类型与资源的发布单元 在很大程度上它等同于今天的 DLL 正像.NET 用元数据描述 类型一样 它也用元数据描述包含类型的集合 通常说来 集合由四个部分组成 集 合的元数据 集合的内部清单 元数据描述的类型 实现类型的中间语言代码和一组 资源 在一个集合中 以上四个部分并不是都必须存在 但是 集合中必须包含类型 或资源 这样集合才有意义 在.NET 中一个基本的设计方针是使用孤立的组件 一个孤立的集合的含义是指一 个集合只能被一个应用所访问 在一台机器上 它不被多个应用共享 也不会受其它 应用程序对系统的更改的影响 孤立 赋予了开发人员在自己的程序中对代码的完全 <> page begin==================== 控制权 任何共享代码都需要被明确地标识 同时 .NET 框架也支持共享集合的概念 一个共享集合指在一台机器上被多个应用共享的集合 共享集合需要严格地命名规定 有了.NET 应用程序间的共享代码是明确定义的 共享集合需要一些额外的规则来避 免我们今天遇到的共享冲突问题 共享代码必须有一个全局唯一的名称 系统必须提 供名称保护 并在每当引用共享集合时 CLR 将对版本信息进行检查 此外.NET 框架 允许应用或管理员在明确说明的版本政策下重写集合的版本信息 2.2.4 公用语言规范 使被不同语言的编译器所编译的对象能够相互理解的唯一方法 是所有在互操作 过程中涉及的数据类型和语言特性对所有的语言来说是公共的 为了这个目的 公用 运行时环境标识了一组语言特征的集合 称为公用语言规范 CLS 如果你的组件在 应用程序接口 Application Program Interface 中仅使用 CLS 的特征语言 包括子类 那么该组件能够被任何支持CLS的语言所编译的组件访问 所有支持CLS并仅使用CLS 中的语言特征的组件被称为符合 CLS 的组件 设计公用语言规范时遇到的一个最主要的挑战是选择适当的语言特性子集的大 小 它应具有完全的表达能力 又应足够小 使得所有的语言能够容纳它 由于 CLS 是关于语言互用性的规范 它的规则仅应用于外部可见的条目中 CLS 假设语言间的 互操作性仅在语言集合的边界发生交叉时才是重要的 也就是说 在单一的语言集中 对于编程技术的使用没有任何限制 CLS 的规则仅作用于在定义它们的语言集合之外 仍然可见的项上 这样就大大缩小了 CLS 的范围 减轻了系统的负担 在 CLS 中是用 System.CLSCompliantAtribute 类来标识一个集合或者类是否是符合 CLS 规范的 在 System.CLSCompliantAtribute 的构造器中有一个 Boolean 型的返回值 代表了与之相关联的项是否符合 CLS 规范 2.3 开 发 工 具 .NET 为使用与开发人员提供了功能强大 种类丰富的管理与开发工具 同时它们 也是.NET 框架提供的服务 我们将它们列在下面 正是由于有了它们的支持.NET 才 变得如此强大 1. Visual Studio.NET 是.NET 的核心开发工具 包括微软提供的各种开发语言 其中有 Visual C# 2. Assembly Generation Utility (al.exe) 用来建立集合的工具 它能够将资源文件 或 MSIL 格式的文件转换为带有内容清单的集合 3. Windows Forms ActiveX Control Importer (aximp.exe) 完成 COM 类库中类型定 义的转换 使 ActiveX 控件能够在 Windows 窗口控件上使用 4. Code Access Security Policy Utility (caspol.exe) 在用户与机器水平上修改安全策 略 <> page begin==================== 5. Software Publisher Certificate Test Utility (Cert2spc.exe) 用于从 X.509 证书中生 成软件出版证明书 SPC 6. Certificate Manager Utility (certmgr.exe) 管理证书 证书信任列表和证书回收列 表 7. Certificate Verification Utility (chktrust.exe) 检查证书签名的合法性 8. Runtime Debugger (cordbg.exe) 运行时调试器 是一个命令行程序 帮助开发 人员发现和调试基于 CLR 的应用程序中的错误 9. Global Assembly Cache Utility (gacutil.exe) 允许你浏览与操纵全局集合缓存中 内容的命令行程序 10. MSIL Assembler (ilasm.exe) MSIL 汇编程序 协助设计与实现 MSIL 生成器的 程序 11. MSIL Disassembler (ildasm.exe) MSIL 反汇编程序 与 ilasm.exe 共同使用 将 由 MSIL 代码产生的 Portable Executable 文件转换为文本文件 12. Instaler Utility (instalutil.exe) 用来安装与卸载服务资源 13. License Compiler (lc.exe) 产生可包含在可执行二进制文件中的二进制资源文 件 14. Certificate Creation Utility (makecert.exe) 生成 X.509 证书与用于数字签名的公 用与私有密钥 15. Permissions View Utility(permview.exe) 通过一个集合浏览许可集的工具 16. Peverify Utility(peverify.exe) 检查中间语言与元数据是否符合类型安全认证要 求 17. Assembly Registration Tool(RegAsm.exe) 读取集合中的元数据并加上必要注册 表入口信息 使得 COM 客户透明地建立 CLR 的类 18. Services Registration Tool (RegSvcs.exe) 服务注册工具 它完成执行以下功能 装载与注册一个集合 为现有的 COM+1.0 应用生成 注册与安装类库 19. Resource File Generator Utility(ResGen.exe) 资源文件生成器 用来将文本文件 和 XML 格式的资源文件转换为 CLR 的二进制文件 20. Secutil Utility(SecUtil.exe) 使得从集合中抽取的安全信息更加容易 21. Set Registry Utility(setreg.exe) 改变注册表中公开密钥密码系统的设置 22. Assembly Cache Viewer(shfusion.dl) 允许你使用 Windows 浏览器察看与操作 全局集合缓存中的内容 23. File Signing Utility(signcode.exe) 为 PE (portable executable)文件做标记 赋予 程序员在组件安全约束的基础上对安全性有更多的控制权 24. Shared Name Utility(Sn.exe) 帮助程序员以共享名称建立集合 25. Soapsuds Utility(SoapSuds.exe) 使用远程技术帮助你编译与 Web 服务相通信的 客户应用 26. Isolated Storage Utility(storeadm.exe) 一种用来管理隔离存储区的命令行工具 27. Type Library Exporter(TlbExp.exe) 命令行程序 生成由集合名称指示的包含集 合中公共类型定义的类库 <> page begin==================== 28. Type Library Importer (TlbImp.exe) 将 COM 类库中的类型定义转换为在 CLR 中与元数据格式一致的类型定义 29. Web Service Utility(WebServiceUtil.exe) 帮助建立 ASP.NET Web 服务与客户 30. Windows Forms Class Viewer(wincv.exe) 能够在某种查找模式下快速查找类或 者类序列的信息 31. Windows Forms Designer Test Container(windes.exe) 允许开发人员测试开发出 的视窗窗体控件在设计时的行为 32. XML Schema Definition Tool(xsd.exe) XML 计划定义工具 2.4 小 结 本章解释了与.NET 有关的概念并简要介绍了一些相关的技术 在了解了.NET 的 结构之后 我们重点讨论了公用语言运行时环境和公用语言规范 最后给出了.NET 开 发工具的清单 在完成本章的学习之后 你已经了解了有关 C#运行环境的相关知识 这将为你深 入学习 C#打下良好的基础 从下一章开始 我们将进入实际的编程实践中 您将会发 现关于 C#的更多更有趣的东西 复习题 1 .NET 的结构由哪四部分组成 2 请简要总结 CLR 的作用 3 可操控执行 的含义是什么 4 .NET 是怎样解决传统 Windows 程序设计中 DLL 的版本问题的 5 什么是 CLS 它的范围是怎样确定的 <> page begin==================== 第三章 编写第一个应用程序 介绍了 C#语言的这么多优点 您可能已经有些不耐烦了 好 那就让我们开始 C# 的开发之路吧 本章介绍如何生成您的第一个 C#程序 这是一个最基本的 C#应用程序 程序中 的代码在全书中将经常出现 我一直坚信 只有不断练习才是最好的学习方式 所以建议读者从本章开始 对 书中所提供的程序示例 亲自进行编辑 编译和运行 在这个过程中 您将获得开发 C#程序的有益经验 3.1 Welcome 程序 可以这么说 与用户没有任何交互的应用程序根本没有任何用处 病毒和黑客当 然除外 然而即使是病毒程序的作者 也常常喜欢在自己得逞之后炫耀一番 学习任 何一门语言 绝大多数情况下人们都是从输入输出开始的 第一个程序总是非常简单的 我们让用户通过键盘输入自己的名字 然后程序在 屏幕上打印一条欢迎信息 程序的代码是这样的 程 程序 序清 清单单 3-1 using System; class Welcome { static void Main() { Console.WriteLine("Please enter your name:"); Console.ReadLine(); Console.WriteLine("Welcome to you!"); } } 您可以在任意一种编辑软件中完成上述代码的编写 然后把文件存盘 文件名叫 做 Welcome.cs 典型的 C#源文件通常都是以 .cs 作为文件的扩展名 3.2 代 码 分 析 首先要提出的是 C#语言是大小写敏感的 这一点对于 C 和 C++程序员没什么问 <> page begin==================== 题 只是要提醒一下 VB 和 Delphi 的程序员 接下来让我为您逐条地分析上面的 C#程序语句 3.2.1 名字空间 using System 表示导入名字空间 高级语言总是依赖于许多系统预定义的元素 如果 您是 C 或 C++的程序员 那么您一定对使用#include 之类的语句来导入其它 C 或 C++ 源文件再熟悉不过了 C#中的含义与此类似 用于导入预定义的元素 这样在自己的 程序中就可以自由地使用这些元素 如果没有导入名字空间的话 我们该怎么办呢 程序还能保持正确吗 答案是肯 定的 那样的话 我们就必须把代码改写成下面的样子 程 程序 序清 清单 单 3-2 class Welcome { static void Main() { System.Console.WriteLine("Please enter your name:"); System.Console.ReadLine(); System.Console.WriteLine("Welcome to you!"); } } 也就是说 在每个 Console 前加上一个前缀 System. 这个小原点 . 表示 Console 是作为 System 的成员而存在的 C#中抛弃了 C 和 C++中繁杂且极易出错的操作符像 : 和 -> 等 C#中的复合名字一律通过 . 来连接 System 是.Net 平台框架提供的最基本的名字空间之一 有关名字空间的详细使用 方法我们将放在第十七章中详细介绍 在这里 只要我们学会怎样导入名字空间就足 够了 3.2.2 类和类的方法 让我们从写第一个程序时就记住 每个东西都必须属于一个类 如果您是 C 或 C++ 的程序员 请暂时忘掉那些全局变量 在程序的第二行 class Welcome 声明了一个类 类的名字叫做 Welcome 这个程 序为我们所作的事情就是依靠它来完成的 和 C C++中一样 源代码块被包含在一对大括号 { 和 } 中 每一个右括号 } 总是和它前面离它最近的一个左括号 { 相配套 如果左括号 { 和右括号 } 没有全部配套 那程序就是一个错误的程序 static void Main()表示类 Welcome 中的一个方法 方法总是为我们完成某件工作的 注意 在 C#程序中 程序的执行总是从 Main()方法开始的 一个程序中不允许出 <> page begin==================== 现两个或两个以上的 Main()方法 对于习惯了写 C 控制台程序的读者 请牢记 C#中 Main()方法必须被包含在一个类中 3.2.3 程序的输入和输出 程序所完成的输入输出功能都是通过 Console 来完成的 Console 究竟是什么呢 它是在名字空间中 System 已经为我们定义好的一个类 这里我们不用管它是怎么完成 工作的 只要使用它就可以了 上面的代码中 类 Console 为我们展现了两个最基本的方法 WriteLine 和 ReadLine Console.ReadLine 表示接受输入设备输入 Console. WriteLine 则用于在输出设备上输 出 我们再为读者介绍 Console 中用于输入输出的另两个方法 Read 和 Write 它们和 ReadLine 与 WriteLine 的不同之处在于 ReadLine 和 WriteLine 执行时相当在显示时多 加了一个回车键 而使用 Read 和 Write 时则光标不会自动转移到下一行 让我们再对例子程序进行扩展 使得用户的输入对输出产生作用 程 程序序清 清单 单 3-3 using System; class Welcome { static void Main() { Console.WriteLine("Please enter your name:"); string name = Console.ReadLine(); Console.WriteLine("Welcome to you,{0}!",name); } } 我们用到了 string name = Console.ReadLine()这条语句 其中 string name 表示声明一 个字符串类型的变量 name 系统定义的 Console 类提供的方法 ReadLine()的返回值类型 为 string 所以 这句话表示从输入设备读取一个字符串 并把读取的值赋予变量 name 再来看一下程序的最后一条输出语句 Console.WriteLine("Welcome to you,{0}!",name); 这条语句表示在屏幕上对输出的字符串进行格式化 其中表示用方法的第二个参 数来替代格式化后字符串相应的位置 对字符串进行格式化的参数可以是一个字符串 也可以是一个字符 或者是一个整数 等等 采用这种方式最多可以格式化三个变量 比如 int x = 3; string name1 = “Mike”; <> page begin==================== string name2 = “John”; Console.WriteLine("Welcome to you {0} times,{1} and {2}!",x,name1,name2); 和绝大多数编程语言一样 C#提供了字符串类型 string 它与 C 中的 MFC 为我们 提供的类十分类似 C#中的 string 类型是一个引用类型 引用类型在第四章中我们有 详细说明 为标准字符集 利用 string 可以方便地对字符串进行连接 截断等操作 比如 string s = “Good” + “Morning”; char x = s[3]; 例子演示了字符串 s 由两个字符串 Good 和 Morning 相加得到 字符串还可 以通过下标进行索引 得到一个字符 上面的例子中字符 x 的值为 o 所以 源程序 3-4 和源程序 3-3 的作用没什么区别 程 程序 序清 清单 单 3-4 using System; class Welcome { static void Main() { Console.WriteLine("Please enter your name:"); string message = “Welcome to you “ + Console.ReadLine(); Console.WriteLine(mesage); } } 3.3 运 行 程 序 理解了源程序中每条代码的具体含义之后 下一步要做的就是让这个程序真正能 够运行 不过对源代码即使还有不明白的地方也没有关系 在后续章节的学习中 您 最终会熟练掌握这些概念的 如果您的电脑上安装了 Visual Studio .Net 则可以在集成开发环境 Integrated Developer Environment IDE 中直接选择快捷键或菜单命令 编译并执行源文件 如果您不具备这个条件 那么您至少需要安装 Microsoft .Net Framework SDK 这 样才能够不妨碍您在本书中继续学习 C#语言 实际上 .Net 平台内置了 C#的编译器 下面让我们使用这个微软提供的命令行编译器对我们的程序进行编译 启动一个命令行提示符 在屏幕上输入一行命令 csc welcome.cs <> page begin==================== 我们假设您已经将 welcome.cs 文件保存在当前目录下 如果一切正常 welcome.cs 文件将被编译 运行 屏幕上出现一行字符 提示您输入姓名 Please enter your name: 输入任意个字符并按下回车键 屏幕将打印出欢迎信息 Welcome to you! 注意 和到目前为止我们使用过的绝大多数编译器不同 在 C#中 编译器只执行 编译这个过程 而在 C 和 C++中要经过编译和链接两个阶段 换而言之 C#源文件并不 被编译为目标文件 .obj 而是直接生成可执行文件 .exe 或动态链接库 .dll C#编译器中不需要包含链接器 编译选项 我们可以灵活地使用 .Net 平台提供的命令行编译器的不同选项 选择不同的编译 方式 从而灵活地对编译进行控制 例如 如果我们希望对源文件 Welcome.cs 进行编译 生成名为 MyWelcome.exe 的 可执行文件 我们可以采用这样的命令 csc/out: MyWelcome.exe Welcome.cs 如果我们并不需要一个可执行文件 而仅仅是希望简单地检查源文件中是否存在 语法错误 则命令可以写成 csc/nooutput: Welcome.cs 如果不知道各个选项的具体含义 可以通过求助来获得 csc/? 为方便读者 我们在表 3-1 中按字母排序的顺序列出了命令行编译器 csc 常用的参 数及其用途 更详细的信息请参阅 C#联机帮助文档 表 3-1 命令行编译器选项 选项 作用 @ 指定响应文件 /? 列出编译命令选项 /addmodule 指定一个或多个模块作为装配的一部分 /baseaddress 指定载入动态链接库的首选地址 /bugreport 生成一个报告文件 其中包含程序 Bug 的详细信息 /checked 指定算术运算的溢出是否会导致程序在运行时抛出一个异常 /codepage 指定编译的所有源文件所使用的代码页 /debug 给出调试信息 /define 定义预处理程序的符号 /doc 由文件注释生成 XML 文件 /fulpaths 指定输出的绝对路径 /help 列出编译命令选项 /incremental 允许对源文件进行递增式编译 /linkresource 在装配时链接指定的 NET 资源 <> page begin==================== /main 指定 Main 方法所处的位置 /nologo 编译过程中不显示编译信息 /nooutput 编译源文件但不输出 /nostdlib 不导入标准库 (mscorlib.dl). 续表 选项 作用 /nowarn 编译过程中不生成警告信息 /optimize 指定编译时是否进行优化 /out 指定输出文件 /recurse 搜索子目录以寻找源文件 /reference 从包含装配的文件中导入元数据 /resource 把 NET 资源内嵌到输出文件 /target 指定输出文件的格式 /target:exe 输出文件为 exe 可执行文件 /target:library 输出文件为链接库 /target:module 输出文件为模块 /target:winexe 输出文件为 winexe 可执行文件 /unsafe 允许编译使用了不安全关键字的代码 /warn 设置警告级别 /warnaserror 把警告信息作为错误看待 /win32icon 把 .ico 图标文件插入到输出文件 /win32res 把 Win32 资源插入到输出文件 .4 添 加 注 释 应用程序并不是只要你自己一个人能看懂就够了 不管以前计算机老师或者是编 程书籍是否已经告诫过 这里我还要再一次强调 养成良好的代码注释的习惯 这是 一名优秀的程序员必备的条件之一 代码注释不会浪费您的编程时间 它只会提高您 的编程效率 使您的程序更加清晰 完整 友好 注释的方式和 ++没有区别 每一行中双斜杠 后面的内容 以及在 分割符 和 之间的内容都将被编译器忽略 这样 我们就可以采用 进行单行注释 采用分割符 和 进行多行注释 让我们对 Welcome 程序加上注释 程 程序序清 清单 单 3-5 源文件 welcome.cs / 说明 这里是我的第一个 程序 <> page begin==================== using System; class Welcome { static void Main() { Console.WriteLine("Please enter your name:"); 要求用户输入姓名 Console.ReadLine(); 读取用户输入 Console.WriteLine("Welcome to you!"); 本行代码用于打印欢迎信息 您可以在这里添加自己的代码 程序在这里结束 } } 上面的注释似乎有些小题大做 但它毕竟说明了 中注释的使用方法 下面是对 程序进行注释时要注意的两个问题 首先 避免在 之后的单行注解中使用反斜杠符号 \ 因为反斜杠符号 \ 在 中是一个续行符 这样做往往会导致你所不希望的结果出现 例如 当你写了 类似于下面的代码 Console.WriteLine(“The result is:{0}” , / \ 150 ); 在编译这段代码时 表示逻辑上同一行剩余的所有文字被作为注释看待 而续行符 \ 则将这一行同下一行连接起来 那么第二行也被作为注释的一部分 这 时编译器找不到与第一行的左括号 相匹配的右括号 因此编译出错 其次 分割符 和 之间的注释不能有嵌套注释 这是因为 编译器从遇到第一个分割符 开始 将忽略下一个 直到遇上下一个与 之匹配的分割符 才认为注释结束 这样编译器就会对多余的 报告

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧