如何實作 SQL Server 2000 桌面引擎回呼函式和範例

文章翻譯 文章翻譯
文章編號: 315463 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
全部展開 | 全部摺疊

在此頁中

結論

本文將告訴您如何實作回呼函式的 SQL Server 2000 桌面引擎 (MSDE 2000) 安裝期間,並且也將告訴您必須符合以確定回呼函式會正確執行的所有條件。

SQL Server 2000 桌面引擎 (MSDE 2000) 是在 Microsoft SQL Server 2000 關聯式資料庫引擎的可轉散發版本。它允許應用程式的安裝程序的一部份安裝引擎使用 SQL Server 關聯式資料庫引擎的應用程式。

MSDE 2000 安裝套件可以讓您使用回呼函式,來追蹤進度,或在安裝期間執行自訂動作。

使用回呼函式的條件

正常執行回呼函式必須符合下列條件:
  • 您必須實作回呼函式為 Windows 安裝程式自訂動作類型 1 動態連結程式庫 (DLL)。比方說您可以使用 Microsoft Visual C++ 延伸預存程序精靈來建立回撥的 DLL。

    如需有關 Windows 「 安裝程式庫類型的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
    http://msdn.microsoft.com/library/en-us/msi/cact_6a05.asp?frame=true
  • 回呼函式必須存放在任何一種下列資料夾:
    • 會傳回該資料夾由 GetTempPath Win32 呼叫。
    • 存在於資料夾,則會傳回 {Product code} 資料夾由 GetTempPath Win32 呼叫。

      附註{Product code} 是產品代碼,您的電腦安裝 MSDE 2000 執行個體的預留位置。
    通常,資料夾,則會傳回由 GetTempPath Win32 呼叫是 %TMP 環境變數。如果 %TMP 環境變數不是可用的則 %TEMP % 環境變數。

    如需有關 GetTempPath Win32 函式的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
    http://msdn.microsoft.com/library/en-us/fileio/base/gettemppath.asp

  • 桌面引擎回呼函式,必須採取額外的 UINT 參數包含桌面引擎結束程式碼或傳回碼。 回呼函式的定義看起來類似
    UINT __stdcall MyCallbackFunction(MSIHANDLE hinstall, UINT uExitCode)
    						
    uExitCode 其中包含桌面引擎安裝程式的結束代碼,或傳回程式碼。

範例步驟和程式碼來實作回呼函式

下列步驟描述使用 Microsoft Visual Studio 6.0 範例回呼函式的實作。

  1. Microsoft Visual C++ 6.0 IDE 中,按一下 [檔案],然後按一下 [新增]。在 [專案] 索引標籤上按一下 [延伸預存程序精靈]。
  2. 指定專案名稱。為了讓範例為 MyCallback。您也可以指定您想要建立專案的位置。按一下 [確定]
  3. 指定回呼函式的名稱。為了讓範例為 MyCallbackFunction。請注意範例會使用延伸預存程序精靈,在建立回撥的 DLL。精靈會建議您指定啟動 XP_ 」 的名稱。但是,您可以忽略建議,並指定您所選擇的回呼函式名稱。按一下 [完成]。
  4. 這將會建立類別和所需的 cpp 檔案。在 [工作區] 窗格中您會看到這個專案的工作區。選取 ClassView,然後再展開 MyCallback 類別 樹狀目錄中的 [全域] 資料夾。那里將會看到 MyCallbackFunction 函式的定義。

    下列 範例程式碼 標題處於回呼函式程式碼範例。您可以將下列程式碼複製到 MyCallbackFunction 函式來測試專案。

    範例程式碼

    #include <stdafx.h>
    
    #define XP_NOERROR 0
    #define XP_ERROR 1
    #define MAXCOLNAME 25
    #define MAXNAME 25
    #define MAXTEXT 255
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    UINT __declspec(dllexport) MyCallbackFunction(HANDLE hinstall, UINT uExitCode);
    
    #ifdef __cplusplus
    }
    #endif
    
    UINT __declspec(dllexport) MyCallbackFunction(HANDLE hinstall, UINT uExitCode)
    {
    
         TCHAR buffer[1024];
    
         wsprintf(buffer, TEXT("**Callback** Return code is %d"), uExitCode);
    
         MessageBox(NULL, buffer, TEXT("MyCallbackFunction Dialog"), MB_OK);
    
         return 0;
    }
    					
    這個回呼函式範例將顯示訊息方塊與此文字在每一次呼叫:
    **Callback** Return code is 0
    					
  5. 使用 [建置] 功能表中,以建立 MyCallback.dll 檔案。DLL 是建置和儲存到名為 偵錯,在您在步驟 2 中指定的相同位置的子資料夾。
  6. 在建置 DLL 之後您必須將 DLL 複製到您的電腦安裝 MSDE 2000 的版本而定的位置。
    • 如果您使用的 Microsoft SQL Server 2000 桌面引擎 SP2,您必須將 DLL 複製到由下列環境變數的其中一個定義的位置中:
      • %TMP %
      • %
      若要取得環境負責目前登入使用者的特定電腦上的變數值,請在命令提示字元中輸入下列命令:
      SET
      這個命令會顯示所有環境變數,包括 TMPTEMP
    • 如果您使用的 Microsoft SQL Server 2000 桌面引擎 SP3a,您必須將 DLL 複製到下列位置其中之一:
      • %TMP%\ {Product code}
      • %TEMP%\ {Product code}
      附註{Product code} 是產品代碼,您的電腦安裝 MSDE 2000 執行個體的預留位置。

      例如如果 MSDE 2000 執行個體的 E09B48B5-E141-427A-AB0C-D3605127224A 產品代碼必須複製到 DLL %TMP%\{E09B48B5-E141-427A-AB0C-D3605127224A}%TEMP%\{E09B48B5-E141-427A-AB0C-D3605127224A} 資料夾。
  7. 使用桌面引擎 Windows Installer 回撥選項,在安裝期間叫用回呼函式。例如:
    CALLBACK=Dllname!CallbackFunctionName
    的語法是這個範例:
    setup.exe /L*v c:\msde_setup.log CALLBACK=MyCallback!MyCallbackFunction
    					

?考

如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
299795如何撰寫與 Microsoft Visual Studio 安裝程式 1.1 的 MSDE 2000 安裝程式套件


Windows Installer SDK 是一部份的 「 Microsoft 平台軟體開發套件 (SDK)。如需有關平台 SDK 的詳細資訊,請造訪下列 Microsoft 網站]:
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
SQL Server 2000 線上叢書 》 ; 主題: < 建置 SQL Server 應用程式"; 」 發佈 SQL 伺服器應用程式"; 應用 」 發佈 SQL Server 與程式 > ; 「 桌面引擎 Windows 安裝程式傳回代碼";"桌面引擎 Windows Installer 回撥函數"

屬性

文章編號: 315463 - 上次校閱: 2013年10月24日 - 版次: 3.0
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Desktop Engine (MSDE) SP3a
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
關鍵字:?
kbnosurvey kbarchive kbmt kbhowtomaster KB315463 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:315463
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com