INT 21H中断指令

1、字符功能调用类(Character-Oriented Function)

01H、07H和08H —从标准输入设备输入字符

02H —字符输出

03H —辅助设备的输入

04H —辅助设备的输出

05H —打印输出

06H —控制台输入/输出

09H —显示字符串

0AH — 键盘缓冲输入

0BH —检测输入状态

0CH —清输入缓冲区的输入功能

(1)、功能01H、07H和08H

功能描述:从标准输入设备(如:键盘)读入一个字符。该中断在处理过程中将一直处于等待状态直到有字符可读为止。该输入还可被重定向,如果这样做,则无法判断文件是否已到文件尾

入口参数:AH=01H,过滤掉控制字符,并回显

 =07H,不过滤掉控制字符,不回显

 =08H,过滤掉控制字符,不回显

出口参数:AL=输入字符的ASCII码

(2)、功能02H

功能描述:向标准输出设备(如:屏幕)输出一个字符。该输出还可被重定向,如果这样做,则将无法判断磁盘是否满

入口参数:AH=02H

DL=待输出字符的ASCII码

出口参数:无

(3)、功能03H

功能描述:从辅助设备读入一个字符,该辅助设备的缺省值为COM1

入口参数:AH=03H

出口参数:AL=读入字符的ASCII码

(4)、功能04H

功能描述:向辅助设备输出一个字符,该辅助设备的缺省值为COM1

入口参数:AH=04H

DL=待输出字符的ASCII码

出口参数:无

(5)、功能05H

功能描述:向标准的输出设备输出一个字符。该缺省的输出设备为LPT1端口的打印机,除非用MODE命令来改变

入口参数:AH=05H

DL=待输出字符的ASCII码

出口参数:无

(6)、功能06H

功能描述:控制台(如:键盘、屏幕)输入/输出。如果输入/输出操作被重定向,那么,将无法判断文件是否已到文件尾,或磁盘已满

入口参数:AH=06H,DL=输入/输出功能选择

出口参数:若DL=00H-FEH,则此功能为输出,DL为待输出字符的ASCII码;

若DL=0FFH,则此功能为输入,此时:若ZF=1,则无字符可读,否则,AL=读入字符的ASCII码

(7)、功能09H

功能描述:输出一个字符串到标准输出设备上。如果输出操作被重定向,那么,将无法判断磁盘已满

入口参数:AH=09H

DS:DX=待输出字符的地址

说明:待显示的字符串以’$’作为其结束标志

出口参数:无

(8)、功能0AH

功能描述:从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)。如果该输入操作被重定向,那么,将无法判断文件是否已到文件尾

入口参数:AH=0AH

DS:DX=存放输入字符的起始地址

接受输入字符串缓冲区的定义说明:

  1、第一个字节为缓冲区的最大容量,可认为是入口参数;

  2、第二个字节为实际输入的字符数(不包括回车键),可看作出口参数;

  3、从第三个字节开始存放实际输入的字符串;

  4、字符串以回车键结束,回车符是接受的最后一个字符;

  5、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。

例如:

  BUFF 80, ?, 80 DUP(?)   ;最多接受80个字符

出口参数:无

(9)、功能0BH

功能描述:检查标准输入设备上是否有字符可读。该输入操作可被重定向

入口参数:AH=0BH

出口参数:AL=00H——无字符可读;FFH——有字符可读

(10)、功能0CH

功能描述:清空当前的标准输入缓冲区,再读入字符。其输入操作可被重定向

入口参数:AH=0CH

AL=01H、06H、07H、08H或0AH

出口参数:若入口参数AL为0AH,则DS:DX=存放输入字符的起始地址,否则,出口参数AL=输入字符的ASCII码

2、目录控制功能(Directory-Control Function)

39H —创建目录

3AH —删除目录

3BH —设置当前目录

47H —读取当前目录

(1)、功能39H

功能描述:用指定的驱动器和路径创建一个新目录

