Joe's Blog

在我的博客中,你会看到一些测试文章和Windows、Linux的使用技巧。有共同兴趣的朋友请关注我的博客。

八月 2006 - 博客

经典蓝屏案意义破解

经典蓝屏案意义破解
┌─┐
│ 1 │
└─┘0x0000000A:IRQL_NOT_LESS_OR_EQUAL
◆错误分析:主要是由问题的驱动程序、有缺陷或不兼容的硬件与软件造成的. 从技术角度讲. 表明在内核模式中存在以太高的进程内部请求级

别(IRQL)访问其没有权限访问的内存地址.
◇解决方案:请用前面介绍的解决方案中的2、3、5、8、9方案尝试排除.
┌─┐
│ 2 │
└─┘0x00000012:TRAP_CAUSE_UNKNOWN
◆错误分析:如果遇到这个错误信息, 那么很不幸, 应为KeBudCheck分析的结果是错误原因未知.
◇解决方案:既然微软都帮不上忙, 就得靠自己了, 请仔细回想这个错误是什么时候出现的; 第一次发生时你对系统做了哪些作; 发生时正在

进行什么作. 从这些信息中找出可能的原因, 从而选择相应解决方案尝试排除.
┌─┐
│ 3 │
└─┘0x0000001A:MEMORY_MANAGEMENT
◆错误分析:这个内存管理错误往往是由硬件引起的, 比如: 新安装的硬件、内存本身有问题等.
◇解决方案:如果是在安装Windows时出现, 有可能是由于你的电脑达不到安装Windows的最小内存和磁盘要求.
┌─┐
│ 4 │
└─┘0x0000001E:KMODE_EXCEPTION_NOT_HANDLED
◆错误分析:Windows内核检查到一个非法或者未知的进程指令, 这个停机码一般是由问题的内存或是与前面0x0000000A相似的原因造成的.
◇解决方案:
(1)硬件兼容有问题:请对照前面提到的最新硬件兼容性列表, 查看所有硬件是否包含在该列表中.
(2)有问题的设备驱动、系统服务或内存冲突和中断冲突: 如果在蓝屏信息中出现了驱动程序的名字, 请试着在安装模式或者故障恢复控制台中

禁用或删除驱动程序, 并禁用所有刚安装的驱动和软件. 如果错误出现在系统启动过程中, 请进入安全模式, 将蓝屏信息中所标明的文件重命

名或者删除.
(3)如果错误信息中明确指出Win32K.sys: 很有可能是第三方远程控制软件造成的, 需要从故障恢复控制台中将对该软件的服务关闭.
(4)在安装Windows后第一次重启时出现:最大嫌疑可能时系统分区的磁盘空间不足或BIOS兼容有问题.
(5)如果是在关闭某个软件时出现的:很有可能时软件本省存在设计缺陷, 请升级或卸载它.
┌─┐
│ 5 │0x00000023:FAT_FILE_SYSTEM
└─┘0x00000024:NTFS_FILE_SYSTEM
◆错误分析:0x00000023通常发生在读写FAT16或者FAT32文件系统的系统分区时, 而0x00000024则是由于NTFS.sys文件出现错误(这个驱动文件

的作用是容许系统读写使用NTFS文件系统的磁盘). 这两个蓝屏错误很有可能是磁盘本身存在物理损坏, 或是中断要求封包(IRP)损坏而导致的.

其他原因还包括:硬盘磁盘碎片过多; 文件读写作过于频繁, 并且数据量非常达或者是由于一些磁盘镜像软件或杀毒软件引起的.
◇解决方案:
第一步:首先打开命令行提示符, 运行\\"Chkdsk /r\\"(注:不是CHKDISK, 感觉象这个, 但是……)命令检查并修复硬盘错误, 如果报告存在怀

道(Bad Track), 请使用硬盘厂商提供的检查工具进行检查和修复.
第二步:接着禁用所有即使扫描文件的软件, 比如:杀毒软件、防火墙或备份工具.
第三步:右击C:\\winnt\\system32\\drivers\\fastfat.sys文件并选择\\"属性\\", 查看其版本是否与当前系统所使用的Windows版本相符.(注

:如果是XP, 应该是C:\\windows\\system32\\drivers\\fastfat.sys)
第四步:安装最新的主板驱动程序, 特别IDE驱动. 如果你的光驱、可移动存储器也提供有驱动程序, 最好将它们升级至最新版.
┌─┐
│ 6 │
└─┘0x00000027:RDR_FILE_SYSTEM
◆错误分析:这个错误产生的原因很难判断, 不过Windows内存管理出了问题很可能会导致这个停机码的出现.
◇解决方案:如果是内存管理的缘故, 通常增加内存会解决问题.
┌─┐
│ 7 │
└─┘0x0000002E: DATA_BUS_ERROR
◆错误分析:系统内存存储器奇偶校验产生错误, 通常是因为有缺陷的内存(包括物理内存、二级缓存或者显卡显存)时设备驱动程序访问不存在

的内存地址等原因引起的. 另外, 硬盘被病毒或者其他问题所损伤, 以出现这个停机码.
◇解决方案:
(1)检查病毒
(2)使用\\"chkdsk /r\\"命令检查所有磁盘分区.
(3)用Memtest86等内存测试软件检查内存.
(4)检查硬件是否正确安装, 比如:是否牢固、金手指是否有污渍.
┌─┐
│ 8 │
└─┘0x00000035:NO_MORE_IRP_STACK_LOCATIONS
◆错误分析:从字面上理解, 应该时驱动程序或某些软件出现堆栈问题. 其实这个故障的真正原因应该时驱动程序本省存在问题, 或是内存有质

量问题.
◇解决方案:请使用前面介绍的常规解决方案中与驱动程序和内存相关的方案进行排除.
┌─┐
│ 9 │
└─┘0x0000003F:NO_MORE_SYSTEM_PTES
◆错误分析:一个与系统内存管理相关的错误, 比如:由于执行了大量的输入/输出作, 造成内存管理出现问题: 有缺陷的驱动程序不正确地使

用内存资源; 某个应用程序(比如:备份软件)被分配了大量的内核内存等.
◇解决方案:卸载所有最新安装的软件(特别是哪些增强磁盘性能的应用程序和杀毒软件)和驱动程序.
┌─┐
│10│
└─┘0x00000044:MULTIPLE_IRP_COMPLIETE_REQUESTS
◆错误分析:通常是由硬件驱动程序引起的.
◇解决方案:卸载最近安装的驱动程序. 这个故障很少出现, 目前已经知道的是, 在使用http://www.in-system.com/这家公司的某些软件时会

