精华内容
下载资源
问答
  • wix使用

    2020-04-24 10:35:09
    wix在安装过程前或后执行某个程序 有的时候我们想要在正式安装前想先安装程序的运行环境,或者在安装完成后对程序做某些修改。 https://wixtoolset.org/documentation/manual/v3/xsd/wix/exepackage.html 一个例子...

    批量导入文件

    https://blog.csdn.net/dirichlet_zju/article/details/80150632

    这时代码里的var.xxxname在工程项目里是未定义的变量,这个时候我们自然想到在项目属性里添加,下图位置。添加后依然报undefined preprocessor variables,关掉项目重新打开发现我定义的变量又没了,说明没有真正的定义进去。不知道为什么!!

    我的解决方法是在项目的工程文件(xxx.wixproj)里直接添加:

    <PropertyGroup>
        <DefineConstants>myvar1=$(SolutionDir)..\..\deploy\ResDLLs;myvar2=...</DefineConstants>
    </PropertyGroup>

    在项目里直接添加自动生成批量文件导入命令

    在项目里也可以直接添加某个目录的文件批量导入。这样就能够在项目编译前就生成文件的批量导入资源文件。

    同样是在工程文件里。

    <Target Name="BeforeBuild">
        <HeatDirectory Directory="..\..\..\deploy\ResDLLs" PreprocessorVariable="var.DeployResDLLsFolder" OutputFile="ResDLLs.wxs" ComponentGroupName="OemResDllsComponents" DirectoryRefId="OEMRESDLLSFOLDER" AutogenerateGuids="true" ToolPath="$(WixToolPath)" SuppressFragments="true" SuppressRegistry="true" SuppressRootDirectory="true" />
    </Target>

     

    wix在安装过程前或后执行某个程序

    有的时候我们想要在正式安装前想先安装程序的运行环境,或者在安装完成后对程序做某些修改。

    https://wixtoolset.org/documentation/manual/v3/xsd/wix/exepackage.html

    一个例子,可以通过配置after属性来指定执行的先后顺序:

    <!-- install Envonment-->
    <ExePackage
            Id="LDK_Environment"
            Name="Prerequisites\AddinFile\AddinTool\SolidCenterSoftActionTool_RUS.exe"
            SourceFile="$(var.SEAddinFileFolder)AddinTool\SolidCenterSoftActionTool_RUS.exe"
            Compressed="no"
            >
    </ExePackage>

     

    展开全文
  • Wix使用

    2017-04-25 15:54:54
    xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">                Please install the .NET Framework then run this installer again">
    <?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
         xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
     <Product Id="*" Name="AAAAASetup" Language="1033" Version="1.0.0.0" Manufacturer="AAAAA" UpgradeCode="9f8f427e-271d-4600-aa71-812f2fd1e9b5">
      <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
      <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
      <MediaTemplate />
       
        <PropertyRef Id="NETFRAMEWORK45" />
         <Condition Message="This application requires .NET Framework 4.6.
                     Please install the .NET Framework then run this installer again">
           <![CDATA[Installed OR NETFRAMEWORK45]]>
         </Condition>
      <Feature Id="ProductFeature" Title="AAAAASetup" Level="1">
       <!--<ComponentGroupRef Id="ProductComponents" />-->
          <ComponentRef Id="AAAAAConfig" />
          <ComponentRef Id="AAAAABin" />
          <ComponentRef Id="AAAAATemplate" />
          <ComponentRef Id="DesktopFolderShortcut" />
      </Feature>
      <!--UI Part-->
      <UI>
          <!--所选目录,DIR就是所选目录,名称唯一就行,但是必须大写,否则还是安装在c盘-->
          <Property Id="WIXUI_INSTALLDIR" Value="DIR" />
         
          <!--UI引用-->
          <UIRef Id="WixUI_InstallDir" />
       
          <!--退出对话框-->
          <Publish Dialog="ExitDialog" Control="Finish" Event="DoAction"
               Value="LaunchApplication">
            WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed
          </Publish>
        </UI>
       
       
        <WixVariable Id="WixUILicenseRtf" Value="license.rtf" />
        <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />
     </Product>
     <Fragment>
      <Directory Id="TARGETDIR" Name="SourceDir">
       <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="AAAAASetup" />
       </Directory>
      </Directory>
     </Fragment>
     <Fragment>
          <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
              <!--程序文件夹名字-->
              <Directory Id="DIR" Name="AAAAA" ><!--Root Dir-->
                <Directory Id="BIN"  Name="bin"/>
                <Directory Id="CONFIG"  Name="Config"/>
                <Directory Id="TEMPLATE"  Name="Template"/>
              </Directory >
              <Directory Id="DesktopFolder" Name="Desktop" />
             
            </Directory>
          </Directory>
        <!--桌面快捷键-->
        <DirectoryRef Id="DesktopFolder">
          <Component Id="DesktopFolderShortcut" Guid="5A254682-1D1F-413D-8333-144457282026">
            <Shortcut Id="DesktopShortcut" Directory="DesktopFolder"   Name="AAAAA" Target="[BIN]AAAAA.exe"  WorkingDirectory="BIN"
                      Icon="Desktopseed32x32.ico">
              <Icon Id="Desktopseed32x32.ico" SourceFile="AAAAA.ico" />
            </Shortcut>
            <RegistryValue Root="HKCU" Key="Software\Microsoft\AAAAA" Name="installed" Type="integer" Value="1" KeyPath="yes" />
          </Component>
        </DirectoryRef>
     </Fragment>
      <Fragment>
        <!--安装应用到所选目录(BIN)-->
        <DirectoryRef Id="BIN">
          <Component Id="EscopeBin" Guid="5E254582-DD5F-423D-8333-843457282026" KeyPath="yes">
            <File Id="AAAAA" Source="AAAAA.exe" >
              <Permission User="SYSTEM" GenericAll="yes"/>
              <Permission User="EveryOne" GenericAll="yes"  GenericRead="yes" Read="yes" ReadAttributes="yes"  GenericExecute="yes" TakeOwnership ="yes"  GenericWrite ="yes"    WriteAttributes="yes" ReadPermission ="yes"   ChangePermission="yes" />
              <Permission User="Users" Domain="[LOCAL_MACHINE_NAME]"  GenericRead="yes" Read="yes" ReadAttributes="yes"  GenericExecute="yes" TakeOwnership ="yes"  GenericWrite ="yes"    WriteAttributes="yes" ReadPermission ="yes"   ChangePermission="yes"/>
            </File>
             
            <File Id="LOGO" Source="LOGO.png" />
                    <File Id="Tpptx" Source="T.pptx" >
              <Permission User="SYSTEM" GenericAll="yes"/>
              <Permission User="EveryOne" GenericAll="yes"  GenericRead="yes" Read="yes" ReadAttributes="yes"  GenericExecute="yes" TakeOwnership ="yes"  GenericWrite ="yes"    WriteAttributes="yes" ReadPermission ="yes"   ChangePermission="yes" />
              <Permission User="Users" Domain="[LOCAL_MACHINE_NAME]"  GenericRead="yes" Read="yes" ReadAttributes="yes"  GenericExecute="yes" TakeOwnership ="yes"  GenericWrite ="yes"    WriteAttributes="yes" ReadPermission ="yes"   ChangePermission="yes"/>
            </File>
            
            <File Id="kernel32" Source="kernel32.dll" />
            <File Id="mscoree" Source="mscoree.dll" />
            <File Id="mscorlib" Source="mscorlib.dll" />
            <File Id="msvcp140d" Source="msvcp140d.dll" />
            <File Id="ucrtbased" Source="ucrtbased.dll" />
            <File Id="vcruntime140d" Source="vcruntime140d.dll" />
            
          </Component>
        </DirectoryRef>
       
        <DirectoryRef Id="CONFIG">
          <Component Id="AAAAAConfig" Guid="4D48B6AC-3741-4262-A1BD-6C1774696765" KeyPath="yes">
              <File Id="DefaultLayout" Source="DefaultLayout.config" >
              <Permission User="SYSTEM" GenericAll="yes"/>
              <Permission User="EveryOne" GenericAll="yes"  GenericRead="yes" Read="yes" ReadAttributes="yes"  GenericExecute="yes" TakeOwnership ="yes"  GenericWrite ="yes"    WriteAttributes="yes" ReadPermission ="yes"   ChangePermission="yes" />
              <Permission User="Users" Domain="[LOCAL_MACHINE_NAME]"  GenericRead="yes" Read="yes" ReadAttributes="yes"  GenericExecute="yes" TakeOwnership ="yes"  GenericWrite ="yes"    WriteAttributes="yes" ReadPermission ="yes"   ChangePermission="yes"/>
            </File>
          </Component>
        </DirectoryRef>
        <DirectoryRef Id="TEMPLATE">
          <Component Id="AAAAATemplate" Guid="5FC12B29-27EF-4FDC-BF52-BD6F8E454A70" KeyPath="yes">
          </Component>
        </DirectoryRef>
      </Fragment>

    </Wix>
    展开全文
  • WIX生成MSI包的核心程序,可以直接的通过脚本生成对应的MSI包,生成过程中修改对应的WMS文件来完成程序包的制作。
  • wix311.exe

    2020-04-08 17:25:12
    JavaFX打包exe时需要安装的一个工具,亲测可以使用
  • Wix打包教程

    2018-01-11 11:12:58
    网上找到的Wix打包的教程总结,还有英文原版教程,还是英文原版比较详细
  • wix311-binaries.zip

    2020-06-18 16:03:27
    使用jdk的jpackage 打包时需要用到WiX 工具 (light.exe, candle.exe)
  • WIX3.5--WIX3.7安装包

    2019-01-17 10:48:54
    程序中为wix3.7版本,但对于环境对wix3.5到wix3.7版本的需求都可使用(自己已经亲测可用),具体使用方法见压缩包内的readme文件
  • Wix动画 Wix动画包含Animator React组件。 该组件将为其安装或卸载的所有子代设置动画。 Animator组件使用库。 它符合动画的Wix UX样式准则。 演示版 观看以了解您可以使用它做的所有事情。 入门 在项目中使用 ...
  • cargo-wix:创建Windows安装程序的cargo子命令 的子命令,它使用二进制项目的发行版中的构建Windows安装程序(msi)。 如果可以使用提供的应用程序提供代码签名证书,则它还支持对Windows安装程序进行签名。 快速...
  • 关于 直接从Linux或OS X盒中为Microsoft Windows创建安装程序包(MSI)的简便方法。 只需将您的WiX项目安装或下载到...只需以交互方式从映像运行容器,将主机目录与源代码绑定安装(即WiX项目),或使用数据容器,然后
  • wix独立版-签出此仓库以在github动作中构建wix项目 工作流程示例 name : .NET Core Build on : push : branches : [ main ] pull_request : branches : [ main ] jobs : build : runs-on : windows-latest ...
  • Wix使用整理(一)

    2014-06-05 17:11:00
    鉴于国内Wix 的普及和使用有限,这里将个人遇到得问题和解决方案记录下来,以便交流和相互促进。 Wix :全称 Windows Installer XML , 属于微软的一个开源项目,目标是使用 XML 语言灵活的定制具有各种功能的...

    由于工作需要,学习了一段时间Wix,总算小有起色。鉴于国内Wix  的普及和使用有限,这里将个人遇到得问题和解决方案记录下来,以便交流和相互促进。

        

       Wix :全称 Windows Installer XML , 属于微软的一个开源项目,目标是使用 XML 语言灵活的定制具有各种功能的安装包,需要微软的 Windows Installer 服务支 持。
       Wix 生 成的产品为 msi 文 件,这种可执行文件与 exe 文件最大的不同为,它更底层,安装文件的同时可以对系统或者其他软件进行设置。
      下面的所有内容是基于 Wix3.0 版本。

     

     

        Wix 基本入门资料:

        Wix Document

        Wix tutorial ( 仅支持到 Wix2.0)

        这两份资料都可以通过 Wix 的发布网站获取。

     

     

     

    1)         Language Codepage 的设置

    Language 指所在地区使用的语言,为数字编号。 Codepage 指所在地区的代码页,用来进行 区域区分。 下来列举几个常见的区域代号: 语言                                语言 - 国家      Language       Codepage English                            en-us             1033                1252 Simplified Chinese             zh-cn              2052               936 Traditional Chinese            zh-tw              1028                 950

    2)         GUID 的生成

    在 VS2005 中,通过 “ 工具 ”——“ 创建 GUID” 生成。 GUID 也可以自行定义,但是前提是要保证唯一。

    3)         安装文件描述 XML 自动生成

    当安装文件特别多的时候,我们 就需要用专用的工具进行文件描述 XML 的自动生成了,采用的是 Wix 自带的 heat 工具,位于安装目录的 bin 下。     Heat 的使用方法为:     heat.exe [-?] harvestType < harvester arguments> -out sourceFile.wxs     详细见 Wix 说明文档。     例子:     heat.exe  dir ABC -gg -ke -sfrag  -template:fragment -dr INSTALLLOCATION -cg BasicComponentGroup -srd  -out  ABC.wxs     作用为:将目录 ABC (相对目录)下的所有文件(包括空目 录)作为一个 ComponentGroup 添加到 ABC.wxs 文件中,其中根目录为 INSTALLLOCATION ,段标签为 fragment , 运行这行命令会自动生成一个 wxs 文件,里面包含 ABC 目录下所有文件的描述。

    4)         Feature 的选择安装

    Wix 安装包中所有的组件都是以 Feature 的方式安装到系统中的, Level 是安装级别,是最重要的属性之一,不可缺少。     Level 的值为整型,最小为 0 ,最大 1000 。为 0 的时候此 Feature 不安装。  一般来 说 Level 与选 择安装关联,与之相对应的一个属性为 INSTALLLEVEL ,默认为 1. 小于 1 的 Feature 将不会被安装。 Level 值为 3 的 Feature 为 Typical 类型, Level 值大于 3 为 Complete 类型。 Level 也可以在安装时动态修改,使用 <Condition> 条件判断。例如: <Feature  Id="DesktopFt" Title="Desktop" Level="1">         <Condition  Level="0"><![CDATA[HASDESKTOP <> "1"]]></Condition>         <ComponentRef Id="DesktopShortcutComponent"/>   </Feature>     如果 HASDESKTOP 属性值不为 1 ,那么此 Feature 的 Level 将为 0 ,不会被安装。使用此种方式选择安装需注意 HASDESKTOP 属性的初始化位置,一定要保证在 Feature 初始化前进行。否则设置无效。     也可以采用另一种方法选择性安 装:     HASDESKTOP 属性修改的地方添加 <Publish> 。       <Publish Event="AddLocal"  Value="ALL">1</Publish>       <Publish Event="Remove"  Value="DesktopFt"><![CDATA[HASDESKTOP <>  "1"]]></Publish>     这样效果一样,但是不需要 HASDESKTOP 的值的初始化在 Feature 之前。     详细参考 http://www.joyofsetup.com/2007/05/30/feature-conditions-and-ui/ ( 附注:    注意此种方式下内置属性 REMOVE 的值就不再为空,那么在安装时也不能以 REMOVE 来判断当前操作 )

    5)         Property 的使用

    Wix 中使用自定义变量的方法为声明 Property (属性)。 Property 分为两种:全局的和局部的。全 局属性必须全部大写,否则视为局部属性。 例如: <Property  Id="HASDESKTOP" Value="1"/> 如果改为小写,那么其他文件(也许是 fragment )的代码调用属性无效。 搜索、判断得到的属性一律为全局 属性,大写。例如: <Property Id="VC71PATH">        <RegistrySearch Id="VC71" Type="raw" Root="HKLM"  Key="SOFTWARE\Microsoft\VisualStudio\7.1" Name="InstallDir"/> < /Property> 上述例子为在注册表中查找 VC71 的 InstallDir 的值,如存在将值付给 VC71PATH ,不存在则 VC71PATH 为空。

    6)         安装包的中文化

    Wix 默认的语言为 en-us ,中文化需要另外添加 zh-cn 或 zh-tw 的描述文件。 拥有了中文拓展的文件以后,在代码中使用 loc 调用属性即可,使用方式与 en-us 无异。 当然也可以自定义一些中文化的标签,格式为: <WixLocalization Culture="zh-cn"  xmlns="http://schemas.microsoft.com/wix/2006/localization"> < String Id="LicenseThirdPartText" Overridable="yes"> 请仔细阅读以下声明 </String> < /WixLocalization> 调用方式为: text  =”!(loc.LicenseThirdPartText)”

    中文语言包下载地址为:http://download.csdn.net/salever

    7)         内置 CustomAction 的使用

    1. Quiet Execution Custom  Action 安静模式下执行操作。允许用户在后台执行一些命令,但是不 出现执行窗口。     例 1 ,安静模式下执行 CMD 操作  <Property Id="QtExecCmdLine" Value="command line to run"/> < CustomAction Id="QtExecExample" BinaryKey="WixCA" DllEntry="CAQuietExec"  Execute="immediate" Return="check"/> < InstallExecuteSequence>       <Custom Action="QtExecExample"  After="TheActionYouWantItAfter"/> < /InstallExecuteSequence> 采用安静模式执行 CMD 操作,但是不出现 CMD 命令窗口。注意 Value 中的命令以及应用程序必须加引 号,即使没有空格也要加上。
    例 2 ,安静模式下执行其他应用程序操作 <CustomAction I d="QtExecDeferredExampleWithProperty_Cmd"  Property="QtExecDeferredExampleWithProperty"                Value=""[#MyExecutable.exe]"" Execute="immediate"/> < CustomAction Id="QtExecDeferredExampleWithProperty" BinaryKey="WixCA"  DllEntry="CAQuietExec"               Execute="deferred"  Return="check" Impersonate="no"/>
    < InstallExecuteSequence>     <Custom Action="QtExecDeferredExampleWithProperty_Cmd"  After="CostFinalize"/>     <Custom  Action="QtExecDeferredExampleWithProperty"  After="TheActionYouWantItAfter"/> < /InstallExecuteSequence>
    2.ShellExecute CustomAction 执行打开文档或 URL 等操作。典型应用为安装完成后打开帮助 文件或则运行安装程序。 例: <Property Id="WixShellExecTarget" Value="myapplication.exe"  />     <CustomAction Id="LaunchApplication"          BinaryKey="WixCA"         DllEntry="WixShellExec"          Impersonate="yes" />     </Product>

    转载于:https://www.cnblogs.com/zjoch/p/3770737.html

    展开全文
  • 您可以在没有任何本地设置的情况下为每个项目使用不同的版本/配置; 支持多种平台:Windows,Linux和OSX; 提供不断更新的MySql的多个版本-5.5、5.6、5.7、8.0; 所有受支持的OS(x86 / x64)和版本(5.5、5.6、...
  • WiX的核心是一组构建工具,它们使用与产品其余部分相同的构建概念构建Windows Installer程序包:编译源代码然后链接以创建可执行文件; 在这种情况下,.exe安装包,.msi安装包,.msm合并模块和.msp补丁。WiX命令行...
  • 最近由于项目需要,需要给客户制作安装程序,一开始使用vs2005自带的打包工程来打包,但了一段时间发现vs打包太死板,而且使用起来问题很多。收费的商业打包工具不在我考虑范围内,于是在网上找到了wix,稍微了解...


     1.1 wix简介

            wix是微软Windows Installer XML的缩写,WiX 的源代码是使用 XML 文件编写的,然后经过预处理、编译与链接,以创建 Windows Installer 数据库。我们可以在命令行上使用 WiX 工具集或使用 MSBuild,来编译与链接 WiX 源代码,而且如果我们安装wix之前已经安装了了Visual Studio(vs2005或者vs2008,据说vs2010已经集成了wix3.0),则还可以在Visual Studio IDE环境中生成安装项目。

            这里我们主要讨论命令行方式使用wix工具集,在第七章会提到如何使用在vs环境下使用wix;wix最常用的两个命令就是candle和light, candle是用来编译wix源文件的,light是用来链接编译后的中间文件生成msi安装包。为了了解他们的作用,我们看看wix怎么生成安装包的。


    1.2 安装wix

            首先,我们需要到网上下载一个wix安装文件,下载地址:http://wix.sourceforge.net/ ,这里我们下载的版本是WiX v3.0 released,以下所有示例程序都是运行在这个版本下的。

            wix是用C#写的,安装wix之前,必须安装.NET Framework 2.0 和 Service Pack 1 ,这是wix 工具集运行环境必须的,但并不意味着安装应用程序的机器上就一定需要使用Net Framework运行环境,这取决于你的应用程序使用的开发语言环境。使用wix不仅可以打包.Net应用程序,也可以打包Java应用程序和其他语言开发的应用程序。

            在开始使用wix之前,我们需要先下载 示例源码,这些示例都来自WiX tutorial,里面每个示例在WiX tutorial中都有详细说明;大家会发现WiX tutorial中有些地方比较难理解,可能是因为里面涉及到一些msi sdk的知识,文中并没有详细说明,我也是刚接触wix和msi不久,文中对有些概念可能会有理解不准确的地方。该文都是我学习和使用wix的经验,考虑到wix初学者,刚开始会尽量介绍的详细些。


     1.3 生成Samplefirst示例安装包

            我们先来了解他们的用法,在示例源码中找到SampleFirst,用vs或者其他文本编辑器打开SampleFirst.wxs,将其中的每个YOURGUID-XXXX-XXXX-XXXX-XXXXXXXXXXXX 替换成唯一的GUID标识,我们可以使用vs自带的GUID生成器,在vs工具菜单下选择创建GUID,必须确保每个GUID都是唯一的(注意这里可以GUID既可以是带大括号的,也可以不带大括号)。接着我们可以编译了,编译之前最好将C:/Program Files/Windows Installer XML v3/bin目录设置到系统的环境变量path中,这样我们在任何目录下都可以执行命令了,在命令提示符下,我们执行以下命令进行编译:

    candle.exe Samplefirst.wxs

    执行成功后会在当前目录下生成SampleFirst.wixobj文件,接着我们执行light命令:

    light.exe Samplefirst.wixobj

    light命令执行成功后我们就可以看到生成的安装文件SampleFirst.msi,这样一个简单的msi安装包就制作成功了。


    1.4 SampleFirst代码  

            SampleFirst示例展示了最基本的wix应用,如果想要生成功能更丰富的安装包,还必须知道如何编写wix代码;wix源代码是标准的xml标记语言,我们打开SampleFirst.wxs文件,来看看代码的构成:

            <Product>标签是我们发布的产品的基本信息,LanguageCodepage是设置我们生成安装包的语言环境,以后章节我们会详细讲到本地化语言的配置;NameManufacturer很好理解;需要注意的是IdUpgradeCode属性,他们是具有唯一标识的GUID编号,还有Version属性是发布产品的版本号(不包括修订版本号)。

            <Package>标签的ID也是具有唯一标识的GUID编号,所不同的是对于每次生成的安装包,我们都需要一个不同GUID,因此这里设置成*号,每次编译时时候编译器会自动为它生成一个GUID,关于这几个属性的作用我们将在制作升级程序和更新包的时候详细讲解。Description属性是安装包的全名或者叫描述;Comments可以理解成是注解,它是可选的;InstallerVersion则是指定运行该安装包所需要的Windows Installer的最低版本;Compressed指定是否压缩安装包中的文件,一般我们都设置成yes,可以节省不少空间。

            <Media>标签设置文件存储方式,Cabinet是压缩包的名称,它必须和Package的Compressed属性配合使用,如果不设置Cabinet和EmbedCab属性,则Compressed必须设置为no;EmbedCab决定压缩包是否嵌入到安装文件中(.msi);如果安装的文件比较多比较大,我们也可以定义多个Media,将不同文件压缩到不同的Media中。

            <Property>标签我们可以看成一个静态的变量,它的值是它的Value属性,一般的Property 我们在安装过程中以至于自定义的Action中都可以改变和使用它的值,后面我们会陆续介绍。  

            <Directory>标签囊括了所有要安装的内容,包括应用程序,快捷方式,动态链接库,文档,注册表信息等;<Directory>嵌套代表了安装程序的目录结构:

            关于最上层的Directory,它包含一个预定义的标识符”TARGETDIR”,而且它的Name也是预定义的值”SourceDir”;TARGETDIR是所有Directory目录的父目录,在每个Package安装包中必须包含一个并且只能有一个TARGETDIR Directory。
            第二层的Directory标识符是ProgramFilesFolder,它也是一个预定义的标识,它指定软件默认的安装目录在系统盘的Program Files目录下; 
            第三层是我们自定义的Directory,默认情况它会在它的上一级Directory(ProgramFilesFolder )下生成一个自定义的目录,目录名是Name属性的值;
            最底层Directory标示符是INSTALLDIR,也是我们自定义的,根据我们的定义,默认情况下程序会安装在以下目录:系统盘符C:/Program Files/Acme/Foobar 1.0/;INSTALLDIR的属性值是安装文件的绝对路径,在默认情况下它的值依赖于我们定义的目录结构,如果在安装过程中我们改变了安装路径,则INSTALLDIR属性值也会改变,此时它将不依赖于我们定义的目录结构,而将取决于我们选择的安装路径。
            这里要注意的是,INSTALLDIR和ProgramFilesFolder是Directory的一个标识符,实际上我们定义的所有Directory的标识符都可以看做一个是Property 属性;而ProgramFilesFolder是Windows Installer中自带的一个Property 属性,Windows Installer 会在启动时设置它的值;同样,Windows Installer 也会设置INSTALLDIR的值,也可以在其他地方引用它,即使你没有显式定义一个INSTALLDIR Property。(关于Windows Installer 提供的属性列表,可以在msi sdk document中查到,参考Property Reference;从其中我们可以看到下面的ProgramMenuFolder和DesktopFolder都是Windows Installer 已经提供的属性。) 
            另外这里Directory的默认的INSTALLDIR值是根据目录结构自动计算出来的,如果我们要将某些文件安装在固定位置,比如E盘根目录下,则我们需要在显式定义一个Property ,Property 的Value属性就是要存放目录的位置。大家可以尝试一下在Fragment下添加如下代码,会出现什么效果:

    <Property Id ="INSTALLDIR" Value="E:/"/>    
     ProgramMenuFolder Directory中定义了安装在开始菜单->程序中的快捷方式。
            <Component>标签中定义所有要安装的元素,它的子元素可以是File(文件)、Shortcut(快捷方式)、RemoveFolder、RegistryValue(注册表键)等,一个Component可以包含多个子元素,但是必须有一个并且只能有一个元素的KeyPath='yes' 。
             <Feature>标签是定义安装的部件,我们可以将不同用处的安装文件放到不到的Feature部件中,然后在安装过程中定制安装不同的部件,关于Feature的具体功能和部件定制在第2章介绍用户界面时详细介绍;
            <Icon>标签定义的图标文件,这是应用程序执行文件里的图标,也可以是单独的图标文件。
     
      1.5 优化后的Sample代码  
             为了增加源文件的可读性,我将SampleFirst源文件做了一些优化,对照SampleFirst,我们来看看有什么变化: 

    <Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>       
    <Product Name='Foobar 1.0' Id='{2C9A3180-95F0-4cdd-B02C-A0ABCAAE3413}' UpgradeCode='{F4F8195E-E907-42dd-BB90-CC2403FA7384}' Language='1033' Codepage='1252' Version='$(var.Version)' Manufacturer='Acme Ltd.'>               
    <Package Id='*' Keywords='Installer' Description="Acme's Foobar 1.0 Installer" Comments='Foobar is a registered trademark of Acme Ltd.' Manufacturer='Acme Ltd.'  InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />              
    <Media Id='1' Cabinet='Sample.cab' EmbedCab='yes' DiskPrompt="CD-ROM #1" />           
    <Property Id='DiskPrompt' Value="Acme's Foobar 1.0 Installation [1]" />              
     <Icon Id="Foobar10.exe" SourceFile="$(var.Version)/FoobarAppl10.exe" />           
     <Icon Id="word.ico" SourceFile="$(var.Version)/word.ico" />               
     <Feature Id='Complete' Title='Foobar 1.0' Description='The complete package.' Display='expand' Level='1' ConfigurableDirectory='INSTALLDIR'>  
     <Feature Id='MainProgram' Title='Program' Description='The main executable.' Level='1'>                   
     <ComponentGroupRef Id='MainCompGroup' />                   
     <ComponentRef Id='compHelperLibrary' />               
     </Feature>              
     <Feature Id='Documentation' Title='Description' Description='The instruction manual.' Level='1000'>                  
     <ComponentRef Id='compManual' />              
     </Feature>          
     </Feature>           
     </Product>      
     <Fragment>          
     <ComponentGroup Id ="MainCompGroup">               
     <Component Id='compMainExecutable' Guid='{0008EE68-EA36-4d5d-8BC5-713029E1909A}' Directory='INSTALLDIR'>                   
     <File Id='filFoobarEXE' Name='FoobarAppl10.exe' DiskId='1' Source='$(var.Version)/FoobarAppl10.exe' KeyPath='yes'>                       
     <Shortcut Id="startmenuFoobar10" Directory="ProgramMenuDir" Name="Foobar 1.0" WorkingDirectory='INSTALLDIR' Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />                       
     <Shortcut Id="desktopFoobar10" Directory="DesktopFolder" Name="Foobar 1.0" WorkingDirectory='INSTALLDIR' Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />                   
     </File>               
     </Component>               
     <Component Id="compProgramMenuDir" Guid="{6886685C-E1B1-48d9-B6A7-548175BD8F17}" Directory="ProgramMenuDir">                  
     <Shortcut Id="UninstallProduct"  Name="Uninstall My Application" Directory="ProgramMenuDir" Target="[SystemFolder]msiexec.exe" Arguments="/x [ProductCode]" Description="Uninstall"/>                   
     <RemoveFolder Id='rmvProgramMenuDir' On='uninstall' />                   
     <RegistryValue Root='HKCU' Key='Software/[Manufacturer]/[ProductName]' Type='string' Value='' KeyPath='yes' />               
     </Component>           
     </ComponentGroup>           
     <ComponentGroup Id='ExtraGroup'>               
     <Component Id='compHelperLibrary' Guid='{A30DAC3F-2902-479c-B530-B90A7BA8E514}' Directory='INSTALLDIR'>                   
     <File Id='filHelperDLL' Name='Helper.dll' DiskId='1' Source='$(var.Version)/Helper.dll' KeyPath='yes' />               
     </Component>                   
     <Component Id='compManual' Guid='{25518565-2E48-415c-B4FD-A20E2EA869D5}' Directory='INSTALLDIR'>                   
     <File Id='filManual' Name='Manual.pdf' DiskId='1' Source='$(var.Version)/Manual.pdf' KeyPath='yes'>                       
     <Shortcut Id="startmenuManual" Directory="ProgramMenuDir" Name="Instruction Manual" Icon="word.ico" Advertise="yes" />                   
     </File>               
     </Component>           
     </ComponentGroup>       
     </Fragment>       
     <Fragment>           
     <Directory Id='TARGETDIR' Name='SourceDir'>               
     <Directory Id='ProgramFilesFolder' Name='PFiles'>                   
     <Directory Id='ManufacturerDir' Name='Acme'>                       
     <Directory Id='INSTALLDIR' Name='Foobar 1.0'>                       
     </Directory>                   
     </Directory>               
     </Directory>                             
     <Directory Id="ProgramMenuFolder" Name="Programs">                   
     <Directory Id="ProgramMenuDir" Name="Foobar 1.0">                   
     </Directory>               
     </Directory>                              
    <Directory Id="DesktopFolder" Name="Desktop" />           
    </Directory>       
    </Fragment>   
    </Wix>

            首先,为了方便版本管理,我把Product的Version属性改成变量形式,在candle命令中将Version的值传给编译器进行解析,这样我们不用在每次编译之前都去检查和修改源文件中的版本号了,而且我们以后会在源文件中多次使用这个版本号(特别是在发布升级包或更新补丁时),也可以减少出错的概率。

            接着我们可以看到多出来2个跟Product并列的Fragment标签,它们是一些代码片段,这里跟SampleFirst很不一样,我们把SampleFirst中的一些结构搬到了Fragment中,但这并不影响我们最终生成安装包;我们可以使用*Ref元素来引用Fragment中定义的元素,比如我们把SampleFirst中复杂的Directory嵌套放到Fragment中,一切都显得更清晰明了了。
            我们再看另一个Fragment标签,我把所有的Component都放在这里面,而且可以根据不同的模块分成多个ComponentGroup,与SampleFirst中不同的是,这里所有的Component标签并非嵌套在Directory标签中,因此所有的Component都需要指定Directory属性,它是我们之前定义的Directory的Id标识符; 
            为了避免跟其他属性混淆,这里我把元素的id等属性做了修改,对于Component compMainExecutable ,它包含执行文件File filFoobarEXE和文件的快捷方式,我们可以在File标记下直接使用Shortcut定义快捷方式,可以看到他是一个advertised Shortcut,因此Component的KeyPath可以是FILE;
            而对于Component compProgramMenuDir ,它包含3个子元素:
            UninstallProduct Shortcut会在ProgramMenuDir下给我们安装程序添加一个卸载程序的快捷方式;
            RemoveFolder 标签告诉我们会在uninstall的删除这个目录;我们可以看到Shortcut和RemoveFolder 标签都没有KeyPath属性,而Component必须有一个包含KeyPath的子标签,另外这里不能File 作为KeyPath,因为对于UninstallProduct  Shortcut来说,因为指定了Target属性,所以他是一个non-advertised Shortcut,必须使用注册表键作为KeyPath;
            一开始,对于Shortcut标签的advertised 属性感觉很是费解,后来仔细推敲了下,大概是这个意思:对于应用程序(filFoobarEXE)的快捷方式,它是通过ProductCode来标识的,只属于当前的软件产品,不能在不同应用程序之间共享,所以此时advertised 等于yes;而对于卸载程序(msiexec.exe),它是Windows Installer自带的卸载程序,可以被任何安装程序共享使用,所以advertised 等于no,但同时必须指定卸载程序的路径Target。一般来说,如果指定了Target属性,我们就认为它属于non-advertised
            到这里我把大家容易出现编译问题的地方都说明了一下,如果仍遇到问题可以参考Wix Help文档和msi sdk document。

            最后我们回到Product标签,这里有两个Icon,Foobar10.exe Icon 使用的是执行文件的Icon,我们在Shortcut中使用IconIndex 
    指定Icon;另一个Icon是文件Icon,我们可以复制一个word.ico到我们打包目录下,在Shortcut中只需指定Icon的标识符就可以了。
            至于Feature标记的作用,我们在下一章节再讲,下面我们来编译链接我们的源文件。
            我们在编译源代码之前,先新建一个版本目录1.0.0,所有要安装的文件均放在该目录下,该版本的安装包也会生成到该目录,将前面我给的代码复制到编辑器中,保存到该目录下Sample.wxs文件中;源代码中FILE和Icon 中的Source属性就是源文件的路径,这里我们都使用的相对路径。

            所有准备工作都已经做完了,在Sample.wxs 所在的目录执行candle命令进行编译,将Version属性传给编译器:

    candle.exe -dVersion=1.0.0  Sample.wxs -out 1.0.0/

            与WiX tutorial中不同的是,这里我们需要指定输入文件和输出文件的路径,这样方便我们以后制作升级包的时候区分不同版本.
            然后执行light命令进行链接,生成msi安装包。
    light.exe -out 1.0.0/Sample.msi 1.0.0/Sample.wixobj 
            下一章节,我们将介绍如何定义安装时用户界面,以及如何进行语言本地化的操作。


    展开全文
  • WiX v3.10.3

    2017-09-01 13:16:57
    WiX v3.10.3是WiX v3.10最新推荐的维护版本; 它包含WiX v3.10.2中的严重Windows漏洞影响所有捆绑包和缓解引入的回退的缓解措施。
  • 关于WiX工具集的C#接口的文章
  • WIX制作C#应用程序安装包
  • 使用123FormBuilder提交收集的数据推送到Wix代码 使用此存储库,您将能够将使用123FormBuilder提交接收的数据推送到Wix Code数据库。 请使用。 一切都进行了详细说明,屏幕截图也可以为您提供帮助。 有关支持的...
  • wix

    2020-01-03 16:00:27
    文章目录如何使用wix制作安装程序1.1 wix简介1.2 安装wix1.3 生成Samplefirst示例安装包1.4 SampleFirst代码1.5 优化后的Sample代码参考链接用户界面和本地化操作2.1 使用wix用户界面安装时填写注册表一 Microsoft...
  • Wix使用整理(二)

    2014-06-05 17:14:00
    Wix 制作的 Installer 的调试很麻烦,没有直接的 Bug 工具,可以通过记录安装日志的方式进行间接调试。命令为 msiexec /i package.msi /l log.txt 详细参考: msiexec /Option &lt;Required Parameter&gt; ...
  • WiX完全xml描述,使用命令行来生成。只要任何一个文本编辑器就可以了。但是为了开发效率,我们还是借助于辅助工具比较好。是一般使用的工具是两个:一个Visual Studio插件,在WiX的安装包里面附带,另一个就是...
  • ifttt-wix-stores 将IFTTT集成到Wix商店
  • 个人网站:我会在业余时间使用个人网站; 我想从我当前的Wix网站迁移到该网站
  • Wix Restaurants JSON实用工具 在顶部实现类似于JavaScript的接口:JSON.stringify,JSON.bytify,JSON.parse。 支持标准的Java和Scala对象。 安装 Maven用户 将此依赖项添加到项目的POM中: < groupId>...
  • wix3.11 .exe

    2019-08-26 15:54:43
    WiX v3.11.exe 是最新推荐的维护版本
  • WiX Toolset v3.7

    热门讨论 2013-04-29 09:22:00
    WiX Toolset v3.7 The most powerful set of tools available to create your Windows installation experience. Free and Open Source since 2004!
  • wix教程wix教程

    热门讨论 2011-04-14 23:09:46
    wix教程wix教程wix教程wix教程wix教程wix教程

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,702
精华内容 1,480
关键字:

wix怎么用