2005年4月16日星期六

WinXP之后如何安装Win2000

这种方法只可应用于 FAT32 格式的硬盘上.

安装 Windows 2000

1) 用一张 Win98\Me 启动盘(支持光驱)启动你的电脑。
2) 将 Windows 2000 CD 放入你的光驱中。
3) 在 A: 提示符下输入 X:\I386\WINNT.EXE 这里 X: 是你的光驱盘符。
4) 下面开始安装 Windows 2000 到非 Windows XP 的安装分区中。
5) 安装完毕之后,在 Windows 2000 中重启电脑。

修复 Windows XP 引导信息

用你的 Windows XP CD 启动电脑。当到达 Setup or Repair(安装与修复)步骤时,选择修复。在修复控制台中,输入如下内容:

1) FIXBOOT, answer Yes
2) CD
3) ATTRIB -H NTLDR
4) ATTRIB -S NTLDR
5) ATTRIB -R NTLDR
6) ATTRIB -H NTDETECT.COM
7) ATTRIB -S NTDETECT.COM
8) ATTRIB -R NTDETECT.COM
9) COPY X:I386NTLDR C:
10) COPY X:I386NTDETECT.COM C:

X 是你光驱的盘符。

2005年4月15日星期五

精妙SQL语句

下面是我搜集的一些精妙的SQL语句。

说明:复制表(只复制结构,源表名:a 新表名:b)
SQL: select * into b from a where 1<>1

说明:拷贝表(拷贝数据,源表名:a 目标表名:b)
SQL: insert into b(a, b, c) select d,e,f from b;

说明:显示文章、提交人和最后回复时间
SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

说明:外连接查询(表名1:a 表名2:b)
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

说明:日程安排提前五分钟提醒
SQL:  select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

说明:两张关联表,删除主表中已经在副表中没有的信息
SQL: 
delete from info where not exists ( select * from infobz where info.infid=infobz.infid )

说明:四表联查问题:
SQL: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c  inner join d on a.a=d.d where .....

说明:得到表中最小的未使用的ID号
SQL:
SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID
FROM  Handle
WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)
 
COALESCE
返回其参数中第一个非空表达式。

语法
COALESCE ( expression [ ,...n ] )

2005年4月14日星期四

JSP的参数传递的乱码解决

本文解决了JSP的URL字符 encoding 问题:

如果通过 get/post 方式从 browser 返回的值中包含汉字信息, servlet 将无法得到正确的值。

解决方案

http://www.williamlong.info/index.jsp?value=你好

解决方案是用这种方案:

<%@ page contentType="text/html;charset=gb2312" %>
<html>
你好<%=new String(request.getParameter("value").getBytes("8859_1"),"gb2312")%>
</html>

2005年4月11日星期一

三种禁用FileSystemObject组件的方法

众所周知,FileSystemObject组件的强大功能及破坏性是它屡屡被免费主页提供商(那些支持ASP)的禁用的原因,我整理了一下,本来只找到两种方法,后来被某人一刺激,硬是想到第三种不为人所知的方法,呵呵,也不知道是不是这样的。

第一种:用RegSrv32 /u C:WINDOWSSYSTEMscrrun.dll(win98路径)来注销该组件。此方法过于狠毒,属于同归于尽的方法,大家都没得用,是下招

第二种:修改Progid的值,在ASP里调用组件的方式通常是 Set 对象名=Server. CreateObject("Progid"),这时候我们就可以通过修改注册表中的Progid值从达到禁用该组件的方法。在 开始-运行中敲入regedit,然后找到HKEY_CLASSES_ROO TScripting.FileSystemObject,这时候我们就可以更改该Progid的值了,如改成Scripting.FileSystemObject8。这样在ASP页里就这样调用了:

<%@ Language=Vbscript%>
<%
Set Fs=Server.CreateObject("Scripting.FileSystemObject8")
%>

(如果你前面没有调用过该组件的话,则无须重启,就可以看到效果了,否则请重启后看效果。)

