我知道WiX MSI中存在类似的问题,但是我在安装后使用Burn创建的引导程序EXE文件中启动应用程序时遇到问题。我的完整包在下面。
如果它对场景有任何影响,则引导程序以被动模式启动,因此用户不需要按任何内容。
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Bundle Name="My Company AutoUpdater"
Version="1.0.11"
Manufacturer="My Company"
UpgradeCode="--GUID--">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkLicense">
<bal:WixStandardBootstrapperApplication SuppressOptionsUI="yes"
LicenseUrl=""
LogoFile="logo.png" />
</BootstrapperApplicationRef>
<Chain>
<MsiPackage SourceFile="..\App1\bin\Release\App1.msi" />
<MsiPackage SourceFile="..\App2\bin\Release\App2.msi" />
</Chain>
</Bundle>
<Fragment>
<Property Id="WixShellExecTarget"
Value="[#C:\Program Files (x86)\My Company\App1.exe]" />
<Binary Id="MyCA"
SourceFile="[#C:\Program Files (x86)\My Company\App1.exe]"/>
<CustomAction Id="LaunchApplication"
BinaryKey="MyCA"
ExeCommand="-switch"
Execute="deferred"
Return="check"
HideTarget="no"
Impersonate="no" />
<InstallExecuteSequence>
<Custom Action="LaunchApplication"
After="InstallFiles" />
</InstallExecuteSequence>
</Fragment>
</Wix>
答案 0 :(得分:17)
您可以向Bundle中添加一个名为“LaunchTarget”的变量,其中包含您要运行的可执行文件的路径:
<Variable Name="LaunchTarget" Value="[InstallFolder]\path\to\file.exe"/>
安装完成后,“安装成功”屏幕将显示“启动”按钮,该按钮将启动您的应用程序。
答案 1 :(得分:5)
它有很多步骤。记住我是从一个引导程序运行它,而不是一个MSI文件,levarius的答案就足够了。
基本上,我删除了原始问题中发布的任何启动逻辑,并创建了一个新包,其唯一功能是启动应用程序(使用自定义操作),其位置先前已保存在注册表 - 也就是说,当应用程序发现更新可用时运行,请在注册表中设置此项。
然后,如果先前已经安装了其他软件包之一,则会运行该软件包(以下称为PostInstall) - 通过注册表中存在密钥(在每个产品的MSI中设置)找到。这意味着新安装完成后,将不会自动启动任何应用程序。
以下内容来自bootstrapper软件包(在我的情况下为WiX 3.6)
<!-- Determine what items are installed in the event of an upgrade-->
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\CompanyName"
Value="ProductAInstalled"
Variable="ProductAInstalled"
Result="exists"
Format="raw" />
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\CompanyName"
Value="ProductBInstalled"
Variable="ProductBInstalled"
Result="exists"
Format="raw" />
<Chain>
<!-- Package for .NET prerequisite. References a Package that is
actually in the referenced WiX file WixNetFxExtension. -->
<PackageGroupRef Id="NetFx40Web"/>
<MsiPackage SourceFile="..\SetupProductA\bin\Release\SetupProductA.msi"
InstallCondition="(chkProductA) OR (ProductAInstalled)" />
<MsiPackage SourceFile="..\SetupProductB\bin\Release\SetupProductB.msi"
InstallCondition="(chkProductB) OR (ProductBInstalled)" />
<!-- Run PostInstall only if this was run as part of an upgrade. -->
<!-- NB: This is the portion that kicks off the downloaded bootstrapper. -->
<MsiPackage SourceFile="..\PostInstall\bin\Release\PostInstall.msi"
InstallCondition="(ProductAInstalled) OR (ProductBInstalled)" />
</Chain>
答案 2 :(得分:4)
使用WiX手册 How To: Run the Installed Application After Setup 中提供的建议。有一个内置的WiX扩展,将为您处理此问题。您应该能够引用WiX Util扩展,将以下代码添加到项目中(当然替换属性的值),然后安排要运行的操作:
<Property Id="WixShellExecTarget"
Value="[#myapplication.exe]" />
<CustomAction Id="LaunchApplication"
BinaryKey="WixCA"
DllEntry="WixShellExec"
Impersonate="yes" />