入口参数:AH=39H

DS:DX=指定路径的字符串地址(以0为字符串的结束标志)

出口参数:CF=0——创建成功,否则,AX=错误号(03H或05H),其含义见错误代码表

(2)、功能3AH

功能描述:删除指定的驱动器和路径的目录

入口参数:AH=3AH

DS:DX=指定路径的字符串地址(以0为字符串的结束标志)

出口参数:CF=0——删除成功,否则,AX=错误号(03H或05H),其含义见错误代码表

(3)、功能3BH

功能描述:用指定的驱动器和路径设置为当前目录

入口参数:AH=3BH

DS:DX=指定路径的字符串地址(以0为字符串的结束标志)

出口参数:CF=0——设置成功,否则,AX=错误号(03H),其含义见错误代码表

(4)、功能47H

功能描述:取当前目录的完全路径字符串

入口参数:AH=47H

DL=驱动器号(0=缺省,1=A,…)

DS:SI=存放当前目录字符串的地址

出口参数:CF=0——读取成功,否则,AX=错误号(0FH),其含义见错误代码表

3、磁盘管理功能(Disk-Management Function)

0DH —磁盘复位

0EH —选择磁盘

19H —读取当前驱动器

1BH, 1CH —读取驱动器数据

2EH —设置校验标志

36H —读取驱动器分配信息

54H —读取校验标志

(1)、功能0DH

功能描述:清空当前的文件缓冲区,但在MS-DOS内,暂时写入缓冲区的数据将写入磁盘

入口参数:AH=0DH

出口参数:无

(2)、功能0EH

功能描述:指定当前驱动器

入口参数:AH=0EH

DL=驱动器号(0=A,1=B,…)

出口参数:AL=系统中当前的驱动器号

(3)、功能19H

功能描述:取当前缺省驱动器号

入口参数:AH=19H

出口参数:AL=驱动器号(0=A,1=B,…)

(4)、功能1BH和1CH

功能描述:获得驱动器的分配信息

入口参数:AH=1BH——为缺省驱动器

AH=1CH——为任意驱动器,DL=驱动器号(0=缺省,1=A,…)

出口参数:AL=0FFH——失败,否则,

  AL=每簇的扇区数

  DS:BX=ID字节的地址

  CX=物理扇区的大小(字节数)

  DX=驱动器的簇数

(5)、功能2EH

功能描述:设置/清除操作系统自动读取检验标志

入口参数:AH=2EH

DL=00H

AL=00H——清除该标志,01H——设置该标志

出口参数:无

(6)、功能36H

功能描述:取选定驱动器的信息

入口参数:AH=36H

DL=驱动器号(0-缺省,1=A,2=B,…)

出口参数:若功能调用失败,AX=0FFFFH,否则,

  AX=每簇的扇区数

  BX=可用的簇数

  CX=物理扇区的大小(字节数)

  DX=驱动器中的簇数

(7)、功能54H

功能描述:读取校验标志

入口参数:AH=54H

出口参数:AL=当前检验标志值:00H—关检验,01H—开检验

4、文件操作功能(File Operation Function)

3CH —创建文件

3DH —打开文件

3EH —关闭文件

41H —删除文件

43H —读取/设置文件属性

45H —复制文件句柄

46H —重定义文件句柄

4EH —查找到第一个文件

4FH —查找下一个文件

56H — 文件换名

57H —读取/设置文件的日期和时间

5AH —创建临时文件

5BH —创建新文件

67H —设置文件句柄数(最多文件数)

6CH —扩展的打开文件功能(打开、创建或替换文件)

(1)、功能3CH

功能描述:用指定的文件名创建一个新文件。如果指定的文件已存在,则设置其长度为0。创建后,该文件是打开的,并返回其句柄

入口参数:AH=3CH

DS:DX=指定文件名字符串的地址(以0为字符串的结束标志)

CX=文件属性(这些标志位可以组合) 位0=1——只读