出现, 其中的罪魁就是Falstaff.sys文件.(作者难道不怕吃官司嘛, 把公司网址公布)
┌─┐
│11│
└─┘0x00000050: PAGE_FAULT_IN_NONPAGED+AREA
◆错误分析:有问题的内存(包括屋里内存、二级缓存、显存)、不兼容的软件(主要是远程控制和杀毒软件)、损坏的NTFS卷以及有问题的硬件(

比如: PCI插卡本身已损坏)等都会引发这个错误.
◇解决方案:请使用前面介绍的常规解决方案中与内存、软件、硬件、硬盘等相关的方案进行排除.
┌─┐
│12│
└─┘0x00000051:REGISTRY_ERROR
◆错误分析:这个停机码说明注册表或系统配置管理器出现错误, 由于硬盘本身有物理损坏或文件系统存在问题, 从而造成在读取注册文件时出

现输入/输出错误.
◇解决方案:使用\\"chkdsk /r\\"检查并修复磁盘错误.
┌─┐
│13│
└─┘0x00000058:FTDISK_INTERNAL_ERROR
◆错误分析:说明在容错集的主驱动发生错误.
◇解决方案:首先尝试重启电脑看是否能解决问题, 如果不行, 则尝试\\"最后一次正确配置\\"进行解决.
┌─┐
│14│
└─┘0x0000005E:CRITICAL_SERVICE_FAILED
◆错误分析:某个非常重要的系统服务启动识别造成的.
◇解决方案:如果是在安装了某个新硬件后出新的, 可以先移除该硬件, 并通过网上列表检查它是否与Windows 2K/XP兼容, 接着启动电脑, 如

果蓝屏还是出现, 请使用\\"最后一次正确配置\\"来启动Windows, 如果这样还是失败, 建议进行修复安装或是重装.
┌─┐
│15│
└─┘0x0000006F:SESSION3_INITIALIZATION-FAILED
◆错误分析:这个错误通常出现在Windows启动时, 一般是由有问题的驱动程序或损坏的系统文件引起的.
◇解决方案:建议使用Windows安装光盘对系统进行修复安装.
┌─┐
│16│
└─┘0x00000076: PROCESS_HAS_LOCKED_PAGES
◆错误分析:通常是因为某个驱动程序在完成了一次输入/输出作后, 没有正确释放所占有的内存
◇解决方案:
第一步:点击开始-->运行:regedt32, 找到[HKLM\\SYSTEM\\Currentcontrol set\\control\\session manager\\memory management], 在右侧

新建双字节值\\"TrackLockedPages\\", 值为1. 这样Windows便会在错误再次出现时跟踪到是哪个驱动程序的问题.
第二步:如果再次出现蓝屏, 那么错误信息会变成:
STOP:0x0000000CB(0xY,0xY,0xY,0xY)DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS
其中第四个\\"0xY\\"会显示为问题驱动程序的名字, 接着对其进行更新或删除.
第三步:进入注册表, 删除添加的\\"TrackLockedPages\\".
┌─┐
│17│
└─┘0x00000077:KERNEL_STACK_INPAGE_ERROR
◆错误分析:说明需要使用的内核数据没有在虚拟内存或物理内存中找到. 这个错误常常于是着磁盘有问题, 相应数据损坏或受到病毒侵蚀.
◇解决方案:使用杀毒软件扫描系统; 使用\\"chkdsk /r\\"命令检查并修复磁盘错误, 如不行则使用磁盘厂商提供的工具检查修复.
┌─┐
│18│
└─┘0x0000007A:KERNEL_DATA_INPAGE_ERROR
◆错误分析:这个错误往往是虚拟内存中的内核数据无法读入内存造成的. 原因可能是虚拟内存页面文件中存在坏簇、病毒、磁盘控制器出错、

内存有问题.
◇解决方案:首先用升级为最新病毒库杀毒软件查杀病毒, 如果促无信息中还有0xC000009C或0xC000016A代码, 那么表示是坏簇造成的, 并且系

统的磁盘检测工具无法自动修复, 这时要进入\\"故障恢复控制台\\", 用\\"chkdsk /r\\"命令进行手动修复.
┌─┐
│19│
└─┘0x0000007B:INACESSIBLE_BOOT_DEVICE
◆错误分析:Windows在启动过程中无法访问系统分区或启动卷. 一般发生在更换主板后第一次启动时, 主要是因为新主板和旧主板的IDE控制器

使用了不同芯片组造成的. 有时也可能是病毒或硬盘损伤所引起的.
◇解决方案:一般只要用安装光盘启动电脑, 然后执行修复安装即可解决问题. 对于病毒则可使用DOS版的杀毒软件进行查杀(主战有kv2005DOS

版下载). 如果是硬盘本身存在问题, 请将其安装到其他电脑中, 然后使用\\"chkdsk /r\\"来检查并修复磁盘错误.
┌─┐
│20│
└─┘0x0000007E:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED
◆错误分析:系统进程产生错误, 但Windows错误处理器无法捕获. 其产生原因很多, 包括:硬件兼容性、有问题的驱动程序或系统服务、 或者

是某些软件.
◇解决方案:请使用\\"事件查看器\\"来获取更多的信息, 从中发现错误根源.(发现好像不是解决哦, 看来这里大家要自力更生了!)
┌─┐
│21│
└─┘0x0000007F:UNEXPECTED_KERNEL_MOED_TRAP
◆错误分析:一般是由于有问题的硬件(比如:内存)或某些软件引起的. 有时超频也会产生这个错误.
◇解决方案:用检测软件(比如:Memtest86)检查内存, 如果进行了超频, 请取消超频. 将PCI硬件插卡从主板插槽拔下来, 或更换插槽. 另外,

有些主板(比如:nForce2主板)在进行超频后, 南桥芯片过热也会导致蓝屏, 此时为该芯片单独增加散热片往往可以有效解决问题.
┌─┐
│22│
└─┘0x00000080:NMI_HARDWARE_FAILURE
◆错误分析:通常是有硬件引起的.(似乎蓝屏与硬件错误有不解之缘)
◇解决方案:如果最近安装了新硬件, 请将其移除, 然后试试更换插槽和安装最新的驱动程序, 如果升级了驱动程序, 请恢复后原来的版本; 检

查内存金手指是否有污染和损坏; 扫描病毒; 运行\\"chkdsk /r\\"检查并修复磁盘错误; 检查所有硬件插卡已经插牢. 如果以上尝试都无效果

, 就得找专业的电脑维修公司请求帮助了.
┌─┐
│23│
└─┘0x0000008E:KERNEL_MODE_EXCEPTION_NOT_HANDLED
◆错误分析:内核级应用程序产生了错误, 但Windows错误处理器没有捕获. 通常是硬件兼容性错误.
◇解决方案:升级驱动程序或升级BIOS.
┌─┐
│24│
└─┘0x0000009C:MACHINE_CHECK_EXCEPTION
◆错误分析:通常是硬件引起的. 一般是因为超频或是硬件存在问题(内存、CPU、总线、电源).
◇解决方案:如果进行了超频, 请降会CPU原来频率, 检查硬件.
┌─┐
│25│
└─┘0x0000009F: DRIVER_POWER_STATE_FAILURE
◆错误分析:往往与电源有关系, 常常发生在与电源相关的作, 比如:关机、待机或休睡.
◇解决方案:重装系统, 如果不能解决, 请更换电源.
┌─┐
│26│
└─┘0x000000A5:ACPI_BIOS_ERROR
◆错误分析:通常是因为主板BIOS不能全面支持ACPI规范.
◇解决方案:如果没有相应BIOS升级, 那么可在安装Windows 2K/XP时, 当出现\\"press F6 if you need to install a third-party SCSI or

