欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

installshield安装文件的制作小技巧

程序员文章站 2024-02-17 12:16:46
...

最近又一个项目接近尾声,不过对方要求安装必须傻瓜化,尽量不用手动配置。于是就的重新捡起两三年没有用过的installshield了。找到 installshield 12 于是,着手开始制作安装包。因为是网站项目,所以,其他方面倒是问题不大,因为当年用installshield 6.2的

最近又一个项目接近尾声,不过对方要求安装必须傻瓜化,尽量不用手动配置。于是就的重新捡起两三年没有用过的installshield了。找到 installshield 12 于是,着手开始制作安装包。因为是网站项目,所以,其他方面倒是问题不大,因为当年用installshield 6.2的时候,也是相当熟练的。最主要的有两个方面:一、数据库的安装,因为我的数据库里面有许多存储过程和初始数据,所以不想直接用script来初始化。于是就想直接在安装包中把数据库文件和日志文件打包,然后在安装时直接附加就行。二、修改web.config文件中的数据库连接字符串和一些相关的参数,比如一些路径相关的参数等等。



其中第一点经过摸索和总结,有两种方法:1、直接使用自定义的函数,声称sql语句,然后调用osql.exe来执行。

函数如下:

installshield安装文件的制作小技巧function number CreateDataBase(svSQLsvr,svSQLusr,svSQLpwd)
installshield安装文件的制作小技巧
STRING szCmdLine,szWaitTxt;
installshield安装文件的制作小技巧begin
installshield安装文件的制作小技巧szWaitTxt
=" 正在创建所需数据库installshield安装文件的制作小技巧.";
installshield安装文件的制作小技巧SdShowMsg (szWaitTxt,
TRUE);
installshield安装文件的制作小技巧Delay(
2);
installshield安装文件的制作小技巧
installshield安装文件的制作小技巧
if(g_bWinLogin) then
installshield安装文件的制作小技巧 szCmdLine
= "/E /S "+svSQLsvr+" /Q /"EXEC sp_attach_db @dbname = N'dlbj',@filename1 = N'"+TARGETDIR ^"mydb.MDF',@filename2 = N'"+TARGETDIR ^"dlbj_web_log.LDF'/"";
installshield安装文件的制作小技巧
else
installshield安装文件的制作小技巧 szCmdLine
= "/U "+svSQLusr+" /P "+svSQLpwd+" /S "+svSQLsvr+" /Q /"EXEC sp_attach_db @dbname = N'dlbj',@filename1 = N'"+TARGETDIR ^"dlbj_web.MDF',@filename2 = N'"+TARGETDIR ^"mydb_log.LDF'/"";
installshield安装文件的制作小技巧
endif;
installshield安装文件的制作小技巧
//szCmdLine = "/U "+svSQLusr+" /P "+svSQLpwd+" /S "+svSQLsvr+" /Q /"EXEC sp_attach_db @dbname = N'dlbj',@filename1 = N'"+TARGETDIR ^"dlbj_web.MDF',@filename2 = N'"+TARGETDIR ^"dlbmydb_log.LDF'/"";
installshield安装文件的制作小技巧

installshield安装文件的制作小技巧
if (LaunchAppAndWait("osql.exe", szCmdLine,WAIT) 0) then
installshield安装文件的制作小技巧MessageBox (
"数据库创建失败!请确您的系统中已安装 Microsoft SQL Server 2000. 如仍无法解决,请联系系统供应商!",SEVERE);
installshield安装文件的制作小技巧endif;
installshield安装文件的制作小技巧SdShowMsg (szWaitTxt,
FALSE);
installshield安装文件的制作小技巧szWaitTxt
=" 正在优化系统数据库installshield安装文件的制作小技巧.";
installshield安装文件的制作小技巧SdShowMsg (szWaitTxt,
TRUE);
installshield安装文件的制作小技巧Delay(
2);
installshield安装文件的制作小技巧szCmdLine
= "/U "+svSQLusr+" /P "+svSQLpwd+" /S "+svSQLsvr+" /Q /"use dlbj ; exec sp_updatestats/"";
installshield安装文件的制作小技巧
if (LaunchAppAndWait("osql.exe", szCmdLine,WAIT) 0) then
installshield安装文件的制作小技巧MessageBox (
"数据库优化失败!您可以在 sql查询分析器中执行 use dlbj ; exec sp_updatestats 完成!",SEVERE);
installshield安装文件的制作小技巧endif;
installshield安装文件的制作小技巧SdShowMsg (szWaitTxt,
FALSE);
installshield安装文件的制作小技巧
installshield安装文件的制作小技巧return
0;
installshield安装文件的制作小技巧
installshield安装文件的制作小技巧
end;

然后在OnEnd中执行如下代码:

installshield安装文件的制作小技巧if !MAINTENANCE then
installshield安装文件的制作小技巧
installshield安装文件的制作小技巧CreateDataBase(g_szServer,g_szUser,g_szPassword);
installshield安装文件的制作小技巧endif;

其中,g_szServer,g_szUser,g_szPassword分别为,在installshield中数据库设置界面(或者自定义窗口)中操作得到的服务器地址,用户名和密码。