这时候我们看看还是用原来的调用方法的结果:

<%@ Language=Vbscript%>
<%
Set Fs=Server.CreateObject("Scripting.FileSystemObject")
%>

这时候的运行结果为:
服务器对象 错误 'ASP 0177 : 800401f3'

Server.CreateObject 失败

/aspimage/testfile2.asp, 行3

800401f3

(OK,达到我们的要求)

该方法由于本人迟了两步,结果就让别人抢着回答了,这样极大的刺激了我,结果就产生了第三种方法。

第三种:细心的高手们会想,既然能通过修改Progid值来禁用该组件,那Clsid是否也可以来修改呢?(OK,你想得和我一样)我们知道,除了CreateObject方法以外,也可以使用一般的<object>标注建立一个组件,我们可以在ASP里面使用HTM L的<object>标注,以便在网页中加入一个组件。方法是:

<object runat=server id=fs1 scope=page progid="Scripting.FileSystemObject"></object>

Runat表示是在服务端执行,Scope表示组件的生命周期,可以选用Session,Appl ication或page(表示当前页面,也可缺省)

这种写法对我们没用,还有一种写法是:

<object runat=server id=fs1 scope=page classid="clsid:clsid的值"></object>

我们也可以通过修改该Clsid的值而禁用该组件,如将注册表中HKEY_CLASSES_RO OTScripting.FileSystemObjectCLSID的值0D43FE01-F093-11CF-8940-00A0C90 54228改成0D43FE01-F093-11CF-8940-00A0C9054229(改了最后面一位),这时候的写法为:

<object runat=server id=fs1 scope=page classid="clsid:0D43FE01-F093-11CF-8940-00A0C9054229"></object>

看运行结果,没问题,OK。这时候我们再用

<object runat=server id=fs1 scope=page classid="clsid:0D43FE01-F093-11CF-8940-00A0C9054228"></object>

这时候就出错了。(本文来源于网络论坛,原始作者不详)

2005年4月10日星期日

编写COM组件,将数据库链接的语句写成COM组件

打开VB,新建ActiveX Dll,将工程改名为COMConnection,类模块改名为class,在class的代码里写

Option Explicit


Public Function GetConn(m_objConn As Connection) As String
   
    On Error GoTo here
   
    Dim m_szConnstr As String
   
    m_szConnstr = "Provider=SQLOLEDB.1;Data Source=192.168.0.101;User ID=sa;Password=;Initial Catalog=aaa"
   
    m_objConn.Open m_szConnstr
   
    GetConn = "OK"
    Exit Function
   
here:
    GetConn = "open database is error.error id is " & err.Description

End Function


然后编译
Asp里这样用
<%
    dim obj,conn,msg
    set obj=server.create("COMConnection.class")
    set conn=server.create("adodb.connection")
    msg=obj.GetConn(conn)
    if msg="OK" then
        //这里写代码,conn已经打开数据库了
    else
        resposne.write msg   //出错了,显示出错信息
    end if
%>

2005年4月9日星期六

操作系统的十则高级应用技巧

下面介绍一下操作系统的十则高级应用技巧 :