RAID driver\\"提示时, 按下F7键, 这样Windows便会自动禁止安装ACPI HAL, 而安装 Standard PC HAL.
┌─┐
│27│
└─┘0x000000B4:VIDEO_DRIVER_INIT_FAILURE
◆错误分析:这个停止信息表示Windows因为不能启动显卡驱动, 从而无法进入图形界面. 通常是显卡的问题, 或者是存在与显卡的硬件冲突(比

如:与并行或串行端口冲突).
◇解决方案:进入安全模式查看问题是否解决, 如果可以, 请升级最新的显卡驱动程序, 如果还不行, 则很可能是显卡与并行端口存在冲突, 需

要在安全模式按下WIN+break组合键打开\\"系统属性\\", 在硬件-->设备管理器中找到并双击连接打印的LPT1端口的项, 在\\"资源\\"选项卡

中取消\\"使用自动配置\\"的构选, 然后将\\"输入/输出范围\\"的\\"03BC\\"改为\\"0378\\".
┌─┐
│28│
└─┘0x000000BE:ATTEMPTED_WRITE_TO_READONLY_MEMORY
◆错误分析:某个驱动程序试图向只读内存写入数据造成的. 通常是在安装了新的驱动程序, 系统服务或升级了设备的固件程序后.
◇解决方案:如果在错误信息中包含有驱动程序或者服务文件名称, 请根据这个信息将新安装的驱动程序或软件卸载或禁用.
┌─┐
│29│
└─┘0x000000C2:BAD_POOL_CALLER
◆错误分析:一个内核层的进程或驱动程序错误地试图进入内存作. 通常是驱动程序或存在BUG的软件造成的.
◇解决方案:请参考前面介绍的常规解决方案相关项目进行排除.
┌─┐
│30│
└─┘0x000000CE: DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS
◆错误分析:通常是由有问题的驱动程序或系统服务造成的.
◇解决方案:请参考前面介绍的常规解决方案相关项目进行排除.
┌─┐
│31│
└─┘0x000000D1: DRIVER_IRQL_NOT_LESS_OR_EQUAL
◆错误分析:通常是由有问题的驱动程序引起的(比如罗技鼠标的Logitech MouseWare 9.10和9.24版驱动程序会引发这个故障). 同时,有缺陷的

内存、 损坏的虚拟内存文件、 某些软件(比如多媒体软件、杀毒软件、备份软件、DVD播放软件)等也会导致这个错误.
◇解决方案:检查最新安装或升级的驱动程序(如果蓝屏中出现\\"acpi.sys\\"等类似文件名, 可以非常肯定时驱动程序问题)和软件; 测试内存

是否存在问题; 进入\\"故障恢复控制台\\", 转到虚拟内存页面文件Pagefile.sys所在分区, 执行\\"del pagefile.sys\\"命令, 将页面文件

删除; 然后在页面文件所在分区执行\\"chkdsk /r\\"命令;进入Windows后重新设置虚拟内存.
如果在上网时遇到这个蓝屏, 而你恰恰又在进行大量的数据下载和上传(比如:网络游戏、BT下载), 那么应该是网卡驱动的问题, 需要升级其驱

动程序.
┌─┐
│32│
└─┘0x000000EA:THREAD_STUCK_IN_DEVICE_DRIVER
◆错误分析:通常是由显卡或显卡驱动程序引发的.
◇解决方案:先升级最新的显卡驱动, 如果不行, 则需要更换显卡测试故障是否依然发生.
┌─┐
│33│
└─┘0x000000ED:UNMOUNTABLE_BOOT_VOLUME
◆错误分析:一般是由于磁盘存在错误导致的, 有时也建议检查硬盘连线是否接触不良, 或是没有使用合乎该硬盘传输规格的连接线, 例如ATA

-100仍使用ATA-33的连接线, 对低速硬盘无所谓, 但告诉硬盘(支持ATA-66以上)的要求较严格, 规格不对的连线有时也会引起这类没办法开机

的故障. 如果在修复后, 还是经常出现这个错误, 很可能是硬盘损坏的前兆.
◇解决方案:一般情况下, 重启会解决问题, 不管怎么样都建议执行\\"chkdsk /r\\"命令来检查修复硬盘.
┌─┐
│34│
└─┘0x000000F2:HARDWARE)INTERRUPT_STORM
◆错误分析:内核层检查到系统出现中断风暴, 比如:某个设备在完成作后没有释放所占用的中断. 通常这是由缺陷的驱动程序造成的.
◇解决方案:升级或卸载最新安装的硬件驱动程序.
┌─┐
│35│
└─┘0x00000135:UNABLE_TO_LOCATE_DLL
◆错误分析:通常表示某个文件丢失或已经损坏, 或者是注册表出现错误.
◇解决方案:如果是文件丢失或损坏, 在蓝屏信息中通常会显示相应的文件名, 你可以通过网络或是其他电脑找到相应的文件, 并将其复制到系

统文件夹下的SYSTEM32子文件夹中. 如果没有显示文件名, 那就很有可能是注册表损坏, 请利用系统还原或是以前的注册表备份进行恢复.
┌─┐
│36│
└─┘0x0000021A:STATUS_SYSTEM_PROCESS_TERMINATED
◆错误分析:用户模式子系统, 例如Winlogon或客服服务运行时子系统(CSRSS)已损坏, 所以无法再保证安全性, 导致系统无法启动. 有时, 当

系统管理员错误地修改了用户帐号权限, 导致其无法访问系统文件和文件夹.
◇解决方案:使用\\"最后一次正确的配置\\", 如果无效, 可使用安装光盘进行修复安装

出现蓝屏后的九个常规解决方案
出现蓝屏后的九个常规解决方案


Windows 2K/XP蓝屏信息非常多, 无法在一篇文章中全面讲解, 但他们产生的原因往往集中在不兼容的硬件和驱动程序、有问题的软件、病毒等, 因此首先为大家提供了一些常规的解决方案, 在遇到蓝屏错误时, 应先对照这些方案进行排除.

1.重启
有时只是某个程序或驱动程序一时犯错, 重启后他们会改过自新.(注意:此时参见7.查询停机码)

2.新硬件
首先, 应该检查新硬件是否插牢, 这个被许多人忽视的问题往往会引发许多莫名其妙的故障. 如果确认没有问题, 将其拔下, 然后换个插槽试试, 并安装最新的驱动程序. 同时还应对照微软网站的硬件兼容类别检查一下硬件是否与作系统兼容. 如果你的硬件没有在表中, 那么就得到硬件厂商网站进行查询, 或者拨打他们的咨询电话.

Windows XP的硬件兼容列表:http://support.microsoft.com/default.aspx?scid=kb;zh-cn;314062

