演练:安装时使用自定义操作对程序集进行预编译
更新:2007 年 11 月
使用“自定义操作”可以指定安装结束时在目标计算机上执行的其他操作。例如,在本演练中,为了在安装期间将程序集预编译为本机代码,您将 DLL 的路径名传递给“CustomActionData”属性。
说明: |
---|
显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您的当前设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置。 |
说明: |
---|
下面的说明演示如何使用 Visual Basic 项目创建部署项目,其一般原则适用于支持部署 Windows 应用程序的所有 Visual Studio 语言项目。 |
创建自定义操作类
在“文件”菜单上单击“新建项目”。
在“新建项目”对话框中,选择“项目类型”窗格中的“Visual Basic 项目”,然后选择“模板”窗格中的“类库”。在“名称”框中键入 InstallClass。
在“项目”菜单上选择“添加新项”。
在“添加新项”对话框中选择“安装程序类”。在“名称”框中键入“InstallClass.vb”。单击“添加”将类添加到项目中。
将代码添加到自定义操作中
在“解决方案资源管理器”(或设计图面)中右击“InstallClass.vb”,然后单击“查看代码”打开“代码编辑器”。将以下代码添加到模块顶部 Imports System.Configuration.Install 的下面:
Imports System.Runtime.InteropServices Imports System.Text
在 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
在 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
添加部署项目
在“文件”菜单上选择“添加”,然后单击“新建项目”。
在“添加新项目”对话框中,选择“项目类型”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“安装项目”。在“名称”框中键入“InstallClass 安装程序”。
在“属性”窗口中,选择“ProductName”属性并键入 InstallClass。
在“文件系统编辑器”中,选择“应用程序文件夹”。在“操作”菜单上选择“添加”,然后单击“项目输出”。
在“添加项目输出组”对话框中为 InstallClass 项目选择主输出,然后单击“确定”关闭对话框。
添加自定义操作
在“解决方案资源管理器”中选择“InstallClass 安装程序”项目。在“视图”菜单上指向“编辑器”,然后单击“自定义操作”。
在“自定义操作编辑器”中,选择“自定义操作”节点。在“操作”菜单上选择“添加自定义操作”。
在“选择项目中的项”对话框中,双击“应用程序文件夹”,然后选择“主输出来自 InstallClass (活动)”。单击“确定”将 InstallClass 自定义操作添加到全部四个自定义操作节点。
选择“安装”节点下的“主输出来自 InstallClass (活动)”节点。
在“属性”窗口中,选择“CustomActionData”属性并键入 /Args="[TARGETDIR]InstallClass.dll"。请在键入内容中包括引号。
为“主输出来自 InstallClass (活动)”的其他三个实例分别重复上述步骤。
在“生成”菜单上选择“生成 InstallClass 安装程序”。
在开发计算机上安装
在“解决方案资源管理器”中选择“InstallClass 安装程序”项目。在“项目”菜单上选择“安装”。
说明: 您必须在计算机上拥有安装权限才能运行该安装程序。
部署到其他计算机
在“Windows 资源管理器”中,定位到项目目录并找到生成的安装程序。默认路径将为 \Documents and Settings\您的登录名\My Documents\Visual Studio 2005\Projects\解决方案文件夹名\My Notepad Installer\项目配置\My Notepad Installer.msi。默认项目配置为“调试”或“发布”。
将“InstallClass Installer.msi”、Setup.exe 以及该目录下的其他所有文件和子目录复制到另一台计算机上。
说明: 若要在未联网的计算机上安装,请将文件复制到诸如 CD-ROM 的传统媒体中。
在目标计算机上双击 Setup.exe 运行安装程序。
说明: 您必须在计算机上拥有安装权限才能运行该安装程序。
测试安装
- 定位到程序集文件夹 %windir%\assembly(例如,C:\Windows\assembly),找到 InstallClass。在“类型”列中,其类型应标记为“本机映像”。
卸载应用程序
在 Windows“控制面板”中,双击“添加/删除程序”。
在“添加/删除程序”对话框中选择“InstallClass 安装程序”并单击“删除”,然后单击“确定”关闭对话框。
提示: 若要从开发计算机上卸载,请在“项目”菜单上选择“卸载”。