首先了解一下,基本操作步骤:
运行SQL SERVER安装程序--安装 sql server 2000组件--安装数据库服务器--连续两次<下一步>--现在到了"安装选择"这一步,选择第三项"高级选项"--在<下一步>,在"高级选项"中选择第一项"记录无人值守.iss文件"
剩下的步骤按照正常安装SQL SERVER就步骤去做就可以了.
最后点击完成.
然后到 c:/winnt (win9x/me是c:/windows/)目录下,将:setup.iss文件复制出来,比如复制到c:/setup.iss,这一步很重要,一定要将setup.iss复制出来,否则,一运行sql server安装程序,你的setup.iss文件就会被重写.
这个setup.iss就是你的无人值守安装文件.你可以将它保存起来.使用方法:
在运行对话框执行:
x:/x86/setup/setupsql.exe -s -m -SMS -f1 "c:/setup.iss"
x:是指你的sql server安装光盘驱动器号
注意,这个安装过程不会有任何提示和窗口显示
你可以打开任务管理器,里面有个sqlstp的进程,这个就是sql server无人值守安装的进程,这个进程结束后,整个sql server的安装工作也就结束了.----------------------------------------------------------------------------------------------------------
知道了以上步骤,用编程实现就很容易,我这里是利用delphi来完成的。
首先保证得到那个setup.iss,接着代码如下:
//自动安装SQL Server procedure TForm1.btnStep5OKClick(Sender: TObject); var execCmd:String; execPara:String; begin //execCmd:='"'+txtSqlPath.Text; execCmd:='"D://Justsee//Project//SQL2000DEVELOPER//x86//setup//setupsql.exe"'; execPara:='-s -m -SMS -f1 "d://setup.iss"'; //execCmd:=execCmd+'/x86/setup/setupsql.exe -s -m -SMS -f1 "d:/setup.iss"'; ShellExecute(Handle, 'open', PChar(execCmd),PChar(execPara), nil, SW_HIDE); btnStep5OK.Enabled:=false; Timer1.Enabled:=true; //showmessage(execCmd); end; //监视自动安装进程,安装结束后提示 这里利用Timer控件监视进程结束后报告安装结束 procedure TForm1.Timer1Timer(Sender: TObject); begin functions.setTimeout(1500); if not(functions.FindProcess('sqlstp.exe')) then begin Timer1.Enabled:=false; functions.setTimeout(3000);//延时3秒 showmessage('自动安装SQL完成,必须重启后才能生效!'); end; end; //这个要use TLHelp32 function FindProcess(AFileName:string):boolean;//检测进程是否存在 var hSnapshot:THandle;//用于获得进程列表 lppe:TProcessEntry32;//用于查找进程 Found:Boolean;//用于判断进程遍历是否完成 begin Result:=False; hSnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获得系统进程列表 lppe.dwSize:=SizeOf(TProcessEntry32);//在调用Process32First API之前,需要初始化lppe记录的大小 Found:=Process32First(hSnapshot,lppe);//将进程列表的第一个进程信息读入ppe记录中 while Found do begin if((UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(AFileName)) or(UpperCase(lppe.szExeFile)=UpperCase(AFileName))) then begin Result:=True; end; Found:=Process32Next(hSnapshot,lppe);//将进程列表的下一个进程信息读入lppe记录中 end; end;