位2=1——系统

位5=1——归档位1=1——隐含

位3=1——卷标号

其它位保留不用,并置为0

出口参数:CF=0——创建成功,AX=文件句柄,否则,AX=错误号(03H、04H或05H),其含义见错误代码表

(2)、功能3DH

功能描述:打开指定的驱动器、路径和文件名,并返回其文件句柄

入口参数:AH=3DH

DS:DX=表明文件的字符串(以0为字符串的结束标志)

AL为打开方式: 位0~2000—只读方式  001—写方式  010—读/写方式

位3保留,其值为0

位4~6共享模式 000—兼容模式001—不共享010—拒绝写

011—拒绝读100—不拒绝任何操作

位7继承标志——0/1:子进程继承或不继承句柄

出口参数:CF=0——打开成功,AX=文件句柄,否则,AX=错误号(02H、03H、04H、05H或0CH),其含义见错误代码表

(3)、功能3EH

功能描述:关闭指定句柄的文件

入口参数:AH=3EH

BX=文件句柄

出口参数:CF=0——关闭成功,否则,AX=错误号(06H),其含义见错误代码表

(4)、功能41H

功能描述:删除指定的文件

入口参数:AH=41H

DS:DX=文件名字符串的地址

出口参数:CF=0——删除成功,否则,AX=错误号(02H、03H或05H),其含义见错误代码表

(5)、功能43H

功能描述:读取或设置指定文件的属性

入口参数:AH=43H

BX=文件句柄

DS:DX=文件名字符串的地址

AL=00H/01H——读取/设置文件属性

CX=文件属性: 位0=1——只读位1=1——隐含

位2=1——系统位3=1——卷标号

位5=1——归档其它位保留不用,并置为0

出口参数:CF=0——关闭成功,CX=文件属性,否则,AX=错误号(01H、02H、03H或05H),其含义见错误代码表

(6)、功能45H

功能描述:复制当前打开设备或文件的句柄,该句柄对应同样设备或文件的相同位置

入口参数:AH=45H

BX=待复制的文件句柄

出口参数:CF=0——复制成功,AX=新句柄,否则,AX=错误号(04H或06H),其含义见错误代码表

(7)、功能46H

功能描述:指定二个句柄,把第二句柄指向第一个句柄,即第二个句柄被重定向

入口参数:AH=46H

BX=文件或设备的句柄

CX=待重定向的文件句柄

出口参数:CF=0——重定向成功,否则,AX=错误号(04H或06H),其含义见错误代码表

(8)、功能4EH

功能描述:获取第一个与给定的文件名相匹配的文件

入口参数:AH=4EH

DS:DX=给定文件名的字符串

CX=搜索时使用的文件属性: 位0=1——只读  位1=1——隐含

位2=1——系统  位3=1——卷标号

位4=1——目录  位5=1——归档

其它位保留不用,并置为0

出口参数:CF=1——操作失败,AX=错误号(02H、03H或12H),其含义见错误代码表,否则,操作成功,DTA(Disk Transfer

Area)按下列方式填入数据: 字节00~14H保留

字节15H匹配的文件属性

字节16~17H压缩的文件名

字节18~19H压缩的文件日期

字节1A~1DH文件大小

字节1E~2AH文件名字符串

(9)、功能4FH

功能描述:在中断21H的功能4EH成功使用之后,再搜索下一个文件名

入口参数:AH=4FH

AL=返回的代码

出口参数:CF=1——操作失败,AX=错误号(12H),其含义见错误代码表,否则,操作成功,DTA中的数据如前面功能4EH所示

(10)、功能56H

功能描述:文件换名

入口参数:AH=56H

DS:DX=当前文件名字符串地址

ES:DI=新文件名字符串地址

出口参数:CF=0——操作成功,否则,AX=错误号(02H、03H、05H、11H),其含义见错误代码表

(11)、功能57H

