演练:安装时使用自定义操作对程序集进行预编译

更新: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 安装程序”。

  3. 在“属性”窗口中,选择“ProductName”属性并键入 InstallClass。

  4. 在“文件系统编辑器”中,选择“应用程序文件夹”。在“操作”菜单上选择“添加”,然后单击“项目输出”。

  5. 在“添加项目输出组”对话框中为 InstallClass 项目选择主输出,然后单击“确定”关闭对话框。

添加自定义操作

  1. 在“解决方案资源管理器”中选择“InstallClass 安装程序”项目。在“视图”菜单上指向“编辑器”,然后单击“自定义操作”。

  2. 在“自定义操作编辑器”中,选择“自定义操作”节点。在“操作”菜单上选择“添加自定义操作”。

  3. 在“选择项目中的项”对话框中,双击“应用程序文件夹”,然后选择“主输出来自 InstallClass (活动)”。单击“确定”将 InstallClass 自定义操作添加到全部四个自定义操作节点。

  4. 选择“安装”节点下的“主输出来自 InstallClass (活动)”节点。

  5. 在“属性”窗口中,选择“CustomActionData”属性并键入 /Args="[TARGETDIR]InstallClass.dll"。请在键入内容中包括引号。

  6. 为“主输出来自 InstallClass (活动)”的其他三个实例分别重复上述步骤。

  7. 在“生成”菜单上选择“生成 InstallClass 安装程序”。

在开发计算机上安装

  • 在“解决方案资源管理器”中选择“InstallClass 安装程序”项目。在“项目”菜单上选择“安装”。

    说明:

    您必须在计算机上拥有安装权限才能运行该安装程序。

部署到其他计算机

  1. 在“Windows 资源管理器”中,定位到项目目录并找到生成的安装程序。默认路径将为 \Documents and Settings\您的登录名\My Documents\Visual Studio 2005\Projects\解决方案文件夹名\My Notepad Installer\项目配置\My Notepad Installer.msi。默认项目配置为“调试”或“发布”。

  2. 将“InstallClass Installer.msi”、Setup.exe 以及该目录下的其他所有文件和子目录复制到另一台计算机上。

    说明:

    若要在未联网的计算机上安装,请将文件复制到诸如 CD-ROM 的传统媒体中。

  3. 在目标计算机上双击 Setup.exe 运行安装程序。

    说明:

    您必须在计算机上拥有安装权限才能运行该安装程序。

测试安装

  • 定位到程序集文件夹 %windir%\assembly(例如,C:\Windows\assembly),找到 InstallClass。在“类型”列中,其类型应标记为“本机映像”。

卸载应用程序

  1. 在 Windows“控制面板”中,双击“添加/删除程序”。

  2. 在“添加/删除程序”对话框中选择“InstallClass 安装程序”并单击“删除”,然后单击“确定”关闭对话框。

    提示:

    若要从开发计算机上卸载,请在“项目”菜单上选择“卸载”。

请参见

概念

将 MSIL 编译为本机代码

参考

CustomActionData 属性

本机映像生成器 (Ngen.exe)

其他资源

部署中的自定义操作管理