3.新驱动和新服务
如果刚安装完某个硬件的新驱动, 或安装了某个软件, 而它又在系统服务中添加了相应项目(比如:杀毒软件、CPU降温软件、防火墙软件等), 在重启或使用中出现了蓝屏故障, 请到安全模式来卸载或禁用它们.

4.检查病毒
比如冲击波和振荡波等病毒有时会导致Windows蓝屏死机, 因此查杀病毒必不可少. 同时一些木马间谍软件也会引发蓝屏, 所以最好再用相关工具进行扫描检查.

5.检查BIOS和硬件兼容性
对于新装的电脑经常出现蓝屏问题, 应该检查并升级BIOS到最新版本, 同时关闭其中的内存相关项, 比如:缓存和映射. 另外, 还应该对照微软的硬件兼容列表检查自己的硬件. 还有就是, 如果主板BIOS无法支持大容量硬盘也会导致蓝屏, 需要对其进行升级.

小提示:
BIOS的缓存和映射项
Video BIOS Shadowing (视频BIOS映射)
Shadowing address ranges(映射地址列)
System BIOS Cacheable(系统BIOS缓冲)
Video BIOS Cacheable(视频BIOS缓冲)
Video RAM Cacheable(视频内存缓冲)

6.检查系统日志
在开始-->菜单中输入:EventVwr.msc, 回车出现\\"事件查看器\\", 注意检查其中的\\"系统日志\\"和\\"应用程序日志\\"中表明\\"错误\\"的项.

7.查询停机码
把蓝屏中密密麻麻的E文记下来, 接着到其他电脑中上网, 进入微软帮助与支持网站http://support.microsoft.com, 在左上角的\\"搜索(知识库)\\"中输入停机码, 如果搜索结果没有适合信息, 可以选择\\"英文知识库\\"在搜索一遍. 一般情况下, 会在这里找到有用的解决案例. 另外, 在baidu、Google等搜索引擎中使用蓝屏的停机码或者后面的说明文字为关键词搜索, 往往也会有以外的收获.

8.最后一次正确配置
一般情况下, 蓝屏都出现于更新了硬件驱动或新加硬件并安装其驱动后, 这时Windows 2K/XP提供的\\"最后一次正确配置\\"就是解决蓝屏的快捷方式. 重启系统, 在出现启动菜单时按下F8键就会出现高级启动选项菜单, 接着选择\\"最后一次正确配置\\".

9.安装最新的系统补丁和Service Pack
有些蓝屏是Windows本身存在缺陷造成的, 应此可通过安装最新的系统补丁和Service Pack来解决.
解决:能ping通域服务器,不能加入域
网络标识疑难解答
错误: 该计算机成功地解析了查找域控制器所需的域名系统 (DNS) 服务 (SRV) 资源记录,但未能找到错误消息中显示的 Active Directory 域的域控制器。

原因: DNS 中没有在域控制器的名称和其 IP 地址之间进行映射所需的 A(地址)资源记录。

解决方案: 使用 Nslookup 命令行工具验证 DNS 中是否有所需的 A 资源记录。

原因: 在 DNS 中公布的域控制器可能未与网络连接,或者虽与网络连接但没在运行。

解决方案: 验证连接是否正常,然后验证域控制器是否在运行。

请参阅: 使用 ping 命令测试 TCP/IP 配置加入 Active Directory 域的 DNS 要求
加入 Active Directory 域的 DNS 要求
加入 Active Directory 域的 DNS 要求

Active Directory 使用域名系统 (DNS) 来查找域控制器,允许计算机加入网络以获得域控制器,然后开始进行网络身份验证。

加入 Active Directory 域的计算机必须满足下列三个 DNS 要求:

计算机必须配置了首选 DNS 服务器的 IP 地址。
_ldap._tcp.dc._msdcs.DNSDomainName 服务 (SRV) 资源记录必须存在于 DNS 中。
在 _ldap._tcp.dc._msdcs.DNSDomainName SRV 资源记录的数据字段中指定的域控制器的 DNS 名称所对应的地址 (A) 资源记录必须存在于 DNS 中。
配置计算机的首选 DNS 服务器
要将计算机加入域中,可以手动给计算机配置首选 DNS 服务器的静态 IP 地址,也可以使用动态主机配置协议 (DHCP)分配首选 DNS 服务器的 IP 地址。

配置所需的 DNS 资源记录
加入 Active Directory 域的计算机需要有 DNS 中的下列资源记录才能找到 Active Directory 域控制器:

_ldap._tcp.dc._msdcs.DNSDomainName SRV 资源记录,用于标识用作 Active Directory 域的域控制器的名称。
DNSDomainName,是计算机尝试加入的 Active Directory 域的 DNS 名称。

相应的 A 资源记录,用于标识 _ldap._tcp.dc._msdcs.DNSDomainName SRV 资源记录中所列域控制器对应的 IP 地址。
使用 Ping 命令测试 TCP/IP 配置
使用 Ping 命令测试 TCP/IP 配置

大家都知道Ping是一个很常用的网络命令,但是真正能用Ping检查自己的TCP/IP 配置的人不多。

要快速获取计算机的 TCP/IP 配置,请打开 命令提示符,然后键入 ipconfig。在“ipconfig”命令的显示中,要确保您正在测试的 TCP/IP 配置的网卡不处于“媒体已断开”状态。
在命令提示行,通过键入“ping 127.0.0.1”测试环回地址的连通性。
使用 Ping 命令检测计算机 IP 地址的连通性。
使用 Ping 命令检测默认网关 IP 地址的连通性。
如果 Ping 命令执行失败,请验证默认网关 IP 地址是否正确以及网关(路由器)是否运行。

使用 Ping 命令检测远程主机(不同子网上的主机) IP 地址的连通性。
如果 Ping 命令失败,请验证远程主机的 IP 地址是否正确,远程主机是否运行,以及该计算机和远程主机之间的所有网关(路由器)是否运行。

使用 Ping 命令检测 DNS 服务器 IP 地址的连通性。
如果 Ping 命令失败,请验证 DNS 服务器的 IP 地址是否正确,DNS 服务器是否运行,以及该计算机和 DNS 服务器之间的网关(路由器)是否运行。

注意

如果找不到 Ping 命令或者命令执行失败,可以使用事件查看器检查系统日志,并寻找安装程序或 Internet 协议 (TCP/IP) 服务所报告的问题。
Ping 命令使用 Internet 控制消息协议 (ICMP) 回响请求和回响答复消息。路由器、防火墙或其他类型安全性网关上的数据包筛选策略可能会阻止该通信的转发。
ipconfig 命令与 winipcfg 命令等价,后者在 Windows Millennium Edition、Windows 98 和 Windows 95 中可。
在不使用任何参数时,ipconfig 显示所有网卡的 IP 地址、子网掩码和默认网关。

