使用维克斯/ Burn开始安装应用程序后,(Start application after inst

2019-08-01 08:29发布

我知道的WiX的MSI类似的问题,但我有开始创建一个引导程序的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>

Answer 1:

您可以将变量添加到您的包称为“LaunchTarget”与您要运行的可执行文件的路径:

<Variable Name="LaunchTarget" Value="[InstallFolder]\path\to\file.exe"/>

安装后,安装成功的屏幕上会显示一个“启动”按钮将启动您的应用程序。



Answer 2:

它有许多步骤。 还记得我是从一个引导程序,而不是一个MSI文件,从而levarius的回答就足以运行此。

基本上,我删除任何被张贴在原来的问题推出的逻辑,并创建了一个新包,其唯一的功能是揭开序幕的应用程序(使用自定义操作),其位置以前一直保存在注册表中 - 也就是说,在运行的时候才发现有更新可用的应用程序,在注册表中设置此项目。

该软件包(以下称为安装后),然后运行只有在其他包的一个已经预先安装 - 通过在注册表中(在每个产品的MSI设置)键的存在找到。 这意味着,任何应用程序将被后一个新的自动启动安装已完成。

以下是从引导程序包(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>


Answer 3:

使用在维克斯说明书,给出的建议如何:运行已安装的应用程序安装后 。 有一个内置的WiX的扩展,将您处理该问题。 您应该能够引用的WiX的Util扩展,下面的代码添加到您的项目(当然替换的属性的值),然后安排行动来运行:

<Property Id="WixShellExecTarget" 
          Value="[#myapplication.exe]" />
<CustomAction Id="LaunchApplication" 
              BinaryKey="WixCA" 
              DllEntry="WixShellExec" 
              Impersonate="yes" />


文章来源: Start application after installation using WiX/Burn