szTitle = ""; szMsg1 = ""; szMsg2 = ""; szOpt1 = ""; szOpt2 = ""; bvOpt1 = FALSE; bvOpt2 = FALSE; // Set this to true if you have the update service enabled, and if you want to check for updates. // Note: the ISUS Starter Edition does not support checking for updates programatically. So, // only set this to true if you have at least the ISUS Professional Edition. bShowUpdateServiceDlg = FALSE;
//{{IS_SCRIPT_TAG(Dlg_SdDinishEx)
if ( BATCH_INSTALL ) then SdFinishReboot ( szTitle , szMsg1 , SYS_BOOTMACHINE , szMsg2 , 0 ); else
// If the update service is enabled, show finish dialog that includes // update check option. if( bShowUpdateServiceDlg && ( ENABLED_ISERVICES & SERVICE_ISUPDATE ) ) then if( SdFinishUpdateEx( szTitle, szMsg1, szMsg2, szOpt1, szOpt2, TRUE ) ) then // Don't check for updates in silent mode. if( MODE != SILENTMODE ) then UpdateServiceCheckForUpdates( "", FALSE ); endif; endif; else SdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bvOpt1 , bvOpt2 ); endif; endif; //}}IS_SCRIPT_TAG(Dlg_SdDinishEx) end;
sqlrun.cab
setup.ell
sqlrun01.msi
instmsi.exe
setup.exe
sqlresld.dll
(win200 可能需要semnt.dll)
2、新建一配置文件
例;a.ini
[Options]
TARGETDIR="C:\Program Files\Microsoft SQL Server\MSSQL\Binn\"
DATADIR="C:\Program Files\Microsoft SQL Server\MSSQl\Data\"
INSTANCENAME="实例名"
SAPASSWORD="密码"
SECURITYMODE=SQL
说明:
TARGETDIR 安装目录
DATADIR 数据库安装目录,在该目录下应该有master,msdb,tempdb,model数据库(8个文件),如果是新环境,可能需要将这几个文件打包到安装包,嗯,安装文件现的大一些,cool一些,嘿嘿(符合微软作风)
SAPASSWORD设置密码,但这个密码好像没用,安装之后再通过sqldmo改(加密?)
SECURITYMODE=SQL一定要,否则不能用查询分析器连接
3、命令
安装setup.exe /i sqlrun01.msi /settings a.ini /l log.log
卸载setup.exe /x sqlrun01.msi
4、备注
如果是win2000,要将semnt.dll提前装到TARGETDIR\mssql$‘实例’\binn下
文件都可以在sqlserver安装盘上找到,如果不清楚可以问我
一共可以安装16个实例,相应的用sqlrunXX。msi,
如果不想装客户端连接工具,请再加上两了dll:DBNMPNTW.DLL;ntwdblib.DLL
或使用MSDE:
msde可以很容易的和自己的程序发布。
msde在sql server的msde目录中
主要有两种方法,
简单方法是使用setup.exe,复杂方法是实用\msde\msm下的合并模块,可以将其无缝的集成到自己的msi安装程序里,不过很麻烦。
第一种方法主要是设置setup.ini和setup.exe的命令行参数。
例如:
1 [Options]
2 TARGETDIR="D:\Setup\msde\binn"
3 DATADIR="D:\Setup\msde\data"
4 INSTANCENAME="我的实例名称"
5 SECURITYMODE="SQL"
6 USEDEFAULTSAPWD
注意:
4 安装命名实例可以避免和用户计算机上可能存在的sql server发生冲突
5 验证模式为混合模式
6 sa密码为空
使用:F:\MSDE\SETUP /i F:\MSDE\setup\sqlrunXX.msi
就可以删除其他15个 sqlrunXX.msi了
STRING szTitle, szMsg1, szMsg2, szOpt1, szOpt2;
NUMBER bvOpt1, bvOpt2;
NUMBER bShowUpdateServiceDlg;
STRING szWaitText;
STRING szServiceName;
NUMBER svServiceState;
STRING szMsde2000, szCmdLine,szStartServiceArgs;
begin
// 如果安装程序以“维护”模式启动
if (MAINTENANCE) then
goto EndProcess;
endif; // 检查系统是否安装了 MSDE 2000 SP4
szWaitText = "正在检查系统是否安装了 MSDE2000 SP4 …….";
SdShowMsg( szWaitText, TRUE);
szServiceName = "MSSQLSERVER";
if(ServiceGetServiceState(szServiceName, svServiceState) < ISERR_SUCCESS) then
// 没有安装 MSDE,转安装处理
goto InstallMSDE;
endif;
goto StartMSDE;
InstallMSDE: // 安装数据库服务
szWaitText = "正在安装 MSDE2000 SP4。这个过程需要几分钟,请稍等";
SdShowMsg(szWaitText, TRUE);
szMsde2000 = SRCDIR ^ "MSDE" ^ "setup.exe";
// 将 MSDE 2000 SP4 安装到系统 Program File 目录下
szCmdLine = "TARGETDIR=\"" + PROGRAMFILES + "\" /q";
if(LaunchAppAndWait(szMsde2000, szCmdLine, LAAW_OPTION_WAIT|LAAW_OPTION_MAXIMIZED) < 0 ) then
MessageBox ("安装 MSDE2000 SP4 失败,请联系系统管理员!", SEVERE);
goto EndProcess;
endif;StartMSDE: // 启动 MSDE2000 服务
szWaitText = "正在启动 MSDE2000 SP4 …….";
SdShowMsg( szWaitText, TRUE);
// 安装了 MSDE 2000, 试着启动服务
szStartServiceArgs = "";
if(svServiceState != SERVICE_RUNNING) then
if (ServiceStartService (szServiceName, szStartServiceArgs) < ISERR_SUCCESS ) then
MessageBox ("启动服务" + szServiceName + "出错。", SEVERE);
goto EndProcess;
endif;
endif; // 加载用户数据库
szWaitText = "正在创建所需数据库.";
SdShowMsg(szWaitText, TRUE);
Delay(2);
// 先试着分离先前已经加载的数据库
szCmdLine = "-E -Q \"exec exec sp_detach_db mytest \""; //*****
if(LaunchAppAndWait("osql.exe ", szCmdLine, LAAW_OPTION_WAIT|LAAW_OPTION_HIDDEN) < 0) then
MessageBox ("分离原来的数据库失败!请确认系统中已安装 MSDE 2000 SP4 并且服务已启动。\n如问题仍无法解决,请与联系统管理员联系!", SEVERE);
endif;
// 将数据文件复制到程序安装目录
CreateDir( TARGETDIR ^ "Data");
CopyFile( SRCDIR ^ "Data" ^ "mytest_Data.mdf", TARGETDIR ^ "Data" ^ "mytest_Data.mdf"); //*****
CopyFile( SRCDIR ^ "Data" ^ "mytest_Log.ldf", TARGETDIR ^ "Data" ^ "mytest_Log.ldf"); //*****
// 附加数据库
szCmdLine = "-E -Q \"exec sp_attach_db 'mytest', '"+ TARGETDIR ^ "Data" ^ "mytest_Data.mdf', '" + TARGETDIR ^ "Data" ^ "mytest_Log.ldf' \""; //*****
if (LaunchAppAndWait("osql.exe ", szCmdLine, LAAW_OPTION_WAIT|LAAW_OPTION_HIDDEN) < 0) then
MessageBox ("数据库创建失败!请确认系统中已安装 MSDE 2000 SP4 并且服务已启动。\n如问题仍无法解决,请与联系统管理员联系!", SEVERE);
endif;
SdShowMsg(szWaitText, FALSE);
EndProcess:
// 以下代码是系统自动插入的
ShowObjWizardPages(NEXT);
szTitle = "";
szMsg1 = "";
szMsg2 = "";
szOpt1 = "";
szOpt2 = "";
bvOpt1 = FALSE;
bvOpt2 = FALSE; // Set this to true if you have the update service enabled, and if you want to check for updates.
// Note: the ISUS Starter Edition does not support checking for updates programatically. So,
// only set this to true if you have at least the ISUS Professional Edition.
bShowUpdateServiceDlg = FALSE;
//{{IS_SCRIPT_TAG(Dlg_SdDinishEx)
if ( BATCH_INSTALL ) then
SdFinishReboot ( szTitle , szMsg1 , SYS_BOOTMACHINE , szMsg2 , 0 );
else
// If the update service is enabled, show finish dialog that includes
// update check option.
if( bShowUpdateServiceDlg && ( ENABLED_ISERVICES & SERVICE_ISUPDATE ) ) then if( SdFinishUpdateEx( szTitle, szMsg1, szMsg2, szOpt1, szOpt2, TRUE ) ) then // Don't check for updates in silent mode.
if( MODE != SILENTMODE ) then
UpdateServiceCheckForUpdates( "", FALSE );
endif; endif; else
SdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bvOpt1 , bvOpt2 );
endif; endif;
//}}IS_SCRIPT_TAG(Dlg_SdDinishEx)
end;