轉:installshield安裝檔案的製作小技巧–附加資料庫

來源:互聯網
上載者:User

轉: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中基本和此類似。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.