要运行 ipconfig,请打开命令提示符,然后键入 ipconfig。
解决:DNS中SRV记录有问题
查看SRV记录
systemroot\System32\Config\Netlogon.dns 该文件中使用的资源记录以符合 RFC 规范的文本文件格式列出。检查这些记录时,请搜索以下记录:
_ldap._tcp.Active_Directory_domain_name IN SRV 0 0 389 ldap_server_name _ldap._tcp.dc._msdcs.Active_Directory_domain_name IN SRV 0 0 389 domain_controller_name

可能需要手动添加或检查用于支持域控制器的服务位置 (SRV) 资源记录的注册。
解决:当计算机加入域时出现“拒绝访问”错误消息

当计算机加入域时出现“拒绝访问”错误消息

症状

当您尝试将计算机加入域时,加入过程无法运行,并且您可能会收到“拒绝访问”(在 Windows XP 中)或“权限不足”(在 Microsoft Windows 2000 中)错误消息。在下面几种情况下可能会收到此错误消息:
用另一台具有相同名称的计算机替换此客户机。
您正用于加入过程的域用户帐户只有“向域添加工作站”的权限。因此,在替换之前旧的计算机帐户被删除。
 

原因

客户机使用尚未复制此帐户删除的“轻量级目录访问协议”(LDAP) 服务器或域控制器,但是没有修改仍保留的帐户的正确权限。

替代方法

要变通解决此问题,可使用下列任一方法:
使用另外一个计算机名称。
等待 Active Directory 进行复制,或使用以下命令强制进行复制:
repadmin /sync DomainDN目标 DSA GUID._msdcs 源 DSA GUID /force
在加入过程中使用域管理员帐户。
向您正在使用的帐户授予附加权限:
1. 启动 Adsiedit.msc。
2. 打开“Domain NC, DC=域, CN=Computers”节点。
3. 单击“计算机”,然后单击“属性”。
4. 在“安全”选项卡上,单击“高级”。
5. 单击“添加”,然后单击适当的用户帐户或组。
6. 在“应用到”框中,单击“计算机对象”。
7. 在“权限”窗格中,单击以选中“写入所有属性”、“重设密码”和“将这些权限只应用到这个容器中的对象和/或容器上”复选框。
8. 单击“确定”,直到做出更改。
9. 等待 Active Directory 进行复制,或强制进行同步。
 

更多信息

尽管客户机将寻找其所处的站点,但它将在域名系统 (DNS) 中的“_ldap._tcp.dc._msdcs.DnsDomainName”中查找 LDAP 服务器。这不是特定于站点的。客户机可能会从一个尚未复制对此旧计算机帐户的删除的远程站点使用 LDAP 服务器(域控制器)。这取决于 Active Directory 站点间复制计划。

从 LDAP 服务器收到的站点信息用于在“_ldap._tcp.ClientSiteName._sites.dc._msdcs.DnsDomainName”中查找特定于站点的 LDAP 服务器。在与本地 LDAP 服务器通信期间,客户机被告知其计算机帐户名称仅存在于第一次使用的域控制器上。为避免潜在的复制冲突问题,客户机将使用其计算机帐户所在的域控制器,而不是创建一个新帐户。不过,用于加入过程的域用户帐户没有足够的权限修改现有的帐户,因此加入过程无法执行。
Visual Studio Team System自定义工作项类型

Visual Studio Team System

演练:对工作项类型进行基本自定义

 

在本演练中,您将以最常见的方式自定义现有工作项类型。您将了解用于自定义工作项类型的工具和定义这些类型的 XML 语言。

下列过程对这些自定义进行了阐释:

创建团队项目   在此过程中,您创建一个包含将在后续过程中使用的工作项类型的团队项目。

查看工作项类型   在此过程中,您显示一个现有工作项类型的表单。

导出工作项   在此过程中,您将工作项类型的定义导出到一个 XML 文件中。

重命名类型   在此过程中,您编辑包含工作项类型定义的 XML 文件,以将工作项类型的名称从“Task”(任务)更改为“Special Task”(特殊任务)。

导入更改   在此过程中,您将在前一个过程中更改的工作项类型导入 Team Foundation Server

添加字段   在此过程中,您将名为“Category”(类别)的新字段添加到一个现有工作项类型。

向字段添加规则   在此过程中,您添加一个规则使新的“Category”字段成为必选字段。

创建选取列表   在此过程中,您将添加“Category”字段的允许值列表。新的值将作为从工作项类型创建的工作项中的选项出现。

更改工作流   在此过程中,您向工作项类型添加新的状态和转换。

更改表单布局   在此过程中,您更改工作项表单上的字段位置。

先决条件

为了完成这些演练中的步骤,您需要:

Visual Studio 2005 Team System 的一个副本,或已安装 Team Explorer 并具有 Team Foundation Server 连接的 Visual Studio 2005 副本。

创建团队项目

创建团队项目

1.      启动 Visual Studio

2.      通过单击“视图”然后单击“团队资源管理器”,打开 Team Explorer

3.      Team Explorer 中,右击您连接到的 Team Foundation Server 的名称,然后单击“新建团队项目”。

4.      在“在 <服务器名称> 上新建团队项目”对话框中,在“团队项目的名称是什么?”下面,键入 WITLab,然后单击“下一步”。

5.      在“选择过程模板”页上,在“应使用哪个过程模板来创建团队项目?”下面,单击“MSF for Agile Software Development”,然后单击“完成”。

创建团队项目可能需要几分钟时间。

6.      当“已创建团队项目”页显示出来时,清除“启动过程指南”框,然后单击“关闭”。

这样就创建了名为“WITLab”的新团队项目,并在 Team Explorer 中显示在您的 Team Foundation Server 下面的节点中。

查看工作项类型

前提条件:您已经完成 创建团队项目。“WITLab”团队项目已经可用。

查看工作项类型

1.      启动 Visual Studio 并打开 Team Explorer

2.      Team Explorer 中,展开 WITLab 团队项目,并等待几秒钟以便其节点出现。

3.      在团队项目中,右击“工作项”节点,指向“添加工作项”,然后单击“Task”。

随即显示一个表示新的“Task”工作项的表单。该表单的有些字段包含默认值。在本演练中,您将自定义从中创建此工作项的“Task”工作项类型。

导出工作项类型

前提条件:您已经完成 创建团队项目。“WITLab”团队项目已经可用。

导出工作项类型

1.      打开一个 Visual Studio 命令提示。为此,请单击“开始”,然后单击“所有程序”。指向“Microsoft Visual Studio 2005,再指向“Visual Studio Tools”,然后单击“Visual Studio 2005 命令提示”。

2.      通过键入以下命令并按 Enter,将目录更改到包含工作项类型的程序集的位置。

cd ..\Common7\IDE\PrivateAssemblies

3.      在命令提示处,键入以下命令然后按 Enter

witexport /f task.xml /t <server name> /p WITLab /n Task

此命令将“Task”工作项类型从 Team Foundation Server 导出到一个 XML 文件。导出操作完成时会显示以下消息:

工作项类型导出完成。

4.      (可选)若要查看“Task”工作项类型的 XML 定义,请在命令提示处键入 task.xml 然后按 Enter

重命名类型

前提条件:您已经完成了 导出工作项类型 过程。

