在本演练中,您可以检查基本的方式部署 VSPackage。
入门
在本演练中使用两台计算机,如下所示:
具有 Visual Studio 和 Visual Studio SDK 的开发计算机上安装了。
安装的 Visual Studio,但在目标计算机没有 Visual Studio SDK 安装。
备注
如果只有一台计算机,则在同一台计算机上可以开发和部署。但是,因此,如果您,使用 重置 Visual Studio 2010 的实验实例 实用工具,您无法清理系统注册表。如果计算机具有 Virtual PC 安装,则可以部署到虚拟图像。
若要完成本演练,您必须安装 Visual Studio 2010 SDK。 有关 Visual Studio SDK 的更多信息,请参见 扩展 Visual Studio 概述。 若要查找有关中所列如何下载 Visual Studio SDK,请 Visual Studio Extensibility Developer Center 参见 MSDN 网站上。
Visual Studio 包 " 项目模板的位置
Visual Studio 包 " 项目模板可以在 新项目 对话框的三个不同位置找到:
在 Visual Basic 扩展性下。 该项的默认语言是 Visual Basic。
在 C# 扩展性下。 该项目的默认语言是 C#。
在其他项下键入扩展性。 该项的默认语言是 C++。
创建基本的 VSPackage
首先,创建基本的 VSPackage 部署。 此 VSPackage 打开对话框来响应菜单命令。
创建基本的 VSPackage
使用 Visual Studio 包 " 项目模板创建一个名为 DeployPackage 的 VSPackage。 单击**“确定”**。
在 选择一种编程语言 页上,选择 Visual C# 或 Visual Basic。
不要更改 基本的 VSPackage 信息 上的默认值。
在 选择 VSPackage 选项 页上,选择 菜单命令。 单击**“下一步”**。
更改 命令名 到 我应部署命令。 单击**“下一步”**。
清除的 集成测试项目。 单击**“完成”**。
模板生成 DeployPackage 解决方案。
使用基本代码进行 Xcopy 部署
使用 xcopy 部署,一种部署 VSPackage 是,在 DOS 工具命名复制文件到该位置。 所复制 VSPackage 为选择的文件夹在目标计算机上。 ,因为适当的系统注册表项在目标计算机上,未初始化一个部署例如此显式将失败。
您可以初始化系统注册表使用包含预期键和值的 .reg 文件。 使用 Regpkg.exe 实用工具,可以生成 VSPackage 的 .reg 文件。
备注
使用 .pkgdef 文件,首选方法添加到 Visual Studio 注册包是。这使扩展部署,而无需对系统注册表的访问。使用 CreatePkgDef 实用工具, Pkgdef 文件中创建。
生成系统注册表文件
在 系统定义模型命令 窗口中,定位到包含 DeployPackage.dll 的文件夹。 这通常位于项目 \bin\Debug \ 目录。
键入下面一行在命令提示。
regpkg /regfile:DeployPackage.reg /codebase DeployPackage.dll
打开在记事本中出现的 DeployPackage.reg 文件。
DeployPackage.reg 应类似于以下代码:
REGEDIT4
[HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\10.0\InstalledProducts\DeployPackage]
@="#110"
"Package"="{bad3390c-b2a2-4bfc-a3ad-87e8119df413}"
"ProductDetails"="#112"
"PID"="1.0"
"LogoID"="#400"
[HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\9.0\Packages\{bad3390c-b2a2-4bfc-a3ad-87e8119df413}]
@="Company.DeployPackage.DeployPackage, DeployPackage, Version=1.0.2796.21244, Culture=neutral, PublicKeyToken=125cdbd1e07e0d79"
"InprocServer32"="C:\\Windows\\system32\\mscoree.dll"
"Class"="Company.DeployPackage.DeployPackage"
"CodeBase"="D:\\DeployPackage\\DeployPackage\\bin\\Debug\\DeployPackage.dll"
[HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\9.0\Menus]
"{bad3390c-b2a2-4bfc-a3ad-87e8119df413}"=", 1000, 1"
CodeBase 键,如下所示,便会产生 regpkg.exe 运行带 /codebase 开关时。
"CodeBase"="D:\\DeployPackage\\DeployPackage\\bin\\Debug\\DeployPackage.dllL"
若要部署 VSPackage 到目标计算机,则必须执行以下任务:
更新基本代码路径。
复制 VSPackage .dll 文件和 .reg 文件添加到目标计算机。
更新在目标计算机上的系统注册表。
初始化在目标计算机上 Visual Studio 菜单系统。
使用 xcopy,部署到目标计算机
更改 DeployPackage.reg 的基本代码路径。 DeployPackage.dll 在目标计算机上的安装位置的路径。 例如,因此,如果安装 DeployPackage.dll 到驱动器 D 根目录,基本键和值应如下所示:
"CodeBase"="D:\\DeployPackage.dll"
确保 InprocServer32 路径是 mscoree.dll 的位置在目标计算机上。 例如,因此,如果操作系统在驱动器 D 中进行安装,则 InprocServer32 项和值应如下所示:
"InprocServer32"="D:\\Windows\\system32\\mscoree.dll"
保存到 DeployPackage.reg 的更改并复制 DeployPackage.reg 和 DeployPackage.dll 到目标计算机。 确保复制 DeployPackage.dll 到 CodeBase 键给定的路径。
运行在目标计算机上 Visual Studio 命令 窗口作为管理员。
在命令提示符下,定位到安装了 DeployPackage.dll 然后键入以下两行的位置:
REGEDIT /s deploypackage.reg
devenv /setup /nosetupvstemplates
第一行在系统注册表安装各种键和值。 第二行初始化 Visual Studio 及其菜单系统在目标计算机上。
备注
由于我们不添加项目模板或项模板,可以使用 /nosetupvstemplates 开关减少安装时。
开始在目标计算机上 Visual Studio 。
在 工具 菜单上,单击 我应部署命令。 您应看到具有以下信息的消息框:
内部 Company.DeployPackage.DeployPackage.MenuItemCallback()
祝贺您! 已成功部署了 VSPackage!
基本代码与程序集部署
若要使用基本部署,可以在处理键为的文件夹安装 VSPackage。 此文件夹。公司或技术,例如, D 通常命名: \MyCompany。
部署程序集是另一种部署 VSPackage。 使用程序集部署,可以在 Visual Studio PrivateAssemblies 文件夹或子文件夹安装 VSPackage。
通常可以选择基本部署,当主要用于 VSPackage 拥有产品时和没有为其他产品的地址。 ,在 VSPackage 被视为由其他产品时,共享中选择程序集中部署。 例如,拼写检查器在 PrivateAssemblies 文件夹可能会部署。
备注
程序集文件名冲突适用于 PrivateAssemblies 文件夹。
由于 Visual Studio 的每个版本都有其自己的 PrivateAssemblies 文件夹,可以为并行方案模型的 VSPackage 使用程序集中部署。 如果您已设计运行在 Visual Studio下的多个版本的 VSPackage,则应考虑其安装到 GAC 中。
备注
出于性能原因,任何位置除了 GAC 外,不强名称在 PrivateAssemblies 文件夹中的符号程序集,或。
使用 PrivateAssemblies 的 Xcopy 部署
VSPackage 到 PrivateAssemblies 文件夹的程序集中部署的基本部署使用不同的系统注册。 可以使用 regpkg.exe 实用工具创建必要的键、子标记和值的程序集内部署的。
生成系统注册表文件
在 系统定义模型命令 窗口中,定位到包含 DeployPackage.dll 的文件夹。 这通常位于项目的 \bin\Debug \ 目录。
键入下面一行在命令提示符处:
regpkg /regfile: DeployPackage.reg /assembly DeployPackage.dll
打开在记事本中出现的 DeployPackage.reg 文件。
CodeBase 键使用程序集密钥交换,如下所示:
"Assembly"="DeployPackage, Version=1.0.2796.21244, Culture=neutral, PublicKeyToken=125cdbd1e07e0d79"
若要部署 VSPackage 到目标计算机,则必须复制 VSPackage .dll 文件到目标计算机的 PrivateAssemblies 文件夹。 您必须将 .reg 文件添加到目标计算机,还会在目标计算机上的系统注册表和初始化在目标计算机上 Visual Studio 菜单系统。
部署到 PrivateAssemblies 文件夹
确保 InprocServer32 路径是 mscoree.dll 的位置在目标计算机上。 例如,因此,如果操作系统在驱动器 D 中进行安装,则 InprocServer32 项和值应如下所示:
"InprocServer32"="D:\\Windows\\system32\\mscoree.dll"
使用基本代码,如果您已经安装 VSPackage,请删除该文件夹及其内容。
复制 DeployPackage.reg 和 DeployPackage.dll 到目标计算机上的 PrivateAssemblies 文件夹。 此文件夹的典型位置是 Visual Studio 安装路径\Common7\IDE\PrivateAssemblies \。
备注
可能需要管理凭据复制到此文件夹中。
运行在目标计算机上 Visual Studio 命令 窗口作为管理员。
在命令提示符处,定位到 PrivateAssemblies 文件夹中键入以下两行:
regedit deploypackage.reg
devenv /setup
第一行在系统注册表安装各种键和值。 第二行初始化 Visual Studio 及其菜单系统在目标计算机上。
不再需要 Deploypackage.reg。 您可以删除它。
开始在目标计算机上 Visual Studio 。
在 工具 菜单上,单击 我应部署命令。 您应看到具有以下信息的消息框:
内部 Company.DeployPackage.DeployPackage.MenuItemCallback()
祝贺您! 部署了 VSPackage 到 PrivateAssemblies 文件夹!
通过使用安装项目的部署
对部署 VSPackage 的一种更简单的方法是使用 Visual Studio 安装项目。 设置项目生成 Windows Installer (.msi) 文件,如您处理的部署任务,例如:
确保系统必备组件满足,例如安装公共语言运行时 (CLR)在目标计算机上。
提供用户界面启用目标文件夹中选择安装的。
运行自定义生成步骤,例如合并菜单。
有关更多信息,请参见 Setup Projects。
以下设置项目程序从的基本部署创建的 .reg 文件导入注册表信息。 如果尚未创建此文件,请先完成以下过程。
生成系统注册表文件
在 系统定义模型命令 窗口中,定位到包含 DeployPackage.dll 的文件夹。 这通常位于项目 \bin\Debug \ 目录。
键入下面一行在命令提示符处:
regpkg /regfile: DeployPackage.reg /codebase DeployPackage.dll
现在已经准备好创建和配置设置项目。
创建和配置安装项目
打开在 Visual Studio 的 DeployPackage 解决方案在开发计算机上。
右击解决方案节点,单击 添加,然后单击 新项目。
外接 其他项目类型 然后选择 安装和部署。
创建名为 Setup 的 安装项目 。
模板将安装项目添加到解决方案。
右击安装项目节点,单击 添加,然后单击 项目输出。
单击添加 DeployPackage 项目的主输出的 好 。
依赖项功能检查器运行并添加依赖项到安装项目。 其中的大多数依赖项引用已存在目标计算机上 Visual Studio 安装的二进制文件。
选择除 Microsoft .NET framework 的所有检测依赖关系,请右击选定内容,然后单击 排除。
单击安装项目节点。
将显示项目属性在属性窗口中。
更改一个属性设置为 " 我部署包。
更改标题属性设置为 " 我部署包设置。
单击注册表编辑器图标。 解决方案资源管理器 工具栏。
注册表编辑器显示。
右击 在目标计算机的注册表 然后单击 导入。
导入注册表 出现对话框。
导航到 \bin\Debug\ folder of the DeployPackage project and select DeployPackage 文件。 单击**“打开”**。
为基本部署生成的注册表项添加到注册表编辑器的 HKEY_LOCAL_MACHINE 节点。
如果您检查在 \Software\Microsoft\VisualStudio\9.0\Packages \ 节点的注册表项,您会发现两个硬编码路径。 必须已在安装时确定的路径替换这些。
移除硬编码路径
在注册表编辑器中,选择基本键,然后在 属性 窗口中的值属性。
更改路径是相对于目标安装目录,如下所示:
[TARGETDIR]deploypackage.dll
在注册表编辑器中,选择 InProcServer32 项然后在 " 属性 " 窗口属性的值。
更改路径是相对于目标系统目录,如下所示:
[SystemFolder]mscoree.dll
在目标计算机上安装后,必须运行带 /setup 开关的 devenv.exe。 可将此元素添加到安装为自定义操作。 若要创建自定义操作,必须先添加项目创建从 Installer 类派生的类。
添加安装程序类项目
在**“文件”菜单上指向“新建”,然后单击“项目”**。
此时将出现**“新建项目”**对话框。
创建名为 DevenvSetupCustomAction 的 Visual C# 或 Visual Basic 类库 。
删除 Class1.cs 或 Class1.vb 文件。
右击 DevenvSetupCustomAction 项目节点,单击 添加,然后单击 新项目。
创建名为 DevenvSetup 的新 安装程序类 。
右击 DevenvSetup.cs 或 DevencSetup.vb 节点然后单击 查看代码。
将下行添加到 using 或 Imports 语句:
通过添加以下代码来重写安装方法。 DevenvSetup 类,构造函数的后面:
此代码搜索在目标计算机上的注册表名为的 EnvironmentPath \Software\Microsoft\VisualStudio\9.0\Setup\VS \ 键的值。 EnvironmentPath 的值是完整路径为 devenv.exe。 安装方法运行带 /setup 开关的 devenv.exe 并等待其结束。
备注
如果未安装项目或项模板,您可以通过将 /nosetupvstemplates 开关显着缩短安装时,如下所示:
现在您有了一个自定义事件,可以添加到安装项目。
若要将自定义操作添加到安装项目
右击安装项目节点,单击 添加,然后单击 项目输出。
出现**“添加项目输出组”**对话框。
在 项目 的 SELECT DevenvSetupCustomAction 列表。
从 DevenvSetupCustomAction 的主输出 (活动) 添加到检测依赖项节点。
选择安装项目节点然后单击 自定义操作编辑器 图标。 解决方案资源管理器 工具栏。
出现**“自定义操作”**编辑器。
右击安装节点然后单击 添加自定义操作。
出现**“选择项目中的项”**对话框。
双击应用程序文件夹中选择 从 DevenvSetupCustomAction 的主输出 (活动)。 单击**“确定”**。
该自定义操作添加到 install 节点。
测试安装项目
生成 DeployPackage 解决方案。
DeployPackage.dll 和 DevenvSetupCustomAction.dll 创建。
生成安装项目。
Setup.exe 和 Setup.msi 创建。
关闭 Visual Studio。
setup.exe 复制到目标计算机。 ,如果目标计算机不可用时,可以运行在开发计算机上的 setup.exe。
备注
计算机必须具有 Visual Studio 安装。Visual Studio 的版本必须与此自定义操作使用的注册表项。
运行在目标计算机上的 setup.exe。
备注
运行 devenv /setup 可能需要一段时间。使用任务管理器,您可以按照其进度。
安装 DeployPackage,并接受所有的默认值。
运行 Visual Studio。
在 工具 菜单上,单击 我应部署命令。 您应看到具有以下信息的消息框:
内部 Company.DeployPackage.DeployPackage.MenuItemCallback()
关闭消息框并退出 Visual Studio。
在 控制面板、 (Windows vista) 选择的 过程和函数 或 (Windows XP) 添加或移除程序。
卸载我部署包。
运行 Visual Studio。
验证 我应部署命令 不再显示在 工具 菜单。
使用 Windows Installer XML 工具集的部署
对部署 VSPackage 的另一种方法是使用 Windows Installer XML 工具集。 工具集生成 .wxs 文件会导致 .msi 文件。 使用 Windows Installer 安装项目,自定义操作,如合并菜单,更易于使用创建 .wxs 文件中。
有关工具集的更多信息,请参见 http://wix.sourceforge。 net。
在系统注册表可以使用 RegPkg 实用工具创建 .wxs 文件以注册 VSPackage。 在插入此文件添加到部署 VSPackage 和合并其菜单。 Visual Studio的更完整的 .wxs 文件中。 然后生成此 .wxs 文件。 candle.exe 和 light.exe 工具生成 VSPackage 部署中的 .msi 文件。
首先,创建外部 DeployPackage.wxs 文件并将其添加到 DeployPackage 项目。
创建 DeployPackage.wxs 文件
在 解决方案资源管理器,右击 DeployPackage 项目节点,单击 添加,然后单击 新项目。
显示**“添加新项”**对话框。
选择文本文件项模板,将文件命名为 DeployPackage.wxs,然后单击 添加。空文件将出现在编辑器中。
将以下各行添加到文件中:
<?xml version='1.0' encoding='windows-1252'?>
<?define VisualStudioRegistryRoot = "Software\Microsoft\VisualStudio\9.0" ?>
<Wix xmlns='https://schemas.microsoft.com/wix/2003/01/wi'>
<Product Name='DeployPackage' Id='54748C47-DC70-43ec-A296-ECD7F30A548C'
Language='1033' Codepage='1252' Version='1.0.0' Manufacturer='My Company'>
<Package Id='????????-????-????-????-????????????' Keywords='Installer'
Description="Deploy Package Installer"
Comments='Demonstrates VSPackage deployment' Manufacturer='My Company'
InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />
<Media Id='1' Cabinet='Sample.cab' EmbedCab='yes' />
<!-- Properties -->
<Property Id="DEVENV_EXE_PATH">
<RegistrySearch Id="RegSearch_DevenvExe_Path" Root="HKLM" Key="$(var.VisualStudioRegistryRoot)\Setup\VS" Name="EnvironmentPath" Type="raw" />
</Property>
<!-- Launch conditions -->
<Condition Message="An administrator must approve or install [ProductName]."> Privileged </Condition>
<Condition Message="[ProductName] requires Visual Studio 2010."> DEVENV_EXE_PATH </Condition>
<!-- Root directories -->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFILES">
<Directory Id="INSTALLDIR" Name="MyFolder" >
<Component Guid="7D6D266D-4197-439b-ADB4-D51876269055" Id="MainExecutable">
<File Id="Deploy.dll" Name="Deploy.dll" LongName="DeployPackage.dll" Source="bin\Debug\DeployPackage.dll" Vital="yes" DiskId="1" />
<?include DeployFragment.wxs ?>
</Component>
</Directory>
</Directory>
</Directory>
<Feature Id='Complete' Level='1'>
<ComponentRef Id='MainExecutable' />
</Feature>
<InstallExecuteSequence>
<Custom Action="CA_DeployPackage" Before="InstallFinalize" />
</InstallExecuteSequence>
<CustomAction Id="CA_DeployPackage" Property="DEVENV_EXE_PATH" ExeCommand="/setup /nosetupvstemplates" Impersonate="no" Execute="deferred" />
</Product>
</Wix>
- 保存更改。
外部 DeployPackage.wxs 文件引用命名 DeployFragment.wxs 的中间文件,则从 DeployPackage.dll 生成。
生成 DeployFragment.wxs 文件
在 系统定义模型命令 窗口中,定位到包含 DeployPackage.dll 的文件夹。 这通常位于项目 \bin\Debug \ 目录。
键入下面一行在命令提示符处:
regpkg /wixfile:.. \.. \DeployFragment.wxs /codebase DeployPackage.dll
RegPkg 在 DeployPackage 项目文件夹中创建 DeployPackage.wxs 文件。
在 Visual Studio 中,右击 DeployPackage 项目节点,指向 添加,然后单击 现有项目。
添加现有项目 对话框猜匹配显示。
导航到 DeployPackage 项目文件夹。
设置文件筛选器显示 所有文件,选择 DeployFragment.wxs 文件,然后单击 添加。
DeployFragment.wxs 文件添加到 DeployPackage 项目。
打开编辑器中 DeployFragment.wxs 文件。
更改注册表元素名称基本代码的值,使其与 DeployPackage.wxs 文件元素的 name 属性。
<Registry Name="CodeBase" Value="[#Deploy.dll]" Type="string" />
保存更改。
当 .wxs 文件的元素的完整说明超出了本演练的范围之外时,这是一些要点您入门。
许多工具集组件获取 GUID 用作 ID. GUID,在创建新 .wxs 文件时,这些应替换。 ,因为它们属于 VSPackage,不应替换包含在标记中的 GUID。
文件元素具有使用短的命名属性 (DOS 8.3) 的格式化名称和只标识符的用途。 LongName 和源属性指定实际 VSPackage。 按照约定, Id 特性与命名属性。
DeployPackage.wxs 文件元素的 name 属性必须与 DeployFragment.wxs 注册表元素名称基本代码的值。 确保命名属性是短 (DOS 8.3) 格式的文件名。
CustomAction 元素指定自定义操作。 模拟和执行属性设置为,以便 Visual Studio 提升的权限在 Windows vista 下,当该自定义操作运行时。 ExeCommand 属性使用 /nosetupvstemplates 开关利用该条件不安装项目模板或项模板。 这大大减少安装时。
现在 .wxs 文件后,可以生成它创建 .msi 设置文件。
生成 DeployPackage.wxs 文件
在 系统定义模型命令 窗口中,定位到 DeployPackage 项目文件夹。 此文件夹包含文件 DeployPackage.wxs。
添加工具集的完整路径路径环境变量。 例如,
set Path=%Path%;C:\Program Files\Microsoft Visual Studio 2010 SDK\VisualStudioIntegration\Tools\Toolset
键入下面一行在命令提示。
candle DeployPackage.wxs
这将创建 DeployPackage.wixobj 对象文件。
键入下面一行在命令提示。
light DeployPackage.wixobj
这将创建 DeployPackage.msi 对象文件。
测试部署 .msi 文件:
安装 VSPackage 在目标计算机上。
测试 VSPackage 在目标计算机上运行。
卸载 VSPackage 从目标计算机。
测试安装项目
DeployPackage.msi 复制到目标计算机。 ,如果目标计算机不可用,可以运行它在开发计算机上。
备注
计算机必须具有 Visual Studio 安装。Visual Studio 的版本必须与此自定义操作使用由启动条件和的注册表项。
运行在目标计算机上 DeployPackage.msi。
备注
向导不会出现。添加 wizard 通过使用工具集库 light.exe 是可能的。有关更多信息,请参见 http://wix.sourceforge。net。
运行 Visual Studio。
在 工具 菜单上,单击 我应部署包。 您应看到具有以下信息的消息框:
内部 Company.DeployPackage.DeployPackage.MenuItemCallback()
关闭消息框和结束 Visual Studio。
在 控制面板、 (Windows vista) 选择的 过程和函数 或 (Windows XP) 添加或移除程序。
卸载 DeployPackage。
运行 Visual Studio。
验证 我应部署命令 不再显示在 工具 菜单。