功能描述:读取/设置文件的日期和时间

入口参数:AH=57H

BX=文件句柄 读取日期和时间AL=00H

设置日期和时间AL=01H

CX=时间(0F~0BH:小时,0AH~05H:分钟,04H~00H:2秒的个数)

DX=日期(0F~09H:年(相对1980年),08H~05H:月,04H~00H:日)

出口参数:CF=1——操作失败,AX=错误号(01H、06H),其含义见错误代码表,否则,若是读文件信息,则,CX=时间,DX=日期

(12)、功能5AH

功能描述:创建临时文件

入口参数:AH=5AH

DS:DX=路径名的地址

CX=文件属性(位可组合),其定义如下: 位0=1 只读位3-4=0  保留

位1=1 隐含位5=1   归档

位2=1 系统位6-15=0 保留

出口参数:CF=0——操作成功,AX=文件句柄,DS:DX=完整的路径文件地址,否则,AX=错误号(03H、04H或05H),其含义见错误代码表

(13)、功能5BH

功能描述:创建新文件

入口参数:AH=5BH

DS:DX=路径名的地址

CX=文件属性(位可组合),其定义如下: 位0=1只读位4=0保留

位1=1隐含位5=1归档

位2=1系统位6-15=0保留

位3=1卷标号

出口参数:CF=0——操作成功,AX=文件句柄,否则,AX=错误号(03H、04H、05H或50H),其含义见错误代码表

(14)、功能67H

功能描述:设置文件句柄数(最多文件数)

入口参数:AH=67H

BX=句柄的数量

出口参数:CF=0——操作成功,否则,AX=错误号,其含义见错误代码表

(15)、功能6CH

功能描述:扩展的打开文件功能(打开、创建或替换文件)

入口参数:AH=6CH

AL=00H

DS:SI=路径名的地址

BX=打开方式 位2~0000—只读  001—只写  010—可读、写

位3保留(0)

位6~4000—兼容   001—拒绝读写  010——拒绝写

011—拒绝读  100——不拒绝任何操作

位70—子进程继承句柄,1—子进程不继承句柄

位12~8保留(0)

位13致命错误处理程序,0—执行INT 24H,否则,返回错误代码给进程

位14写入方式:0—写入缓冲区,1—直接写入文件

位15保留(0)

CX=文件属性

位0=1 只读位4=0   保留

位1=1 隐含位5=1   归档

位2=1 系统位6-15=0  保留

位3=1 卷标签

DX=打开标志 位3~0  0—打开失败,1—打开文件,2—替换文件

位7~4  0—打开失败,1—创建文件

位15~8  0—保留

出口参数:CF=1——操作失败,AX=错误号,其含义见错误代码表,否则,

AX=文件句柄

CX=1——文件存在,打开之

 =2——文件不存在,创建之

5、文件操作功能(FCB)(File Operation Function)

0FH —打开文件

10H —关闭文件

11H、12H —查找第一个或下一个文件

13H —删除文件

16H —创建文件

17H —文件换名

23H —读取文件的大小

29H —分析文件名

(1)、功能0FH

功能描述:打开文件,并使之为顺序读/写作好准备

入口参数:AH=0FH

DS:DX=文件控制块的地址

出口参数:AL=00H——打开成功,否则,AL=FFH(如文件找不到)

在MS-DOS操作系统中,文件控制块的字段如下表所示。 字段名偏移量字段含义

驱动器字00H1 for drive A, 2 for drive B,…

当前块字段0CH00H

记录大小字段0EH0080H

文件长度字段10H文件字节数

日期字段14H日期

时间字段16H时间

(2)、功能10H

功能描述:关闭文件

入口参数:AH=10H

DS:DX=文件控制块的地址

出口参数:AL=00H——关闭成功,否则,AL=FFH

(3)、功能11H和12H

功能描述:查找第一个或下一个相匹配的文件

入口参数:AH=11H——第一个相匹配的文件

  =12H——下一个相匹配的文件

