PB的软件打安装包,最不好弄是注册表和数据库,以前一直用installshield 6.3,注册表和数据库要手动写script,很烦,经常出错,因为is不跟踪调用的外部程序,所以出错的时候没有容错处理,没有报错,客户生成数据库的时候不行,就是不行,不知道为什么不行
这个是installshield 6.3的时候生成数据库的方法
在function OnFirstUIBefore()里,添加两个对方框,第一个是SelectType,用来给客户选择是不是安装服务器程序,如果是安装服务器程序,进入第二个对方框Dlg_SdShowDlgEdit3,在这里要求用户输入安装数据库的机器名、用户名和密码
添加OnEnd函数生成数据库
//NNLL开始添加函数
function OnEnd()
string sztemp;
string szFileNa;
STRING szCmdLine,szWaitTxt;
begin
if !MAINTENANCE then //非维护性代码,即只在安装时执行
//修改ini文件
szFileNa = TARGETDIR + "\\config.ini";
sztemp = "LogPass = " + szMypa;
FileInsertLine (szFileNa, sztemp, 3, REPLACE);
sztemp = "ServerName = " + szMyse;
FileInsertLine (szFileNa, sztemp, 4, REPLACE);
sztemp = "LogId = " + szMyna;
FileInsertLine (szFileNa, sztemp, 5, REPLACE);
//修改nnll.sql
szFileNa = TARGETDIR + "\\mydata\\nnll.sql";
sztemp = "CREATE DATABASE [WLpalestra] ON (NAME = N'homelandj_Data', FILENAME = N'" + TARGETDIR + "\\mydata\\homelandj.MDF' , SIZE = 5, FILEGROWTH = 10%) LOG ON (NAME = N'homelandj_Log', FILENAME = N'" + TARGETDIR + "\\mydata\\homelandj_log.LDF' , FILEGROWTH = 10%)";
FileInsertLine (szFileNa, sztemp, 1, REPLACE);
sztemp = "FROM DISK = '" + TARGETDIR + "\\mydata\\nnll.bak'";
FileInsertLine (szFileNa, sztemp, 44, REPLACE);
//处理数据库
if bvType then
//MessageBox("服务器",INFORMATION);
szWaitTxt=" 正在创建"+@PRODUCT_NAME+"所需数据库....";
SdShowMsg (szWaitTxt, TRUE);
Delay(2);
//szCmdLine = "-U "+szMyna+" -P "+szMypa+" -S "+szMyse+" -Q \"exec sp_attach_db N'GBWZ' , N'"+TARGETDIR ^"\\wzgldata\\GBWZ_Data.mdf'\"";
szCmdLine = "-U "+szMyna+" -P "+szMypa+" -S "+szMyse+" -E -i \"" + TARGETDIR + "\\nnll.sql\"";
//MessageBox(szCmdLine,INFORMATION);
if (LaunchAppAndWait("osql.exe", szCmdLine,WAIT) < 0) then
MessageBox ("数据库创建失败!请确认您的系统中已安装 Microsoft SQL Server 2000.\n如仍无法解决,请联系系统供应商!",SEVERE);
endif;
endif;
endif;
end;
从红色的“//修改nnll.sql”开始就是生成数据库了,因为要生成数据库,所以要调用一个sql文件,这个sql文件我要copy到用户的机器上,我要把sql文件里面对应的生成数据库两个文件的路径替换,调用osql.exe执行sql文件生成数据库
这个方法很麻烦,对不对?
现在用installshield11.5,生成数据库很方便.
数据库的生成,三步:
1、写sql脚本,这个是肯定的啊,要写SQL脚本生成数据库的
2、设置进入Server Configuration->SQL Scripts,设置数据库连接和脚本信息
①右击SQL Scripts,New SQL Connection,添加数据库连接,如下图:
这里设置的Catalog Name、LoginID、password是默认的,在安装程序进行的时候,会生成这样的界面,用户可以自己修改:
这个界面相当于在installshield 6.3里的那个收集数据库信息的Dlg_SdShowDlgEdit3对话框,现在是由is自动生成的,由is自动生成的这个对话框的下一步,是用于检测数据库的连接状态的
②右击SQLConnection,Import script files,添加sql脚本,选择Text Replacement标签,在这里设置数据库的路径,如图:
这里的设置相当于在installshield 6.3里在OnEnd函数里的手工替换,这里我把“d:\”替换成“<TARGETDIR>\database\”,因为在sql脚本里,我写了把数据库的两个文件放在d:\,我现在想把数据库生成在用户安装目录下的database文件夹
3、修改脚本,添加安装方式,如果用户安装服务器端程序,生成数据库,如果用户安装的是客户端程序,跳过数据库的安装
//NNLL加入判断,安装的是服务器还是工作站
SelectType:
szMsg="请选择安装的计算机用于:" ;
bvCheck1 = TRUE;
bvCheck2 = FALSE;
bvType = TRUE;
nResult = AskOptions ( EXCLUSIVE , szMsg , "服务器" , bvCheck1 , "工作站" , bvCheck2 );
if (nResult = BACK) goto Dlg_SdLicense2;
if bvCheck2 = TRUE then
//工作站,注册表项server=0
bvType = FALSE;
else
//服务器,注册表项server=1
bvType = TRUE;
endif;
//NNLL修改完毕
if bvType = TRUE then
Dlg_SQLServer: //数据库连接
nResult = OnSQLServerInitialize( nResult );
if( nResult = BACK ) goto Dlg_SdFeatureTree;
Dlg_ObjDialogs: //测试数据库连接
nResult = ShowObjWizardPages( nResult );
if (nResult = BACK) goto Dlg_SQLServer;
endif;
看,installshield12就这样生成数据库了,比6.3容易很多很多很多,对不对?