1、安装WIN2K免输入序列号

  方法一:

  在安装WINDOWS2000的过程中要提示输入注册号,为了使安装更方便,可去处掉安装过程中需要输入注册号这个过程。把安装文件拷贝到硬盘,打开 i386目录下的setupp.ini,将PID后面的数字改成51837270,那么在整个安装过程中就不会再问你输入序列号了。  

  方法二:  

  将该文件内容全部删除后,再改写成如下资料:

  [Pid]

  id = "42144270"

 ExtraData=62706A776C7766637274CE52597B39

  2、利用应答文件安装的命令行格式

  利用软盘启动,使用winnt.exe实现无应答安装时:winnt.exe /u:d:setup.txt /s:d:i386 /t:c:

  进入操作系统,使用winnt32.exe安装新系统实现无应答安装时:winnt32.exe /u:d:setup.txt /s:d:i386 /tempdrive:c:

  利用光盘启动实现无应答安装:a、创建应答文件将其名字命名为winnt.sif,并将其相关文件放入一张软盘中或者将文件刻入Windows 2000/XP的安装光盘中的I386目录下。b、用2000光盘启动计算机,即可实现无应答的自动安装过程。安装时会自动调用软盘中或以刻光盘I386中的应答文件winnt.sif。

  /syspart:drive_letter

  表明可以将安装启动文件复制到一个硬盘上,并将硬盘标记为活动,然后将该磁盘安装到其他计算机上。启动该计算机时,它将自动启动下一阶段的安装。但必须始终同时使用/tempdrive参数和/syspart参数。在运行Windows NT 4.0、Windows 2000 或Windows XP的计算机上,可以使用/syspart选项来启动 Winnt32。运行Windows 95、Windows 98或Windows Me 的计算机不能使用该选项。这个参数只能在运行winnt32.exe时有效。

  特殊键名及作用:

  键名:Repartition

  键值:Yes No

  指定是否对客户端第一主盘进行重新分区和格式化(格式化为NTFS系统)。这只有在用Windows 2000光盘启动计算机进行无人参与安装时有效。

  键名:ExtendOemPartition

  键值:0 1

  允许安装中建立扩展分区   

  3、在Windows2000中如何维系统文件   

  如Windows 2000报告说你的系统文件被替换或者删除了该怎么办?这是个不时会出现的问题,你可以使用Windows 2000中自带的系统文件保护程序进行恢复.在Windows 2000中,SFC命令对维护整个系统文件是很有用的。具体的做法是:

  在"开始"/"运行"中,输入"SFC/scannow",对系统文件进行扫描并修复。

  SFC命令语句如下:

  SFC [/scannow] [/scanonce] [/scanboot] [/cancel] [/enable] [/purgecache] [/cachesize=x] [/quiet] 。其中:   

  /scannow   立即扫描所有受保护的系统文件。

  /scanonce    扫描所有受保护的系统文件一次。

  /scanboot    每次启动时扫描所有受保护的系统文件。

  /cancel     取消所有暂停的受保护系统文件的扫描。

  /enable     为正常操作启用 Windows 文件保护。

  /purgecache   清除文件缓存并立即扫描所有受保护的系统文件。

  /cachesize=x  设置文件缓存大小。

  /quiet     不提示用户就替换所有不正确的文件版本。

  你可以根据需要选择使用这些命令。