DS:DX=文件控制块的地址

出口参数:AL=00H——查找到,否则,AL=FFH

(4)、功能13H

功能描述:在指定(或缺省)的驱动器中,删除所有相匹配的文件

入口参数:AH=13H

DS:DX=文件控制块的地址

出口参数:AL=00H——删除成功,否则,AL=FFH

(5)、功能16H

功能描述:在当前目录中创建一个文件,其文件长度为0,并打开该文件,为随后的读/写操作作好必要的准备

入口参数:AH=16H

DS:DX=未打开的文件控制块的地址

出口参数:AL=00H——创建成功,否则,AL=FFH(如:磁盘满)

(6)、功能17H

功能描述:在指定的驱动器的当前目录中,把所有相匹配的文件换名

入口参数:AH=17H

DS:DX=指定文件控制块的地址

出口参数:AL=00H——换名成功,否则,AL=FFH

(7)、功能23H

功能描述:在当前目录中查找一个相匹配的文件。如果发现,则用其记录数来更新其文件大小

入口参数:AH=23H

DS:DX=未打开的文件控制块的地址

出口参数:AL=00H——匹配成功,FCB中偏移量为21H的字段被设置为其记录数,否则,AL=0FFH

(8)、功能29H

功能描述:分析一个字符串(文件名)置入FCB表中的不同字段

入口参数:AH=29H

CX=要写入的记录数

DS:SI=字符串段的地址

ES:DI=FCB的地址

AL=分析的控制标志位 位3=1——若字符串中有文件后缀,则FCB中的文件后缀将改变

=0——若后缀忽略修改,或若分析后无后缀,则FCB中后缀字段被置为“空”

位2=1——若字符串中有文件名,则FCB中的文件名将改变

=0——若文件名忽略修改,或若分析后无文件名,则FCB中文件名字段被置为“空”

位1=1——若字符串中指定了驱动器号,则FCB中的ID字节被修改

=0——若ID字节忽略修改,或若分析后没有指定驱动器号,则FCB中驱动器字段被置为0(缺省值)

位0=1——

=0——忽略前导分割符

不忽略前导分割符

出口参数:AL=00H—没有通配字符 01H—有通配字符 FFH—驱动器号非法

DS:SI=分析后文件名第一个字符的地址

ES:DI=格式化后的、未打开的FCB地址

6、记录操作功能(Record Function)

1AH —设置数据传输区地址

2FH —读取数据传输区地址

3FH —读文件或设备

40H —写文件或设备

42H —设置文件指针

5CH —文件区域加锁或解锁

68H —提交文件缓冲区数据

(2)、功能2FH

功能描述:为FCB读/写操作而获取DTA的当前地址

入口参数:AH=2FH

出口参数:ES:BX=DTA的段地址和偏移量

(3)、功能3FH

功能描述:从先前打开的文件中读出指定数目的字节,并移动文件指针

入口参数:AH=3FH

BX=文件句柄

CX=将要读出的字节数

DS:DX=存放字符的缓冲区地址

出口参数:CF=0——读取成功,AX=读取的字符数,否则,AX=错误号(05H或06H),其含义见错误代码表

(4)、功能40H

功能描述:向先前打开的文件写入指定数量的字节,并相应修改文件指针

入口参数:AH=40H

BX=文件句柄

CX=写入的字节数

DS:DX=存放数据的缓冲区地址

出口参数:CF=0——关闭成功,AX=写入的字节数,否则,AX=错误号(05H或06H),其含义见错误代码表

(5)、功能42H

功能描述:设置文件指针的相对位置(相对与文件头、文件尾和当前位置)

入口参数:AH=42H

BX=文件句柄

CX=偏移量的高位

DX=偏移量的低位

AL=00H——从文件头开始的绝对偏移量

 =01H——从当前文件指针开始的偏移量(可带符号)

 =02H——从文件尾开始的偏移量(可带符号)

