WiX烧录引导x86和x64 msi到单个无UI引导程序

时间:2013-02-01 11:18:09

标签: installer wix 32bit-64bit bootstrapper burn

我有我的安装程序.msi的x64和x86版本,而想要发送一个只检查机器架构并运行x86 / x64 MSI的可执行文件。 MSI基本相同,它们安装相同的AnyCPU文件,我将其捆绑在一个共享的.cab文件中,以免使安装程序的大小加倍。

到目前为止,我已经尝试过WiX Burn,它会弹出一个我不想要的GUI(我只想使用MSI GUI),我尝试通过/ silent标志禁用刻录GUI - 这会传播此标志到MSI所以它禁用了MSI的所有GUI(不是我想要的)。

当我说没有默认的No-GUI版本的Burn bootstrapper 时,我认为我是正确的,要创建一个你必须自己编辑源代码?这听起来像是一个巨大的缺失特征?

我也尝试过DotNetInstaller,它有一套令人困惑的用户界面问题。我也尝试过使用外部驾驶室不支持MSI的setupbld。

3 个答案:

答案 0 :(得分:9)

对于体系结构检测,您可以使用MsiPackage元素中的InstallCondition属性。

简单地试试吧:

<MsiPackage SourceFile="..\Example\bin\Release\x86\example.msi" Compressed="no" InstallCondition="NOT VersionNT64" />
<MsiPackage SourceFile="..\Example\bin\Release\x64\example.msi" Compressed="no" InstallCondition="VersionNT64" />

来源: http://wix.sourceforge.net/manual-wix3/wix_xsd_msipackage.htm

答案 1 :(得分:1)

正如其他答案所示,您可以使用VERSIONNT64变量来检查您正在安装的平台。

Wix Burn通过传递命令行参数“-q”来支持NO-GUI或安静模式。

同时它也支持以下其他参数:

wixstdba仅支持“标准包交换机”:

-q, -quiet, -s, -silent = silent install 
-passive = progress bar only install 
-norestart = suppress any restarts 
-forcerestart = restart no matter what (I don't know why this is still around) 
-promptrestart = prompt if a restart is required (default) 
-layout = create a local image of the bootstrapper (i.e. download files so they can be burned to DVD) 
-l, -log = log to a specific file (default is controled by bundle developer) 
-uninstall = uninstall 
-repair = repair (or install if not installed) 
-package,-update = install (default if no -uninstall or -repair) 

输入你的wixburnexename /?要获取有关您机器的详细信息。

答案 2 :(得分:-3)

您可以使用自定义操作和Burn Built-in Variables来检查您是在X86还是x64上运行。基于此,您可以执行/安排操作列表。

<InstallExecuteSequence>
   <Custom Action="Windows32bitInstall" After="InstallFiles">NOT VersionNT64</Custom>
   <Custom Action ="Windows64bitInstall" After="InstallFiles" >VersionNT64</Custom>
   <Custom Action="InstallHelp" After="Windows64bitInstall">NOT Installed</Custom>
</InstallExecuteSequence>

这将以相同的高度执行。

<CustomAction Id="InstallHelp" Directory="ProgramFilesFolder"
          Execute="deferred" Impersonate="no" Return="ignore"
          ExeCommand="[HELPDIR]\help.exe /log" />