重命名类型

1.      Visual Studio 中,单击“文件”,指向“打开”,然后单击“文件”。

这将显示“打开文件”对话框。

2.      在“查找范围”之下,定位到 Visual Studio 安装中的以下位置:

<驱动器>:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies

3.      单击 task.xml 文件,然后单击“打开”。出现有关行尾的提示时,单击“否”。

这将打开 task.xml,即包含“Task”工作项类型的定义的 XML 文件。

4.      定位到 XML 文件中的以下元素。

<WORKITEMTYPE name="Task">

5.      name 属性的值更改为 Special Task

<WORKITEMTYPE name="Special Task">

6.      将更改保存到新的 XML 文件。为此,在 Visual Studio 的“文件”菜单上,单击“另存 task.xml 为”。

随即出现“另存文件为”对话框。

7.      对于“文件名”,请键入 specialtask.xml,然后单击“保存”。

导入更改

前提条件:您已经完成了 重命名类型 过程。

导入更改

1.      打开一个 Visual Studio 命令提示。为此,请单击“开始”,然后单击“所有程序”。指向“Microsoft Visual Studio 2005,再指向“Visual Studio Tools”,然后单击“Visual Studio 2005 命令提示”。

2.      通过键入以下命令并按 Enter,将目录更改到包含工作项类型的程序集的位置。

cd ..\Common7\IDE\PrivateAssemblies

3.      将更改后的工作项类型导入 Team Foundation Server。为此,请在 Visual Studio 命令提示处键入以下命令,然后按“Enter”:

witimport /f specialtask.xml /t <server name> /p WITLab

这会将 specialtask 工作项类型导入 Team Foundation Server。导入操作完成时会显示以下消息:

工作项类型导入完成。

4.      Team Explorer 中,单击“刷新”以从服务器下载最新更新。

这些更新包括您刚导入的更改。请等待几秒钟,直到加载了所有的节点。正在加载中的节点显示“正在工作”。

5.      新建“Special Task”工作项。为此,请右击“工作项”节点,指向“添加工作项”,然后单击“Special Task”。

该工作项是从您已更改并导入的工作项类型创建的。

添加字段

前提条件:您已经完成了 重命名类型 过程。

添加字段

1.      打开包含“Special Task”工作项类型定义的文件。为此,请在 Visual Studio 中单击标记为“specialtask.xml”的选项卡。

2.      找到 XML 文件的以下部分。

<FIELDS>

3.      通过键入下面以粗体文本显示的 XML,创建一个名为“Category”的新字符串字段和用于工具提示的帮助文本。

<FIELDS>

<FIELD name="Category" refname="MyCompany.MyProcess.Category" type="String"><HELPTEXT>Describes the category to which this special task belongs.</HELPTEXT></FIELD>

Note注意

“引用名称”(或 refname)是字段的编程名称。所有其他规则都应该引用此 refname。有关更多信息,请参见字段引用名。

4.      找到 XML 文件中描述工作项表单的部分。

<FORM>

5.      找到 FORM 部分中的下列行。

<Group Label="Classification">

  <Column PercentWidth="100">

    <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area" LabelPosition="Left" />

    <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="Iteration" LabelPosition="Left" />

  </Column>

</Group>

6.      通过键入下面以粗体文本显示的 XML,插入一个新控件以显示“Category”字段:

<Group Label="Classification">

  <Column PercentWidth="100">

    <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area" LabelPosition="Left" />

    <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="Iteration" LabelPosition="Left" />

    <Control Type="FieldControl" FieldName="MyCompany.MyProcess.Category" Label="Category" LabelPosition="Left" />  </Column>

</Group>

7.      单击工具栏上的“保存”按钮将更改保存到该 XML 文件。

8.      将更改后的“Special Task”工作项类型导入 Team Foundation Server。为此,请在 Visual Studio 命令提示处键入以下命令,然后按 Enter

witimport /f specialtask.xml /t <server name> /p WITLab

这会将 specialtask 工作项类型导入 Team Foundation Server。导入操作完成时会显示以下消息:

工作项类型导入完成。

9.      Team Explorer 中,单击“刷新”以从服务器下载最新更新。

这些更新包括您刚导入的更改。请等待几秒钟,直到加载了“工作项”节点。正在加载中的节点显示“正在工作”。

10.  新建“Special Task”工作项。为此,请右击“工作项”节点,指向“添加工作项”,然后单击“Special Task”。

此工作项是从您已更改并导入的工作项类型创建的。

请注意表单上新的“Category”字段。将鼠标指针移到该字段的标签上方以查看工具提示。

11.  单击“关闭”关闭新的“Special Task”。提示您保存工作项时,请单击“否”。

向字段添加规则

前提条件:您已经完成了 添加字段 过程。

向字段添加规则

1.      打开包含“Special Task”工作项类型定义的文件。为此,请在 Visual Studio 中单击标记为“specialtask.xml”的选项卡。

2.      找到 XML 文件的 <FIELDS> 部分以及其中的“Category”字段。

3.      通过将以下规则添加到该 XML 文件,使“Category”成为必选字段。该规则以粗体文本显示。

<FIELD name="Category" refname="MyCompany.MyProcess.Category" type="String" reportable="dimension">

<HELPTEXT>Describes the category to which this special task belongs.</HELPTEXT>

<REQUIRED />

</FIELD>

4.      单击“保存”将更改保存到该 XML 文件。

5.      将更改后的“Special Task”工作项类型导入 Team Foundation Server。为此,请在 Visual Studio 命令提示处键入以下命令,然后按 Enter

witimport /f specialtask.xml /t <server name> /p WITLab

这会将 specialtask 工作项类型导入 Team Foundation Server。导入操作完成时会显示以下消息:

工作项类型导入完成。

6.      Team Explorer 中,单击“刷新”以从服务器下载最新更新。

这些更新包括您刚导入的更改。请等待几秒钟,直到加载了“工作项”节点。正在加载中的节点显示“正在工作”。

7.      新建“Special Task”工作项。为此,请右击“工作项”节点,指向“添加工作项”,然后单击“Special Task”。

此工作项是从您已更改并导入的工作项类型创建的。

请注意“Category”字段现在已突出显示。这指示它是必选字段。

8.      选择“Special Task”工作项上的“标题”字段并键入“示例任务”。

9.      单击工具栏上的“保存”按钮保存该工作项。

随即显示一个表明“Category”字段不能为空的错误对话框。单击“确定”关闭对话框。

10.  在“Special Task”上的“Category”字段中,键入A 类别”

11.  单击“保存”以保存该工作项。

请注意,该工作项现在可以保存了。

12.  单击“关闭”关闭新的“Special Task”。

创建选取列表

前提条件:您已经完成了 向字段添加规则 过程。

创建选取列表

1.      打开包含“Special Task”工作项类型定义的文件。为此,请在 Visual Studio 中单击标记为“specialtask.xml”的选项卡。

2.      找到 XML 文件的 <FIELDS> 部分以及其中的“Category”字段。