出口参数:CF=0——设置成功,DX是指针的高位,AX是其低位,否则,AX=错误号(01H和06H),其含义见错误代码表。

(6)、功能5CH

功能描述:文件区域加锁或解锁

入口参数:AH=5CH

AL=00H——区域加锁  01H——区域解锁

BX=文件句柄

CX:DX=区域偏移量

SI:DI=区域长度

DS:DX=路径名的地址

出口参数:CF=0——操作成功,否则,AX=错误号(01H、06H、21H或24H),其含义见错误代码表

(7)、功能68H

功能描述:提交文件缓冲区数据

入口参数:AH=68H

BX=文件句柄

出口参数:CF=0——操作成功,否则,AX=错误号,其含义见错误代码表

PS:最近翻出来的资料,很老了,原作者不详。

Win7调试服务程序,Debugbreak函数不响应,直接退出

上周调试Win7下的一个服务程序,以前都是用Debugbreak()直接可以进入调试的,但这次直接退出了。

查了一下,这样设置一下就可以:
控制面板->操作中心->维护->检查问题报告的解决方案->设置
每次发生问题时,在检查解决方案之前先询问我

保存设置后,就可以进入断点了,再次鄙视微软。

后来,又发现,即使设置后,仍然无法响应断点,没办法,只好用比较挫的代码搞定了:

	//在第一个DebugBreak()前面,添加下面的语句
	while(!IsDebuggerPresent())
	{
		Sleep(100);
	}
	DebugBreak();

这样,服务启动后,会一直等待调试器。启动服务后,手动通过VS、任务管理器或Process Explorer附加到进程,就可以对启动的服务进行调试了。

参考:
DebugBreak not breaking

诡异的dll(2)

还是昨天,还是同一个哥们。他要实现一个语音叫号的功能,要先普通话叫号,然后再粤语叫号。

诡异的事情发生了,在调试状态下,怎么运行都是正常的,
但直接双击运行,只能叫第一种声音(粤语或普通话),另一个声音(粤语或普通话)怎么都发不出来。
悲剧的是,他语音叫号也是调用了一个dll。

只好慢慢调试了,开始以为是线程退出的太快,或者变量作用域问题,或变量中繁体中文乱码问题,或者函数退出太快,或者是release时优化掉了…

弄了一个多小时,没有任何进展。无奈之下,我翻出了Process Explorer,去查看环境变量。
结果调试的时候,第一个环境变量是

__COMPAT_LAYER=WinXpsp3

天啊,这不是兼容模式吗。
于是将exe设成兼容模式,双击运行,就好了。

原来,他用BCB6做开发,在Win7 sp1上无法正常运行,就设成了兼容模式,调试时运行的exe当然也继承了兼容模式的环境变量咯。
吐血啊……

回家,搜了一下__COMPAT_LAYER环境变量,可以设置为以下数值:

兼容性:

兼容模式
WIN95 Windows 95
WIN98 Windows 98 / Windows Me
NT4SP5 Windows NT 4.0 (Service Pack 5)
WIN2000 Windows 2000
WINXP Windows XP
WINXPSP2 Windows XP (Service Pack 2)
WINXPSP3 Windows XP (Service Pack 3)
WINSRV03SP1 Windows Server 2003 (Service Pack 1)
WINSRV08SP1 Windows Server 2008 (Service Pack 1)
VISTARTM Windows Vista
VISTASP1 Windows Vista (Service Pack 1)
VISTASP2 Windows Vista (Service Pack 2)
WIN7RTM Windows 7

权限:

权限
RUNASADMIN 以管理员权限运行
RUNASINVOKER 以调用者权限运行

显示模式:

显示模式
DISABLETHEMES 禁用视觉主题
640X480 用640×480屏幕分辨率运行
HIGHDPIAWARE 高DPI设置时禁用显示缩放
256COLOR 用256色运行
DISABLEDWM 禁用桌面元素