4、Windows 2000 中环境变量的妙用     

  安装Windows 2000 Professional版本,C盘仍然装的是Winodws 98,而Winodws 2000装在E盘上(应用软件是在Windows 98下安装的)。试着在不安装的情况下打开一些软件,结果发现,Visual FoxPro 6,VC++,WPS 2000等软件能够直接使用,WinZip8.0等软件输入注册号后也能使用,Photoshop等软件打开后弹出一系列对话框,显示如下信息:无法找到以下动态链接库PFPICK.dll与制定的路径:D Program FilesAdobePhotoshop5.0csWINNTSYSTEM32 WINNTSYSTEM WINNT WINNTsystem32Wbem 但一路单击"确定"之后,仍然能够打开。能不能不让这些对话框出现呢?这就涉及到Windows 2000的环境变量设置。

  虽然Windows 98在注册表中也有环境变量的设置,然而却没有Windows 2000这样容易修改。分析以上对话框的内容,第一个是软件安装路径,其余的是系统目录,最后一个是环境变量设置的路径。接着查找一下动态链接库文件PFPICK.dll位置,发现在系统目录下。 于是,打开控制面板,双击"系统",选择"高级"中的"环境变量",可以看到两个对话框,上面"Administrator的用户变量",设置了临时变量的目录,用来存放临时文件;下面是"系统变量",设置了一些系统参数,我们需要修改的就在这里的一个"Path"路径中,上面写着:% SystemRoot%system32 %SystemRoot% %SystemRoot%System32Wbem 我们只要在后面加上一些语句:"C WINDOWS C WINDOWSSYSTEM C WINDOWSSYSTEM32 ",然后重新启动计算机,双击Photoshp5.0c.exe时,你便会发现再也没有前面列举的那些对话框了。后来发现,其它一些软件,像ACDSee, foxmail,OICQ,sonique,Jet-audio等软件也可以直接使用,dreamweaver,firework,flash4, CuteFTP输入注册码后也能使用,而NetAnts则会弹出对话框,显示"msipcsv.exe无法定位程序,输入点 GetProcessFlags于动态链接库KERNEL32.dll上"。不管你按没按"确定"也能打开,因为你的系统并没有删除什么信息,所以你的操作系统仍然是安全的。   

  如果要删除NTFS分区,可用Windows 2000光盘启动计算机进入安装程序,删除所在分区即可,或使用fdisk,但fdisk不能删除扩展分区中的NTFS分区,可用如下debug法:

  debug

  A 10

  mov ax,0201

  mov bx,0100

  mov cx,0001

  mov dx,0080

  int 13

  int 20

  g=10

  F 2ce 2dd 00

  A 10

  mov ax,0301

  g=10

  Q

  (dug??郁闷ing~~~~~)

  6、如何删除WIN2000的默认管理共享(C$,D$等)?

  Win2000安装好以后,系统会创建一些隐藏的共享,你可以在cmd下打 net share 查看他们。网上有很多关于IPC入侵的文章,相信大家一定对它不陌生。要禁止这些共享 ,打开 管理工具>计算机管理>共享文件夹>共享 在相应的共享文件夹上按右键,点停止共享即可,不过机器重新启动后,这些共享又会重新开启的。

  如果您想禁止%DriveLetter%$的默认共享,您可以在注册表的以下位置

  HKEY_LOCAL_MACHINESystemCurrentControlSetServicesLanmanServerParameters

  新建名称:AutoShareServer

  类型: REG_DWORD

  值: 0

  如果您想禁止Admin$的默认共享,您可以在注册表的以下位置

  HKEY_LOCAL_MACHINESystemCurrentControlSetServicesLanmanServerParameters

  新建名称:AutoShareWks

  类型: REG_DWORD

  值: 0

  默认共享目录路径和功能:

  C$ D$ E$ 每个分区的根目录。Win2000 Pro版中,只有Administrator 和Backup Operators组成员才可连接,Win2000 Server版本Server Operatros组也可以连接到这些共享目录,ADMIN$ %SYSTEMROOT% 远程管理用的共享目录。它的路径永远都指向Win2000的安装路径,比如 c:winnt。

  FAX$ 在Win2000 Server中,FAX$在fax客户端发传真的时候会到。

  IPC$ 空连接。IPC$共享提供了登录到系统的能力。

  NetLogon 这个共享在Windows 2000 服务器的Net Login 服务在处理登陆域请求时用到

  PRINT$ %SYSTEMROOT%SYSTEM32SPOOLDRIVERS 用户远程管理打印机。

