10

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

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

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

我还尝试过 DotNetInstaller,它有自己的一系列问题,用户界面令人困惑。我也尝试过 setupbld,它不支持带有外部 cab 的 MSI。

4

3 回答 3

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

于 2013-07-15T14:51:32.300 回答
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 /? 获取您机器上的详细信息。

于 2013-07-31T12:02:23.803 回答
-4

您可以使用自定义操作和刻录内置变量来检查您是在 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" />
于 2013-02-26T03:42:45.423 回答