WiX安装选项--注册程序集到GAC和VS的设计时环境

Visual Studio的设计时引用组件的窗口中看到的程序集的位置和程序集的运行时位置是不一样的,特别是在全局程序集缓存(GAC)中的程序集,通过WiX制作Winodws安装程序的时候需要处理这个区别。

VS的设计时的添加引用窗口看到的程序集的位置来自注册表SOFTWARE\Microsoft\.NETFramework\AssemblyFolders – 放在HKEY_LOCAL_MACHINE 下面就是针对所有的用户, 或者放在HKEY_CURRENT_USER 下面针对当前用户。

WiX要把一个程序注册到GAC,只需要在File 上增加一个选项 Assembly=".net" 就可以了,但是注册到GAC的dll不会放到安装目录下方了,这就需要通过提供两个Component方式来处理,例如下面的配置:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="a960cf35-0779-43e8-923b-35638f2bfc42" Name="Minimal" Language="2052" Version="1.0.0.0" Manufacturer="Geffzhang" UpgradeCode="0bf7e020-5bbd-4a06-8e39-e715999edbf5">
    <Package InstallerVersion="200" Compressed="yes" Description="Minimal Windows Installer Sample" Comments="This installer database contains the logic and data required to install Minimal Windows Installer Sample." />
    <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
    <Property Id="EnableEV" Value="1">
    </Property>
    <Condition Message="你必须有管理员权限才能安装应用程序"><![CDATA[Privileged]]></Condition>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLLOCATION" Name="Minimal">
          <Component Id="Component1" Guid="{1781A625-8ACB-45E7-A8BA-219D81760B2E}">
            <CreateFolder />
            <Environment Id="TestMinVar" Action="set" Part="all" Name="MinEnvVar" Permanent="no" System="yes" Value="8" />
            <File Id="File_Payload" Source="payload.txt" KeyPath="yes" />
          </Component>
          <Directory Id="GAC" Name="GAC">
            <Component Id="RTGACTest" Guid="22887611-B13E-41EE-897C-D78830E68AEB" DiskId="1">
              <!-- Runtime, assembly in GAC -->
              <File Id="F_RT_GACTEST"  LongName="GACTest.dll" Source="..\build\GACTest.dll" KeyPath="yes" Assembly=".net" />
            </Component>
          </Directory>
          <Component Id="DTGACTest" Guid="FB935B7D-D2BD-4B83-A26C-A9376EBA0915" DiskId="1">
             <!--Design-time, private assembly--> 
            <File Id="F_DT_GACTest" LongName="GACTest.dll" Source="..\build\GACTest.dll" KeyPath="yes" />
            <Registry Id="R_DT_MyControl_AssemblyFolders" Root="HKLM" Key="SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\[ProductName]" Value="[$DTGACTest]" Type="string" />
          </Component>
        </Directory>
      </Directory>
    </Directory>
    <Feature Id="ProductFeature" Title="Minimal" Level="1">
      <ComponentRef Id="Component1" />
      <ComponentRef Id="DTGACTest"/>
      <ComponentRef Id="RTGACTest" />
    </Feature>
    <Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION" />
    <UIRef Id="WixUI_InstallDir" />
    <UI />
  </Product>
</Wix>

上面的例子的GACTest.dll注册了两个Component--RTGACTest和DTGACTest,RTGACTest下的File增加了属性Assembly=".net",DTGACTest则没有增加,同时在DTGATest增加了一个注册表项目。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开发 & 算法杂谈

GDB多线程多进程调试

主要包括gdb分配的线程id号(例如1,2,3),操作系统分配的线程id(例如20568),线程的名字以及线程相关的调用栈信息。

1.5K30
来自专栏运维技术

Win10远程桌面出现“身份验证错误,CredSSP加密Oracle修正”解决方法

https://support.microsoft.com/zh-cn/help/4093492/credssp-updates-for-cve-2018-08...

3.1K60
来自专栏运维技术迷

连仕彤博客pyenv环境部署

pyenv是一款Python多版本管理工具,它可以很好的管理Python解释器、Python版本和Python虚拟环境,对于日常开发中,是一款很有必要安装的利器...

35550
来自专栏信安之路

windows常用命令

在渗透测试中遇到 Windows 的概率是非常大的,那么在拿到一台服务器权限之后,通常会获得一个 shell,想要进行下一步渗透,几乎都是需要通过在 shell...

12000
来自专栏乐沙弥的世界

Linux 7下MySQL自启动配置(glibc)

使用glibc编译后的mysql二进制安装方法被广泛使用,因为它和Windows下的zip方式一下,简单几个步骤,配置一下环境即可。而在Linux 7版本中,M...

11120
来自专栏happyJared

IDEA快捷键拆解系列(十四):Help篇

  以下是关于Help导航项及其每一子项的拆解介绍,其中,加粗部分的选项是博主认为比较重要的。

8220
来自专栏程序猿DD

使用Swagger2Markup实现API文档的静态部署(一):AsciiDoc

在阅读本文之前,您先需要了解Swagger的使用,如果您还不知道它是用来干嘛的,请先阅读《Spring Boot中使用Swagger2构建强大的RESTful ...

56250
来自专栏LeeCen

Swift Perfect - 使用 systemd 命令服务器项目后台运行

22610
来自专栏Java学习123

linux mount -t用法

2.4K50
来自专栏WindCoder

node-gyp错误之旅

Node.js 在安装模块的时候一直报错,提示安装node-gyp时报python不可用的情况

2.4K10

扫码关注云+社区

领取腾讯云代金券