3.      通过插入一个 ALLOWEDVALUES 规则来添加“Category”字段的允许值列表。新规则在下面的 XML 中以粗体文本显示。

<FIELD name="Category" refname="MyCompany.MyProcess.Category" type="String" reportable="dimension">

<HELPTEXT>Describes the category to which this special task belongs.</HELPTEXT>

<REQUIRED />

<ALLOWEDVALUES><LISTITEM value="Process Management" /><LISTITEM value="Planning" /><LISTITEM value="Execution" /><LISTITEM value="Review" /></ALLOWEDVALUES>

</FIELD>

4.      通过删除以粗体文本显示的 REQUIRED 规则,使“Category”成为可选字段。

<FIELD name="Category" refname="MyCompany.MyProcess.Category" type="String" reportable="dimension">

<HELPTEXT>Describes the category to which this special task belongs.</HELPTEXT>

<REQUIRED />

<ALLOWEDVALUES>

<LISTITEM value="Process Management" />

<LISTITEM value="Planning" />

<LISTITEM value="Execution" />

<LISTITEM value="Review" />

</ALLOWEDVALUES>

</FIELD>

5.      单击“保存”将更改保存到该 XML 文件。

6.      将更改后的“Special Task”工作项类型导入 Team Foundation Server。为此,请在 Visual Studio 命令提示处键入以下命令,然后按 Enter

witimport /f specialtask.xml /t <server name> /p WITLab

这会将 specialtask 工作项类型导入 Team Foundation Server。导入操作完成时会显示以下消息:

工作项类型导入完成。

7.      Visual Studio Team Explorer 窗口中,单击“刷新”按钮从服务器下载最新的更新。

这些更新包括您刚导入的更改。请等待几秒钟,直到加载了“工作项”节点。正在加载中的节点显示“正在工作”。

8.      新建“Special Task”工作项。为此,请右击“工作项”节点,指向“添加工作项”,然后单击“Special Task”。

此工作项是从您已更改并导入的工作项类型创建的。

9.      单击“Category”字段的下拉列表框。

请注意,该字段现在只支持由 ALLOWEDVALUES 规则指定的值。

Note注意

下拉列表中的允许值始终按字母顺序出现,与 XML 文件中的 LISTITEM 元素的顺序无关。

10.  单击“关闭”关闭新的“Special Task”。提示您保存工作项时,请单击“否”。

更改工作流

前提条件:您已经完成了 创建选取列表 过程。

更改工作流

1.      打开包含“Special Task”工作项类型定义的文件。为此,请在 Visual Studio 中单击标记为“specialtask.xml”的选项卡。

2.      在该 XML 文件的 <WORKFLOW> 部分中,找到工作项类型的工作流定义,如下面的 XML 所示:

<WORKFLOW>

  <STATES>

    <STATE value="Active">

      <FIELDS>

        <FIELD refname="Microsoft.VSTS.Common.ClosedDate">

          <EMPTY />

        </FIELD>

        <FIELD refname="Microsoft.VSTS.Common.ClosedBy">

...

3.      请注意,其中只定义了两个状态,即 Active Closed。其中还定义了这两个状态之间的转换,以及一个从空状态开始的起始转换,后者在第一次创建工作项时使用。

4.      通过插入另一个 STATE 元素,向该类型定义添加一个 Unapproved 状态。新状态以粗体文本显示。

<WORKFLOW>

  <STATES>

    <STATE value="Unapproved">    </STATE>    <STATE value="Active">

      <FIELDS>

        <FIELD refname="Microsoft.VSTS.Common.ClosedDate">

          <EMPTY />

        </FIELD>

        <FIELD refname="Microsoft.VSTS.Common.ClosedBy">

...

5.      创建空状态与 Unapproved 状态之间的转换。为此,请首先找到工作流定义中针对转换的部分。然后插入下面以粗体文本显示的 XML。由于此更改,该类型的所有新工作项将从 Unapproved 状态开始,并且默认原因为“New”(新建)。

<TRANSITIONS>

  <TRANSITION from="" to="Unapproved">    <REASONS>      <DEFAULTREASON value="New" />    </REASONS>  </TRANSITION>  <TRANSITION from="" to="Active">

    <REASONS>

      <DEFAULTREASON value="New" />

    </REASONS>

    <FIELDS>

      <FIELD refname="Microsoft.VSTS.Common.ActivatedBy">

        <COPY from="currentuser" />

      </FIELD>

      <FIELD refname="Microsoft.VSTS.Common.ActivatedDate">

        <COPY from="clock" />

      </FIELD>

      <FIELD refname="System.AssignedTo">

        <COPY from="currentuser" />

      </FIELD>

    </FIELDS>

  </TRANSITION>

6.      删除到 Active 的转换(在下面的 XML 中以粗体文本显示)。这样做是因为只能存在一个起始转换,并且您希望使用名为“Ported”的起始转换,下一步将对该转换进行定义。

<TRANSITIONS>

  <TRANSITION from="" to="Unapproved">

    <REASONS>

      <DEFAULTREASON value="New" />

    </REASONS>

  </TRANSITION>

  <TRANSITION from="" to="Active">    <REASONS>      <DEFAULTREASON value="New" />    </REASONS>    <FIELDS>      <FIELD refname="Microsoft.VSTS.Common.ActivatedBy">        <COPY from="currentuser" />      </FIELD>      <FIELD refname="Microsoft.VSTS.Common.ActivatedDate">        <COPY from="clock" />      </FIELD>      <FIELD refname="System.AssignedTo">        <COPY from="currentuser" />      </FIELD>    </FIELDS>  </TRANSITION>

7.      通过插入下面以粗体文本显示的 XML,为起始转换添加一个“Ported”(移植)原因。这样让用户知道该工作项是全新的还是从另一个跟踪系统移植过来的。

<TRANSITIONS>

  <TRANSITION from="" to="Unapproved">

    <REASONS>

      <DEFAULTREASON value="New" />

     <REASON value="Ported" />    </REASONS>

  </TRANSITION>

...

8.      插入下面以粗体文本显示的 COPY 规则。此规则将“指派给”字段默认设置为创建该工作项的用户,并且只在起始转换期间进行评估。

<TRANSITIONS>

  <TRANSITION from="" to="Unapproved">

    <REASONS>

      <DEFAULTREASON value="New" />

     <REASON value="Ported" />

    </REASONS>

    <FIELDS>       <FIELD refname="System.AssignedTo">         <COPY from="currentuser" />       </FIELD>    </FIELDS>

  </TRANSITION>

...

Note注意

在其他 <TRANSITION> <STATE> 元素下面插入此规则会将此规则的作用范围限定于其他转换或状态。

9.      通过插入下面以粗体文本显示的 XML,创建一个从 Unapproved 状态到 Active 状态的转换。由于此更改,当某个“Special Task”被批准时,它可以执行此转换。

