WiX安装选项--环境变量

系统环境变量由 Windows 定义并应用到所有计算机用户。对系统环境的更改将写入注册表,而且通常需要重启计算机才能生效。通常我们的程序中也会使用环境变量,如何在WiX设置环境变量呢?

安装一个环境变量,我们就需要向Environment table中添加一条记录,其中有几个字段是必须设置的:

  • Environment - public key to be referenced from other tables.
  • Name - name of the environment variable we want to create.
  • Value - value of new environment variable, which is formatted field.

同时在InstallExecuteSequence table 中需要添加  WriteEnvironmentStrings 或者RemoveEnvironmentStrings 操作。

在安装/删除程序的时候需要处理我们的环境变量:

  • 安装程序: 
    • 如果相同名称的环境变量名称不存在,则创建一个变量:
      • 如果已经存在一个相同名称的变量:
        • 用新的值代替旧值.
        • 不修改旧值或者忽略新值
        • 在环境变量的值列表开头插入一个新的值.
        • 在环境变量的值列表末尾插入一个新的值.
    • 删除一个环境变量:
      • 不管它的值
      • 只有当它的值和提供的值匹配时.
    • 环境变量的类型:
      • 用户环境变量(used in per-user installation).
      • 系统环境变量(used in per-machine installation).
  • 卸载程序:
    • 不删除环境变量.
    • 删除环境变量.

下面我们来看一个例子:

<?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>
    
        <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" />
          </Component>
                </Directory>
            </Directory>
        </Directory>

    
        <Feature Id="ProductFeature" Title="Minimal" Level="1">
      <ComponentRef Id="Component1" />
        </Feature>
    <InstallExecuteSequence>
      <WriteEnvironmentStrings>EnableEV=1</WriteEnvironmentStrings>
      
    </InstallExecuteSequence>
    <Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION" />
    <UIRef Id="WixUI_InstallDir" />


  </Product>
</Wix>

这个例子创建了一个系统环境变量 TestMinVar 值是 "8"。编译并安装例子程序,在系统环境变量就可以看到TestMinVar这个环境变量了,卸载这个例子程序,环境变量TestMinVar也会被删除。

Environment table 也是一个 formatted field,这也就是说环境变量的值可以是来自一个属性,另一个环境变量,或者是任何一个formatted 字符串,下面的例子就是把环境变量设置成INSTALLLOCATION:

              <Environment Id="TestMinVar"
                         Action="set" 
                         Part="all"
                         Name="MinEnvVar"
                         Permanent="no"
                         System="no"
                         Value="[INSTALLLOCATION]" />

下面这个例子是用新的值代替已经存在的值:

             <Environment Id="TestMinVar"
                         Action="set" 
                         Part="all"
                         Name="MinEnvVar"
                         Permanent="yes" 
                         System="no"
                         Value="123" />

主要就是Permanent ="yes",下面的例子把Permanent="no", Part="last"表示把值附加到后面:

               <Environment Id="TestMinVar"
                         Action="set" 
                         Part="last" 
                         Name="MinEnvVar"
                         Permanent="no" 
                         System="no"
                         Value="456" />

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hotqin888的专栏

ONLYOFFICE历史版本功能的开发技术之一

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

31120
来自专栏北京马哥教育

Shell的18条常用命令整理

? 作者 | junmail 来源 | CSDN社区 云豆贴心提醒,本文阅读时间8分钟,文末有秘密! 1、 ls: 类似于dos下的dir命令 ...

41740
来自专栏linux驱动个人学习

VFS四大对象之四-struct file

继上一篇文章: http://yehe.isd.com/column/support-plan/article-edit/93709 四、file结构体 文件对...

43160
来自专栏Java学习网

Java面试题系列之基础部分(七)——每天学5个问题

Java基础部分学习的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法,这些都是最基...

26860
来自专栏闻道于事

Linux-看完这篇Linux基本的操作就会了

35530
来自专栏十月梦想

node表单提交POST提交

前几天给大家介绍了使用node的提交(get)获取到表单提交的内容,get提交的参数查询部分(query)可以获得到,由于get提交的内容在url显示,而po...

15340
来自专栏大内老A

[WCF权限控制]基于Windows用户组的授权方式[上篇]

Windows用户组安全主体权限模式,顾名思义,就是将利用Windows安全系统将对应的Windows帐号所在的用户组作为该用户权限集的授权方式。认证和授权密不...

20390
来自专栏哲学驱动设计

BaaS API 设计规范

上个月写了一个团队中的 BaaS API 的设计规范,给大家分享下: 目录 1. 引言... 4 1.1. 概要... 4 1.2. 参考资料... 4 1...

270100
来自专栏difcareer的技术笔记

如何压缩ndk的so库

14670
来自专栏linux驱动个人学习

解析Linux中的VFS文件系统之文件系统的注册(二)

继上一篇文章:https://cloud.tencent.com/developer/article/1053882 3. 文件系统的注册 这里的文件系统是指可...

36660

扫码关注云+社区

领取腾讯云代金券