我们决定从VS集成设置切换到WiX.
但是,我们目前所做的是使用项目输出文件作为安装项目的输入.这使我们可以轻松地将应用程序文件添加到目录(对于图像,示例和其他资源......),并在构建时自动将这些文件添加到设置中.
我在WiX中找不到任何类似的功能.WiX似乎每个目录和文件都需要一个Directory条目和一个File条目.这将要求我们每次添加一个文件时都要更改WiX源,这在我看来是令人望而却步的,因为我们有很多这样的文件.
有什么综合方法可以用WiX做到这一点,还是我必须编写自己的任务,在调用蜡烛之前创建一个WiX源?
我有以下片段:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<ComponentGroup Id="Doc">
<ComponentRef Id="cmpCDCC386748AE7BEFE7C2F4E764390254" />
<ComponentRef Id="cmp6EC513AE37CCAE66CEA96577E2384AFA" />
<ComponentRef Id="cmp0C9D9450CB94FF74C6E29C1C3F6D16D5" />
<ComponentRef Id="cmp314DEE3E909157F47FDF963DCC04D2AC" />
<ComponentRef Id="cmpBC5FB761D7B0DA99F96ECA9A91DD4217" />
<ComponentRef Id="cmp6B9E4B7B6F710D7077171BCE0B96A90A" />
<ComponentRef Id="cmp5959CF1572C71417D536C491A996C6DE" />
<ComponentRef Id="cmpCC960E9F3DDDE1600206003C43FFE663" />
</ComponentGroup>
</Fragment>
<Fragment>
<DirectoryRef Id="AzureApplicationSDK">
<Directory Id="dir67745C9C3FA1B31D9AF8883D12D8FBD8" Name="Doc">
<Component Id="cmpCDCC386748AE7BEFE7C2F4E764390254" Guid="{A46C5689-42D1-41CA-AD71-B2A416FA9571}">
<File Id="fil3B7DFCD3444314759F8617411F7EE08C" KeyPath="yes" Source="SourceDir\Azure Applications SDK v1 Cascade Tables Getting Started Guide.docx" />
</Component>
<Component Id="cmp6EC513AE37CCAE66CEA96577E2384AFA" Guid="{697C1B04-5279-4B31-9600-F3BCA4C1AD06}">
<File Id="filFDDD2C48EF5C14BA924C4272E4D9D490" KeyPath="yes" Source="SourceDir\Azurite Identity.docx" />
</Component>
<Component Id="cmp0C9D9450CB94FF74C6E29C1C3F6D16D5" Guid="{1C61C6C5-60F0-41A5-B229-093419E5F767}">
<File Id="fil4C736D0525C45780C242DA3BCA6823BA" KeyPath="yes" Source="SourceDir\Mercurius messaging how-to.docx" />
</Component>
<Component …Run Code Online (Sandbox Code Playgroud) 当我尝试创建安装程序时,我收到以下错误:
该目录ProgramMenuDir位于用户配置文件中,但未在RemoveFile表中列出.
我该如何解决这个问题?以下是我使用的目录结构:
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="E">
<Directory Id="Monarch" Name="Monarch">
<Component Id="Monarch" Guid="*">
<RemoveFolder Id='Monarch' On='uninstall' />
<RemoveFolder Id='ProgramMenuDir' On='uninstall' />
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]'
Type='string' Value='' KeyPath='yes' />
</Component>
</Directory>
</Directory>
</Directory>
Run Code Online (Sandbox Code Playgroud) 我正在比较这两个工具.我的印象是:
你同意这种特征吗?还有什么其他差异?WIX#如何改变这个故事?由于Inno Setup不使用Windows安装程序,卸载有困难吗?根据命令,Inno Setup可以将安装降级到早期版本 - 还是只能安装/升级应用程序?
我正在创建一个主要使用WiX 3.6的安装包,因此我可以利用Burn自举功能.到目前为止,我有几个捆绑在一起的MSI软件包,它们将与内置的bootstrapper应用程序一起安装(WixStandardBootstrapperApplication.RtfLicense).
我已经读过Burn允许通过指定自定义来替换默认的bootstrapper应用程序UX.dll,但是我还没有找到描述自定义ux.dll构造方式的任何资源(也就是说,它如何与Burn引擎集成,什么我使用的技术,应该实现哪些接口等等.
我的目标是创建一个品牌引导程序,它可以从用户收集任意信息,并将该信息传递到各种捆绑的MSI文件,EXE文件等.
所以我真的有两个问题:
UX.dll?我开始使用WiX进行自动构建以创建我的c#项目的msi,并且遇到错误"Undefined preprocessor variable'$(var.MyProject.TargetDir)'"
我使用的是最新的WiX v3.0.5419.在我的wxs文件中,我试图使用此网页上列出的预处理器变量(http://blogs.msdn.com/jrock/archive/2008/01/29/complete-list-of-candle-preprocessor- variables.aspx)
<Component Id="MyId" Guid="MyGuid">
<File Id="MyId" Name="MyName" KeyPath="yes"
Source="$(var.MyProject.TargetDir)\MyName.dll" />
</Component>
Run Code Online (Sandbox Code Playgroud)
我已将MyProject的引用添加到.wixproj中,如果我在记事本中打开它,我可以看到引用.
<ItemGroup>
<ProjectReference Include="..\MyProject.csproj">
<Name>MyProject</Name>
<Project>{guid}</Project>
<Private>True</Private>
</ProjectReference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
这是我用来创建msi的nant构建脚本.也许是因为.wixproj知道构建中没有使用的项目引用?
<exec basedir="${tools.wix}" managed="true" program="candle.exe">
<arg line='-out "${tools.wix.objfile}"' />
<arg value="../MySetup.wxs" />
</exec>
Run Code Online (Sandbox Code Playgroud)
请问有人能开导我吗?
TL; DR:为什么我需要在这个条件组件中使用空 <CreateFolder/>元素才能使其工作?
我正在为一个内部应用程序组装一个简单的基于WiX的安装程序.此安装程序需要部署标准配置文件(普通.NET .config文件),然后使用msiexec在命令行上传递的属性对其进行自定义.
其中一个自定义是仅在已定义RUNTIME属性时才创建特定的应用程序设置.这是WiX组件:
<Component Id="C.Rbnz.Fsis.CollectionPeriodService.exe.config.runtime"
Guid="*">
<Condition>
<![CDATA[RUNTIME]]>
</Condition>
<CreateFolder/>
<util:XmlFile Id="X.Runtime.1"
Action="createElement"
ElementPath="/configuration/appSettings"
File="[#F.Rbnz.Fsis.CollectionPeriodService.exe.config]"
Name="add"
Sequence="2"/>
<util:XmlFile Id="X.Runtime.2"
File="[#F.Rbnz.Fsis.CollectionPeriodService.exe.config]"
ElementPath="/configuration/appSettings/add[\[]not(@key)[\]]"
Action="setValue"
Name="key"
Value="RunTime"
Sequence="3"/>
<util:XmlFile Id="X.Runtime.3"
File="[#F.Rbnz.Fsis.CollectionPeriodService.exe.config]"
ElementPath="/configuration/appSettings/add[\[]@key='RunTime'[\]]"
Action="setValue"
Name="value"
Value="[RUNTIME]"
Sequence="4"/>
</Component>
Run Code Online (Sandbox Code Playgroud)
这正如我想要的那样 - 如果在命令行上指定了RUNTIME,则会msiexec创建新元素; 如果没有,没有任何反应.
为什么我必须<CreateFolder/>在此组件中使用空?
当我试图让这个工作时,我找到了" Wix条件声明 ",它显示了一个工作组件,但没有解释为什么<CreateFolder/>是必要的.
删除<CreateFolder/>给我这个错误:
ICE18:组件的KeyPath:'C.Rbnz.Fsis.CollectionPeriodService.exe.config.runtime'是目录:'INSTALLDIR'.目录/组件对必须在CreateFolders表中列出.
一旦你知道这意味着什么,我相信,这是非常有用的.
我正在尝试为我的wix安装项目指定许可证.
我在wordpad/notepad/vs中创建了一个带有几个虚拟线的rtf,我尝试了几种不同的方式,因为我读到了一个问题,但是我不认为这应该适用于此,无论如何我也打开了它在记事本++中并验证其中没有隐藏的时髦字符.
我正在指定文件
<WixVariable Id="WixUILicenseRtf" Value="$(var.ProjectDir)\Resources\test.rtf" />
Run Code Online (Sandbox Code Playgroud)
该文件存在于project\Resources目录下.
当我运行安装程序时,许可证区域中显示的所有内容都是一个空白文本框,没有滚动条等.
还有什么我应该做的吗?
WiX非常棒,因为没有GUI,您只需编写您想要的安装程序即可.没有摆弄GUI向导!
但是,绘制GUI实际上是我更喜欢使用GUI的一件事.
那么,是否有出口WiX数据的对话绘图程序?
(我想其他方面也许我可以将Visual Studio的表单编辑器转换为WiX-XML.)
/ L
我试过了<UIRef Id="WixUI_Minimal" />,但是我得到了"Unisolved to WixUI:WixUIMinimal".我究竟做错了什么?
wix ×10
installer ×2
wix3.6 ×2
burn ×1
inno-setup ×1
installation ×1
msiexec ×1
paraffin ×1
preprocessor ×1
rtf ×1
votive ×1
windows ×1
wix3 ×1
wix3.5 ×1