WiX Toolset 教程索引页

注意:虽然WiX Toolset功能强大,但其学习曲线相对较高。请慎重选择
若没有足够时间、没心思搞的请绕行至inno setup、installshield、nisi、setupfactory。。。

WiX Toolset 3.x 手册目录

入门

基础介绍

WixUI对话框库

WiX内置了一套Windows Installer安装包的用户界面库。本部分介绍关于使用WixUI对话框库的内容:

安装包捆绑包基础

使用技巧

本节包括怎样处理常见的WiX任务

文件、快捷方式和注册表

可再分发和安装检查

用户界面及本地化

产品更新

其他一般性处理

参考

  • Wix Toolset的nuget包:Wix Toolset
    • wix-nuget 源码
    • 之前Wix的nuget包Owner一直是kzu,大概2019年底修改成了wixtoolset和rob —— 这个nuget包目前应该还是kzu在维护。

掘:奇葩史

Wix Toolset基础 —— 环境变量设置示例

Wix Toolset基础 —— 环境变量设置示例

返回目录索引

本文由简至繁介绍如何在安装包中配置环境变量。
关于Environment元素的属性说明见:Wix Toolset基础 —— 环境变量设置

本文示例代码:Jess.Sample.Setup.Environment

基础配置示例

本文环境变量设置功能实现的是:将软件安装目录添加到系统环境变量 Path末尾处

首先先看下最简配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" >

<Product Id="*" Name="环境变量设置Sample"
Language="2052" Codepage="936"
Version="1.0.0.0" Manufacturer="Jess"
UpgradeCode="{6C0C1D6D-80CF-4074-AC42-5ADBD7E4087F}">
<Package InstallerVersion="300" Compressed="yes" InstallScope="perMachine" SummaryCodepage="936" />

<MediaTemplate EmbedCab="yes" />

<UIRef Id="WixUI_Minimal"/>
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION" />

<Feature Id="ProductFeature" Title="Wix环境变量设置" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>

<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFiles64Folder">
<Directory Id="INSTALLLOCATION" Name="EnvSample">
</Directory>
</Directory>
</Directory>
</Fragment>

<Fragment>
<ComponentGroup Id="ProductComponents" >
<Component Id="cmpEnvSample" Guid="{63B3AF3B-94BB-4D3D-8D24-A0772CA5CFAA}" Directory="INSTALLLOCATION">
<CreateFolder />
<!--系统环境变量Path中添加路径-->
<Environment Id="EnvSamplePath" Action="set" Part="last" Name="Path" Permanent="no" System="yes" Value="[INSTALLLOCATION]" />
</Component>
</ComponentGroup>
</Fragment>

</Wix>

其核心就一句话:<Environment Id="EnvSamplePath" Action="set" Part="last" Name="Path" Permanent="no" System="yes" Value="[INSTALLLOCATION]" />

控制环境变量设置时机

软件安装过程中,环境变量的设置,可能需要在某一步骤之后,即需要控制Wix安装的Action顺序。
例如环境变量的写入需要在卸载之后,配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

<?define ProductVersion="1.0.0.0" ?>

<Product Id="*" Name="环境变量设置Sample"
Language="2052" Codepage="936"
Version="1.0.0.0" Manufacturer="Jess"
UpgradeCode="{6C0C1D6D-80CF-4074-AC42-5ADBD7E4087F}">
<Package InstallerVersion="300" Compressed="yes" InstallScope="perMachine" SummaryCodepage="936" />

<MediaTemplate EmbedCab="yes" />

<UIRef Id="WixUI_Minimal"/>
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION" />

<Feature Id="ProductFeature" Title="Wix环境变量设置" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>

<Upgrade Id="{6C0C1D6D-80CF-4074-AC42-5ADBD7E4087F}">
<UpgradeVersion OnlyDetect='no' Property='SELFFOUND'
Minimum='$(var.ProductVersion)' IncludeMinimum='yes'
Maximum='$(var.ProductVersion)' IncludeMaximum='yes' />
<UpgradeVersion OnlyDetect='no' Property='PREVIOUSFOUND'
Minimum='0.0.0.1' IncludeMinimum='yes'
Maximum='$(var.ProductVersion)' IncludeMaximum='yes' />
<UpgradeVersion OnlyDetect='no' Property='NEWERFOUND'
Minimum='$(var.ProductVersion)' IncludeMinimum='yes' />
</Upgrade>