<TRANSITIONS>

  <TRANSITION from="" to="Unapproved">

    <REASONS>

      <DEFAULTREASON value="New" />

     <REASON value="Ported" />

    </REASONS>

    <FIELDS>

       <FIELD refname="System.AssignedTo">

         <COPY from="currentuser" />

       </FIELD>

    </FIELDS>

  </TRANSITION>

  <TRANSITION from="Unapproved" to="Active">    <REASONS>      <DEFAULTREASON value="Approved" />    </REASONS>  </TRANSITION>  <TRANSITION from="Active" to="Closed">

    <REASONS>

      <DEFAULTREASON value="Completed" />

      <REASON value="Deferred" />

      <REASON value="Cut" />

      <REASON value="Obsolete" />

    </REASONS>

...

10.  单击“保存”将更改保存到该 XML 文件。

11.  将更改后的“Special Task”工作项类型导入 Team Foundation Server。为此,请在 Visual Studio 命令提示处键入以下命令,然后按 Enter

witimport /f specialtask.xml /t <server name> /p WITLab

这会将 specialtask 工作项类型导入 Team Foundation Server。导入操作完成时会显示以下消息:

Work item type import complete.

12.  Team Explorer 中,单击“刷新”以从服务器下载最新更新。

这些更新包括您刚导入的更改。请等待几秒钟,直到加载了“工作项”节点。正在加载中的节点显示“正在工作”。

13.  新建“Special Task”工作项。为此,请右击“工作项”节点,指向“添加工作项”,然后单击“Special Task”。

此工作项是从您已更改并导入的工作项类型创建的。

14.  请注意,初始“状态”现在为 Unapproved,并且“原因”默认为“New”。此外,“指派给”值默认为您的帐户名称。单击“原因”字段查看一个下拉列表框,其中列出了原因“New”和“Ported”。

15.  在“标题”字段中,键入标题,然后单击“保存”保存该工作项。等待保存操作完成(由状态栏上的“项已保存”指示)。

16.  在“状态”字段中,选择“Active”值以批准该工作项并再次转换它。请注意,“原因”字段默认为“Approved”。

17.  单击“保存”保存此转换。

18.  单击“关闭”关闭该“Special Task”。

更改表单布局

前提条件:您已经完成了 更改工作流 过程。

更改表单布局

1.      打开包含“Special Task”工作项类型定义的文件。为此,请在 Visual Studio 中单击标记为“specialtask.xml”的选项卡。

2.      找到该 XML 文件的 <TabGroup> 部分。注意,该部分中有用于“Links”(链接)和“File Attachments”(文件附件)的 TAB 元素,其中每个 TAB 元素包含一个呈现各自的控件的 CONTROL 元素。

<Tab Label="Links">

  <Control Type="LinksControl" />

</Tab>

<Tab Label="File Attachments">

  <Control Type="AttachmentsControl" />

</Tab>

3.      通过用下面的新 XML 替换上一步骤中所示的 XML,将两个选项卡合并为一个同时包含两个控件的“Links and Attachments”(链接和附件)选项卡。

<Tab Label="Links and Attachments">

  <Control Type="LinksControl" Label="Links" LabelPosition="Top" />

  <Control Type="AttachmentsControl" Label="Attachments" LabelPosition="Top" />

</Tab>

4.      找到 FORM <Layout> 定义中描述 Classification(分类)和 Status(状态)组的部分。

<Group Label="Classification">

  <Column PercentWidth="100">

    <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area" LabelPosition="Left" />

    <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="Iteration" LabelPosition="Left" />

    <Control Type="FieldControl" FieldName="MyCompany.MyProcess.Category" Label="Category" LabelPosition="Left" />

  </Column>

</Group>

Note注意

为获得最佳结果,每个 Control(控件)或 Group(组)应显示在一个 Column(列)中,即使该 Column 跨越整个表单宽度也应如此。相应地,每个 Column 应该显示在一个 Group 中,即使该 Group 没有可见的标签或边界也应如此。

5.      选择下面以粗体文本显示的行,然后单击“编辑”菜单上的“复制”,以将此内容复制到剪贴板以便以后使用。

  <Column PercentWidth="70">

    <Group>

      <Column PercentWidth="100">

        <Group Label="Classification">

          <Column PercentWidth="100">

            <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area" LabelPosition="Left" />            <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="Iteration" LabelPosition="Left" />            <Control Type="FieldControl" FieldName="MyCompany.MyProcess.Category" Label="Category" LabelPosition="Left" />          </Column>

        </Group>

6.      删除下面的 XML 中以粗体文本显示的行,以将 Classification 组从它在表单上的当前位置移除。

<Layout>

  <Group>

    <Column PercentWidth="70">

      <Control Type="FieldControl" FieldName="System.Title" Label="&amp;Title:" LabelPosition="Left" />

    </Column>

    <Column PercentWidth="30">

      <Control Type="FieldControl" FieldName="Microsoft.VSTS.Common.Discipline" Label="&amp;Discipline:" LabelPosition="Left" />

    </Column>

  </Group>

  <Group Label="Classification">    <Column PercentWidth="100">      <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="&amp;Area:" LabelPosition="Left" />      <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="&amp;Iteration:" LabelPosition="Left" />      <Control Type="FieldControl" FieldName="MyCompany.MyProcess.Category" Label="Category" LabelPosition="Left" />    </Column>  </Group>

7.      <TabGroup> 部分中,找到下列定义“Details”(详细信息)选项卡的行:

<Tab Label="Details">

  <Group>

    <Column PercentWidth="50">

      <Group Label="General">

        <Column PercentWidth="100">

          <Control Type="FieldControl" FieldName="Microsoft.VSTS.Common.Issue" Label="Iss&amp;ue:" LabelPosition="Left" />

          <Control Type="FieldControl" FieldName="Microsoft.VSTS.Common.ExitCriteria" Label="E&amp;xit criteria:" LabelPosition="Left" />

          <Control Type="FieldControl" FieldName="Microsoft.VSTS.Build.IntegrationBuild" Label="Integration &amp;build:" LabelPosition="Left" />

        </Column>

      </Group>

    </Column>

    <Column PercentWidth="50">

      <Group Label="Schedule">

        <Column PercentWidth="100">

          <Control Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.RemainingWork" Label="Remaining &amp;work (hours):" LabelPosition="Left" />

          <Control Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.CompletedWork" Label="Com&amp;pleted work (hours):" LabelPosition="Left" />

        </Column>

      </Group>

    </Column>

  </Group>

</Tab>

8.      将剪贴板中的内容粘贴到以下位置,以将这些控件移至“Details”选项卡。

<Tab Label="Details">

  <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area" LabelPosition="Left" />  <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="Iteration" LabelPosition="Left" />  <Control Type="FieldControl" FieldName="MyCompany.MyProcess.Category" Label="Category" LabelPosition="Left" />  <Group>

    <Column PercentWidth="50">

      <Group>

        <Column PercentWidth="100">

          <Control Type="FieldControl" FieldName="Microsoft.VSTS.Common.Issue" Label="Issue" LabelPosition="Left" />

...

 

 

9.      进行下列更改(以粗体文本显示),以围绕被移动的字段创建分组并将字段划分为两列。