逐步解說:使用自訂動作在安裝時預先編譯組件

更新:2007 年 11 月

[自訂動作編輯器] 讓您在安裝結束時,能夠指定在目標電腦上要執行的其他動作。例如,在這個逐步解說中,將 DLL 的路徑名稱傳遞至 CustomActionData 屬性,以在安裝期間將組件預先編譯為機器碼。

注意事項:

根據目前使用的設定與版本,您所看到的對話方塊與功能表命令可能會與 [說明] 中所描述的不同。若要變更設定,請從 [工具] 功能表中選擇 [匯入和匯出設定]。如需詳細資訊,請參閱 Visual Studio 設定

注意事項:

下列說明將示範如何使用 Visual Basic 專案建立部署專案;一般原則會套用至支援部署 Windows 應用程式的所有 Visual Studio 語言專案。

若要建立自訂動作類別

  1. 在 [檔案] 功能表上,按一下 [新增專案]。

  2. 在 [新增專案] 對話方塊,選取 [專案類型] 窗格中的 [Visual Basic 專案],然後選擇 [範本] 窗格中的 [類別庫]。在 [名稱] 方塊中輸入 InstallClass。

  3. 在 [專案] 功能表中選擇 [加入新項目]。

  4. 在 [加入新項目] 對話方塊中選擇 [安裝程式類別]。在 [名稱] 方塊中輸入 InstallClass.vb。按一下 [加入] 以將類別加入至專案。

若要新增程式碼至自訂動作

  1. 以滑鼠右鍵按一下 [方案總管] (或設計介面) 的 InstallClass.vb,然後按一下 [檢視程式碼] 以開啟 [程式碼編輯器]。將下列程式碼加入模組最上方中,在 Imports System.Configuration.Install 下:

    Imports System.Runtime.InteropServices
    Imports System.Text
    
  2. 在 InstallClass.vb 中,將下列宣告加入至 Public Class InstallClass 下方:

    Private Declare Function GetCORSystemDirectory Lib "mscoree.dll" _
      (<Runtime.InteropServices.MarshalAs( _
      System.Runtime.InteropServices.UnmanagedType.LPWStr)> _
      ByVal Buffer As System.Text.StringBuilder, _
      ByVal BufferLength As Integer, ByRef Length As Integer) As Integer
    
  3. 在 InstallClass.vb 中,於 MyBase.New 的 End Sub 陳述式後面,加入下列程序以覆寫基底類別的 Install 程序:

    <Security.Permissions.SecurityPermission(Security.Permissions.SecurityAction.Demand)> _
    Public Overrides Sub Install(ByVal savedState As _
      System.Collections.IDictionary)
    
       MyBase.Install(savedState)
       Dim Args As String = Me.Context.Parameters.Item("Args")
    
       If Args = "" Then
          Throw New InstallException("No arguments specified")
       End If
    
       ' Gets the path to the Framework directory.
       Dim Path As New System.Text.StringBuilder(1024)
       Dim Size As Integer
       GetCORSystemDirectory(Path, Path.Capacity, Size)
    
       Dim P As Process
       ' Quotes the arguments, in case they have a space in them.
       Dim Si As New ProcessStartInfo(Path.ToString() & "ngen.exe", Chr(34) _
         & Args & Chr(34))
       Si.WindowStyle = ProcessWindowStyle.Hidden
       Try
          P = Process.Start(Si)
          P.WaitForExit()
       Catch e As Exception
          Throw New InstallException(e.Message)
       End Try
    End Sub
    

若要加入部署專案

  1. 在 [檔案] 功能表上選擇 [加入],然後按一下 [新增專案]。

  2. 在 [加入新的專案] 對話方塊的 [專案類型] 窗格中選取 [安裝和部署專案],再從 [範本] 窗格中選擇 [安裝專案]。在 [名稱] 方塊中輸入 InstallClass Installer。

  3. 在 [屬性] 視窗內選取 [ProductName] 屬性,然後輸入 InstallClass。

  4. 在 [檔案系統編輯器] 中選取 [應用程式資料夾]。在 [動作] 功能表上選擇 [加入],然後按一下 [專案輸出]。

  5. 在 [加入專案輸出群組] 對話方塊中選取 InstallClass 專案的主要輸出,再按一下 [確定] 關閉對話方塊。

若要加入自訂動作

  1. 在 [方案總管] 中選取 [InstallClass Installer] 專案。在 [檢視] 功能表中指向 [編輯器],然後按一下 [自訂動作]。

  2. 在 [自訂動作編輯器] 中選取 [自訂動作] 節點。在 [動作] 功能表上選擇 [加入自訂動作]。

  3. 在 [選取專案中項目] 對話方塊中按兩下 [應用程式資料夾],再選取 [來自 InstallClass 的主要輸出 (作用中)]。按一下 [確定] 將 InstallClass 自訂動作加入至全部的四個自訂動作節點中。

  4. 選擇 [安裝] 節點下的 [來自 InstallClass 的主要輸出 (作用中)] 節點。

  5. 在 [屬性] 視窗中選取 [CustomActionData] 屬性,並輸入 /Args="[TARGETDIR]InstallClass.dll"。括上引號。

  6. 對其他三個 [來自 InstallClass 的主要輸出 (作用中)] 的執行個體重複這些步驟。

  7. 在 [建置] 功能表上選擇 [建置 InstallClass Installer]。

若要在您的開發電腦上安裝

  • 在 [方案總管] 中選取 [InstallClass Installer] 專案。在 [專案] 功能表中選擇 [安裝]。

    注意事項:

    您必須具有這部電腦的安裝使用權限才能執行安裝程式。

若要部署至其他電腦

  1. 在 [Windows 檔案總管] 裡,巡覽至您的專案目錄,然後找出所建置的安裝程式。預設路徑是 \Documents and Settings\yourloginname\My Documents\Visual Studio 2005\Projects\Solution Folder Name\My Notepad Installer\project configuration\My Notepad Installer.msi。預設 project configuration 是 [Debug] 或 [Release]。

  2. 將目錄中的 InstallClass Installer.msi、Setup.exe 和所有其他檔案及子目錄複製到另一部電腦中。

    注意事項:

    若要在網路之外的電腦上安裝,請將檔案複製到 CD-ROM 之類的傳統媒體。

  3. 在目標電腦上按兩下 Setup.exe,執行安裝程式。

    注意事項:

    您必須具有這部電腦的安裝使用權限才能執行安裝程式。

若要測試安裝

  • 巡覽至組件資料夾 %windir%\assembly (例如,C:\Windows\assembly),然後尋找 InstallClass。在 [類型] 資料行中,其類型應標示為 [原生映像]。

若要解除安裝應用程式

  1. 在 Windows [控制台] 中按兩下 [新增或移除程式]。

  2. 在 [新增或移除程式] 對話方塊中選取 [InstallClass Installer],按一下 [移除],再按 [確定] 關閉對話方塊。

    秘訣

    若要從開發電腦進行解除安裝,請在 [專案] 功能表中選擇 [解除安裝]。

請參閱

概念

將 MSIL 編譯成機器碼

參考

CustomActionData 屬性

原生映像產生器 (Ngen.exe)

其他資源

部署中的自訂動作管理