另外,也可以通过注册表,设置程序的兼容模式:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"D:\\TEST\\Hello.exe"="WINXPSP3"
    HKEY hKey;
    LPCTSTR strSubKey = "Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers";
    long lRet = ::RegOpenKeyEx( HKEY_CURRENT_USER, strSubKey, 0, KEY_WRITE, &hKey );
    if ( lRet == ERROR_SUCCESS )
    {
        TCHAR achValue[] = { _T("WINXPSP3") };
        CString strExePath = _T("D:\\Test\\Hello.exe");
        lRet  = ::RegSetValueEx( hKey, strExePath, NULL, REG_SZ, (LPBYTE)&achValue, sizeof(achValue) );
        RegCloseKey( hKey );
    } 

诡异的dll(1)

昨天,和哥们一起调试程序。由于上线压力较大,他最近一直在狂改程序,但遇到了一个问题:

从PACS Server取影像时,怎么都取不回来。

首先排查了PACS Server设置,发现稍微有些问题,修改配置后,我以前写的一个测试程序,
就可以正常取回影像了。

但诡异的事情发生了,我写的程序,可以查,可以取,但他写的就是无法取回影像,只能查询。

吐血啊。

经过了一个小时的奋战,实在发现不了问题,他决定把无线网卡禁用后再测一下,
结果就通了~~

原来他取影像用的是一个dll,估计这个dll中,启用监听的时候,会自动选用某一块网卡,
但刚好选了无线网卡,悲剧啊。

能不能不要自作主张选网卡啊~~
能不能调试的时候,先把不需要的网卡禁用了啊~~

Win2008下调试Service程序

Win2008下调试Service程序时,发现无法使用DebugBreak(),否则程序直接挂掉,无法进行调试。

有资料说是,修改错误报告的选项就可以修正这个问题了,尝试后发现无效,暂时只能一点儿一点儿调试了。

另外,Win2008上内存检测严格了很多,需要注意。

Windows网络地址无法访问

最近遇到了Windows网络地址无法访问的问题,总结了一下,解决步骤如下:

表现为:
用localhost可以访问本机共享地址
但用网卡ip就不可以访问

1、开启对应的服务(Services.msc)
TCP/IP NetBios Helper
Computer Browser
Workstation
Server

2、网卡
对应的网卡-》Properties
启用Internet Protoclo Version 4
启用File and Printer Sharing for Microsoft Networks

对应的网卡-》Properties-》Networking-》Internet Protoclo Version 4-》Properties-》General->Advanced->WINS->NetBIOS Setting->Enable NetBIOS over TCP/IP

3、共享设置
控制面板Network and Sharing Center
-》Advanced sharing settings
-》(Home or Work/Public)
Trun on network discovery
Turn on file and printer sharing
Turn off Public folder sharing
Use 128-bit encryptiong to help …
Turn on password protected sharing…

4、防火墙
先关闭,尝试是否可以联通
如果可以通过的话,允许网络共享就可以解决问题

5、查看组策略,看下是否有端口禁用配置
如果有的话,禁用该策略

6、如果还不行,还原网卡配置

netsh interface ip reset log.txt

重启,会丢失全部网卡配置信息

Tomcat7安装为Windows Service

Tomcat7采用服务模式运行,主要靠两个EXE和一个BAT文件:
Tomcat7w.exe用于配置、监控服务
Tomcat7.exe用于服务的安装、卸载、更新、运行、停止等
service.bat提供了一些预设的脚本方便大家安装卸载服务

1、Tomcat7w.exe //XX//ServiceName

#服务配置界面
Tomcat7w //ES//ServiceName
#服务监控
Tomcat7w //MS//ServiceName

2、Tomcat7.exe //XX//ServiceName