7、如何让WIN2000启动后直接进入VGA模式   

  在NT4.0的时候,安装操作系统之后,会出现VGA模式的启动菜单,而WIN2000却没有,可以在BOOT.INI文件中加入一个参数/BASEVIDEO即可,如下:   

  [boot loader]

  timeout=30

  default=multi(0)disk(0)rdisk(0)partition(1)WINNT

  [operating systems]

  multi(0)disk(0)rdisk(0)partition(1)WINNT="Microsoft Windows 2000 Server" /fastdetect/basevideo

  8、Windows 2000根目录下的那个Hiberfil.sys文件有什么用?这个文件大得可怕却又删不掉?

  你肯定在一定时期用了"电源管理"里面的休眠功能。其实不管是休眠,还是我们以前说的STD,原理都是一样的:在执行的时候把内存中的信息保存在这个文件当中,重新启动Windows 2000的时候再把它恢复回去,这个文件的大小就等于你的物理内存容量。一定要删除它的话,办法只有一个:取消休眠功能。

  9、解决小内存安装Windows 2000的问题

  如果内存小于64MB的机器上需要安装Windows2000,不过在默认状态下,你必需64MB的内存才能安装Windows 2000 Server,然而,可以绕过这一限制的。

  首先将Windows 2000 的I386安装目录复制到本地/网络驱动器上。编辑文件I386根目录下的TXTSETUP.SIF(扩展名是SIF哦!)文件。搜索 RequiredMemory。编辑此行,可以让您随意更改最低内存的多少,但是改动之前你一定要充分认识到您所做的一切后再作更改!eg: RequiredMemory=66584576。保存文件。 照常进行安装。 一切ok...(这种方法不适用于用winnt32.exe安装,而只适用于用winnt.exe安装。)

  10、微软的Windows 2000恢复控制台

  如果使用Windows2000的恢复控制台,管理员可以从命令对话访问2000系统,替换损坏的文件,开始和终止服务。安装时它会在开始菜单中添加一个选项。

  安装时应按如下操作:

  启动系统到WINDOWS2000

  插入安装CD

  从命令行中转到I386目录,键入:C:> winnt32 /cmdcons

  在出现的确认信息栏上点击"确定"

  文件将被复制到计算机,启动菜单中加入了新项目C:CMDCONSBOOTSECT.DAT="Microsoft Windows 2000 Command Console" /cmdcons

  完成信息栏出现,点击"确定"

  重新启动计算机,"Microsoft Windows 2000 Command Console"被选中,启动WINDOWS2000至命令行模式。

  系统会询问您所需修复的2000安装及其管理员密码。

  输入密码后便可键入命令,如通过键入DISABLE来终止服务、DISKPART来创建和删除分区等许多其它命令。只需键入HELP就可以列出所有命令的列表。

  还可以直接从安装光盘中击活控制台。从光盘启动系统(如果您的主板支持光驱启动),选择修复,并键入C就可以使用控制台进行修复了。

  如果您重新命名了管理员帐户,控制台仍可正常使用,除非您删除管理员帐号。但是修复控制台(Recovery Console)暂时无法在域里面工作。

2005年4月7日星期四

清除SQLSERVER数据库日志的方法

SQLSERVER的数据库日志占用很大的空间,下面提供三种方法用于清除无用的数据库日志文件。

清除SQLSERVER数据库日志文件的方法:

1、先将这个数据库卸载:
EXEC sp_detach_db 'database_name', 'true'
然后将该数据库所对应的Log文件删掉;
最后,再将这个数据库注册到系统里面:
EXEC sp_attach_db @dbname = N'database_name',
@filename1 = N'e:mssql7datadatabase_name_data.mdf'

2、数据库上点右键-所有任务-收缩数据库-选择收缩文件为LOG 。


3、清除SQLSERVER数据库日志的方法:

*******下面是转发的邮件*****

The shrinking of log files is not immediate in SQL Server 7.0. The
shrinking of log files does not occur until the active portion of the
log moves. As updates are performed on the database, the shrink
operation occurs at checkpoints or transaction log backups. Each log
file is marked with the target_percent for the shrink operation. Each
subsequent log backup or log truncation attempts to shrink the file to
bring its size as close to the target_percent as possible. Because a log
file can be shrunk only to a virtual log file boundary, it may not be
possible to shrink a log file to a size smaller than the size of a
virtual log file even if it is not being used. Please refer to SQL Book
Online for the details.

RESOLUTION

Below script will help to shrink the log file immediately, pls keep it
running for 3~4 minutes and then stop it manually.

* Run "select fileid, name,filename from ..sysfiles" to get
the fileid which you want to shrink *

use
go
dbcc shrinkfile(fileid,notruncate)
dbcc shrinkfile(fileid,truncateonly)
create table t1 (char1 char(4000))
go
declare @i int
select @i = 0
while (1 = 1)
begin
 while (@i < 100)
 begin
   insert into t1 values ('a') select @i = @i +1
 end
 truncate table t1
 backup log with truncate_only
end
go

*****转发内容结束*****