转:installshield安装文件的制作小技巧--附加数据库

转:http://www.cnblogs.com/culturenet/archive/2006/12/19/596930.html 

转:http://www.cnblogs.com/neilvension/archive/2006/12/20/597806.html

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



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

函数如下:

function  number CreateDataBase(svSQLsvr,svSQLusr,svSQLpwd) 
STRING  szCmdLine,szWaitTxt; 
begin 
szWaitTxt
= "  正在创建所需数据库. "
SdShowMsg (szWaitTxt, 
TRUE ); 
Delay(
2 ); 

 
if (g_bWinLogin)  then
    szCmdLine 
=   " /E  /S  " + svSQLsvr + "  /Q / " EXEC  sp_attach_db  @dbname   =   N ' dlbj',@filename1  = N'"+TARGETDIR ^"mydb.MDF',@filename2  = N'"+TARGETDIR ^"dlbj_web_log.LDF'/""; 
  else
   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'/""; 
 endif; 
// 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'/""; 

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

return 
0

end

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

if  !MAINTENANCE  then

CreateDataBase(g_szServer,g_szUser,g_szPassword);
endif;

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

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

  USE  master; 
 
GO
--  Drop database if it exists. 
IF   EXISTS  ( SELECT  name  FROM  sys.databases  WHERE  NAME  =   ' dmydb '
   
DROP   DATABASE  dmydb; 
GO
CREATE   DATABASE  dlbj  ON   PRIMARY  
   (FILENAME 
=  
      
' %TEXT_TO_BE_REPLACED_IN_THE_FILE%/dmydb.mdf ' )
   
LOG   ON  (FILENAME  =  
      
' %TEXT_TO_BE_REPLACED_IN_THE_FILE%/dmydb_log.LDF ' )
   
FOR  ATTACH;
GO

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

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

TextSubSetValue ("<USER_DATA>", TARGETDIR , TRUE );

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


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

function  UpdateKey( svFilePath, svFindEntry, svNewEntry)
 NUMBER nResult, nvLineNumber;
 
STRING  WebConfigFile, svReturnLine;

 begin
  
//  build the path  to  the Web.Config     
  WebConfigFile 
=  svFilePath  ^   " web.config " ;

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

即可。

我自定义的简单 skin.


转:http://www.cnblogs.com/nathan-liu/archive/2006/09/13/502655.html

创建安装程序的时候我们免不了要向SQL Server服务器中创建数据库。一般情况下,InstallShield 和 Wise 会让我们导入创建数据库的SQL文本,只是这种方式有时候不太方便,以下的例子我们将使用这两种工具安装自SQL Server分离出来的MDF文件来达到我们的需求。

InstallShield X:
--------------------------
在Installation Designer -> Server Configuration -> SQL script........s 中创建一个新的"SQL Connection",然后再在该连接下创建一个"New script........",编辑script........,在脚本框中输入:
-- =============================================
-- Create database for attach
-- =============================================
CREATE DATABASE REC2005_Test
ON PRIMARY (FILENAME = 'c:/dir/test.mdf')
FOR ATTACH
GO
接着在 Text Replacement 中添加一个替换将"c:/dir"替换为"[INSTALLDIR]"即可。当然,上面的例子可能会根据实际情况做些修改,我就不啰嗦了。而在Wise中基本和此类似。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值