#命令行运行服务
Tomcat7 //TS//ServiceName
#启动服务
Tomcat7 //RS//ServiceName
#关闭服务
Tomcat7 //SS//ServiceName
#更新服务参数
Tomcat7 //US//ServiceName
#安装服务
Tomcat7 //IS//ServiceName
#删除服务
Tomcat7 //DS//ServiceName

其他可用参数有:

ParameterName Default Description
–Description Service name description (maximum 1024 characters)
–DisplayName ServiceName Service display name
–Install procrun.exe //RS//ServiceName Install image
–Startup manual Service startup mode can be either auto or manual
++DependsOn List of services that this service depend on. Dependent services
are separated using either # or ; characters
++Environment List of environment variables that will be provided to the service
in the form key=value. They are separated using either
# or ; characters. If you need to use either the #
or ; character within a value then the entire value must be
enclosed inside single quotes.
–User User account used for running executable. It is used only for
StartMode java or exe and enables running applications
as service under account without LogonAsService privilege.
–Password Password for user account set by –User parameter
–JavaHome JAVA_HOME Set a different JAVA_HOME than defined by JAVA_HOME environment
variable
–Jvm auto Use either auto (i.e. find the JVM from the Windows registry)
or specify the full path to the jvm.dll.
You can use the environment variable expansion here.
++JvmOptions -Xrs List of options in the form of -D or -X that will be
passed to the JVM. The options are separated using either
# or ; characters. (Not used in exe mode.)
–Classpath Set the Java classpath. (Not used in exe mode.)
–JvmMs Initial memory pool size in MB. (Not used in exe mode.)
–JvmMx Maximum memory pool size in MB. (Not used in exe mode.)
–JvmSs Thread stack size in KB. (Not used in exe mode.)
–StartMode One of jvm, Java or exe. The modes are:

  • jvm – start Java in-process. Depends on jvm.dll, see –Jvm.
  • Java – same as exe, but automatically uses the default Java
    executable, i.e. %JAVA_HOME%\bin\java.exe. Make sure JAVA_HOME is set
    correctly, or use –JavaHome to provide the correct location.
    If neither is set, procrun will try to find the default JDK (not JRE)
    from the Windows registry.
  • exe – run the image as a separate process
–StartImage Executable that will be run. Only applies to exe mode.
–StartPath Working path for the start image executable.
–StartClass Main Class that contains the startup method. Applies to the jvm and
Java modes. (Not used in exe mode.)
–StartMethod main Method name if differs then main
++StartParams List of parameters that will be passed to either StartImage or
StartClass. Parameters are separated using either # or
; character.
–StopMode One of jvm, Java or exe. See –StartMode
for further details.
–StopImage Executable that will be run on Stop service signal. Only applies to
exe mode.
–StopPath Working path for the stop image executable. Does not apply to jvm
mode.
–StopClass Main Class that will be used on Stop service signal. Applies to the
jvm and Java modes.
–StopMethod main Method name if differs then main
++StopParams List of parameters that will be passed to either StopImage or
StopClass. Parameters are separated using either # or
; character.
–StopTimeout No Timeout Defines the timeout in seconds that procrun waits for service to
exit gracefully.
–LogPath %SystemRoot%\System32\LogFiles\Apache Defines the path for logging. Creates the directory if necessary.
–LogPrefix commons-daemon Defines the service log filename prefix. The log file is created in the
LogPath directory with .YEAR-MONTH-DAY.log suffix
–LogLevel Info Defines the logging level and can be either Error,
Info, Warn or Debug. (Case insensitive).
–StdOutput Redirected stdout filename.
If named auto then file is created inside LogPath with the
name service-stdout.YEAR-MONTH-DAY.log.
–StdError Redirected stderr filename.
If named auto then file is created inside LogPath with the
name service-stderr.YEAR-MONTH-DAY.log.
–PidFile Defines the file name for storing the running process id. Actual file is
created in the LogPath directory

3、service.bat安装卸载服务

service.bat install/uninstall/remove ServiceName

4、启动关闭服务

net start ServiceName
net stop ServiceName