<InstallExecuteSequence>
<RemoveExistingProducts Before='InstallInitialize' />
<WriteEnvironmentStrings />
</InstallExecuteSequence>
</Product>

核心就是在InstallExecuteSequence中添加WriteEnvironmentStrings执行步骤,也可以直接设置Sequence属性:<WriteEnvironmentStrings Sequence="1" />

控制环境变量设置条件

在某些情况下,环境变量的设置需要添加条件判断,如通过Bootstrap安装时,外部传入的参数,标记不需要添加环境变量。

以下配置添加了EnableEnv属性控制是否设置环境变量:

1
2
3
4
5
6
7

<InstallExecuteSequence>
<WriteEnvironmentStrings>EnableEnv=1</WriteEnvironmentStrings>
</InstallExecuteSequence>

<Property Id="EnableEnv" Value="1"></Property>

另外,也可以直接设置Suppress属性禁用环境变量设置<WriteEnvironmentStrings Suppress="yes" />


理:奇葩史

[译]:Wix Toolset基础 —— 环境变量设置

[译]:Wix Toolset基础 —— 环境变量设置

返回目录索引

参考链接:

示例参考:

Environment简易说明

安装过程中要添加环境变量,需要在组件中使用Environment标签:

1
<Environment Id='UpdatePath' Name='PATH' Action='set' Permanent='yes' System='yes' Part='last' Value='[INSTALLDIR]' />
  • Action属性指定组件安装时,所执行的操作 —— createsetremove
  • Part属性控制设置新值的方式:all替换之前的值,first在现有值之前添加,last添加到现有值之后;
  • Permanent属性控制产品卸载时,环境变量的处理方式:yes保留环境变量值,no在产品卸载时,同时删除环境变量值;
  • System属性指定环境变量值是系统变量还是用户变量
  • 所有名称使用大写。 —— 经测试,目前小写名称也支持。

Environment元素结构

父级需要是Component

属性列表:

属性 类型 说明 是否必需
Id 字符串 Environment条目的唯一标识
Action 枚举

在安装父级组件时,指定环境变量的操作:createdsetremoved。此属性必须为以下的值:

  • create
    • 安装期间,若不存在此环境变量,则创建;若存在,则不影响已有的值。
  • set
    • 安装期间,若不存在此环境变量,则创建;若存在,则修改为新设置的值。
  • remove
    • 安装期间,移除环境变量。仅当环境变量的name和value均匹配时,才移除。若需要移除环境变量(无论它的值是什么),则不要设置Value属性。
Name 字符串 环境变量的名称
Part 枚举

此属性必须为以下的值:

  • all
    • 替换整个环境变量的值。此值为默认值。
  • first
    • 在现有值之前插入
  • last
    • 在现有值之后附加
Permanent YesNoType 指定在卸载时是否保留环境变量。
Separator 字符串 环境变量Value值的分隔符,默认时分号分隔。
System YesNoType 指定环境变量是否添加到系统环境变量。默认值为`no`,表示环境变量添加到用户变量中。
Value 字符串 待设置到环境变量中的值。若此属性为设置,则在安装过程中移除已存在的同名环境变量。

译:奇葩史

Git 2.27.0 使用Git-SVN时,引发E235000错误问题解决

Git 2.27.0 使用Git-SVN时,引发E235000错误问题解决

缘由

今天更新VSCode 1.47.0之后,一直提示git 2.26.2版本有已知问题,建议更新;本着相信Microsoft的心态,更新了Git 2.27.0版本。

问题

Git更新为2.27.0之后,之前用git-svn连接的库,不能git svn rebasegit svn dcommit了,一直报如下错误:

1
E235000: In file 'subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c' line 1666: assertion failed (get_current_pool_cb != NULL)

解决

将Git 2.27.0卸载,重新安装2.26.2版本后,问题解决。

下载链接


解:奇葩史

互联网大厂项目开源地址索引

互联网大厂项目开源地址索引

含部分非纯互联网大厂

国外

国内


掘:奇葩史