2、直接在 安装设计视图中创建连接后,直接创建一个sqlscript,会在安装的时候直接执行。这样的话就的提前知道安装的位置(这是不可能的),于是就直接写成可替换的字符串,然后使用 text replacement 选项卡,设置替换项。其中,sqlscript如下:

installshield安装文件的制作小技巧 USE master;
installshield安装文件的制作小技巧
GO
installshield安装文件的制作小技巧
-- Drop database if it exists.
installshield安装文件的制作小技巧
IF EXISTS (SELECT name FROM sys.databases WHERE NAME = 'dmydb')
installshield安装文件的制作小技巧
DROP DATABASE dmydb;
installshield安装文件的制作小技巧
GO
installshield安装文件的制作小技巧
CREATE DATABASE dlbj ON PRIMARY
installshield安装文件的制作小技巧 (FILENAME
=
installshield安装文件的制作小技巧
'%TEXT_TO_BE_REPLACED_IN_THE_FILE%/dmydb.mdf')
installshield安装文件的制作小技巧
LOG ON (FILENAME =
installshield安装文件的制作小技巧
'%TEXT_TO_BE_REPLACED_IN_THE_FILE%/dmydb_log.LDF')
installshield安装文件的制作小技巧
FOR ATTACH;
installshield安装文件的制作小技巧
GO

其中:%TEXT_TO_BE_REPLACED_IN_THE_FILE% 是要替换为安装目录的字符串。

这里有个值得注意的地方,如果是installscript项目。那么,在text replacement 选项卡,替换后的内容不能直接设置为[INSTALLDIR]或者 [TARGETDIR],而是要同样设置为一个替换变量,如:,即就是,把:%TEXT_TO_BE_REPLACED_IN_THE_FILE% 替换为:,然后在 installscript 的 Dlg_SdAskDestPath2: 代码段中,执行如下语句即可。

TextSubSetValue ("", TARGETDIR , TRUE );

当时这里困扰我很长世界,最后还是上国外的网站上找到了解决方案。


对于第二点,则,直接使用函数:

installshield安装文件的制作小技巧function UpdateKey( svFilePath, svFindEntry, svNewEntry)
installshield安装文件的制作小技巧 NUMBER nResult, nvLineNumber;
installshield安装文件的制作小技巧
STRING WebConfigFile, svReturnLine;
installshield安装文件的制作小技巧
installshield安装文件的制作小技巧 begin
installshield安装文件的制作小技巧
// build the path to the Web.Config
installshield安装文件的制作小技巧 WebConfigFile
= svFilePath ^ "web.config";
installshield安装文件的制作小技巧
installshield安装文件的制作小技巧
// search the file for the key we specify
installshield安装文件的制作小技巧 nResult
= FileGrep( WebConfigFile, svFindEntry, svReturnLine, nvLineNumber, RESTART );
installshield安装文件的制作小技巧 switch(nResult)
installshield安装文件的制作小技巧
case 0:
installshield安装文件的制作小技巧
// Since this line normally appears twice in our web.config file, we're
installshield安装文件的制作小技巧
// checking for the existence of a 2nd match and updating it instead.
installshield安装文件的制作小技巧
// If there is no 2nd match, go ahead and update the one we find.
installshield安装文件的制作小技巧
if ( svFindEntry = "connectionString" ) then
installshield安装文件的制作小技巧 nResult
= FileGrep( WebConfigFile, svFindEntry , svReturnLine, nvLineNumber, CONTINUE );
installshield安装文件的制作小技巧
if ( nResult 0 ) then
installshield安装文件的制作小技巧 FileGrep( WebConfigFile, svFindEntry, svReturnLine, nvLineNumber, RESTART );
installshield安装文件的制作小技巧 endif;
installshield安装文件的制作小技巧 endif;
installshield安装文件的制作小技巧
installshield安装文件的制作小技巧
// once we find the key, update (replace) it with our new values
installshield安装文件的制作小技巧
if ( FileInsertLine( WebConfigFile, svNewEntry, nvLineNumber, REPLACE ) 0 ) then
installshield安装文件的制作小技巧
// hmmminstallshield安装文件的制作小技巧 we couldn't update the value of the key
installshield安装文件的制作小技巧
MessageBox( "Unable to update Web.Config file.", SEVERE );
installshield安装文件的制作小技巧 endif;
installshield安装文件的制作小技巧
case -2:
installshield安装文件的制作小技巧
// File Not Found
installshield安装文件的制作小技巧 MessageBox(
"Web.Config file not found.", SEVERE );
installshield安装文件的制作小技巧
case -4:
installshield安装文件的制作小技巧
// EOF reached
installshield安装文件的制作小技巧 MessageBox( svFindEntry
+ " key not found.", SEVERE );
installshield安装文件的制作小技巧 default:
installshield安装文件的制作小技巧
//unknown error
installshield安装文件的制作小技巧 MessageBox(
"An unknown error has occurred. The Web.Config file has NOT been updated.", SEVERE );
installshield安装文件的制作小技巧 endswitch;
installshield安装文件的制作小技巧
end;

即可。