19

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>
4

3 に答える 3

19

実行する実行可能ファイルへのパスを使用して、「LaunchTarget」という変数をバンドルに追加できます。

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

インストール後、[セットアップ成功]画面に、アプリを起動する[起動]ボタンが表示されます。

于 2012-10-11T18:02:57.020 に答える
5

それにはいくつかのステップがありました。これをMSIファイルではなくブートストラッパーから実行していたことを思い出してください。これにより、levariusの答えで十分でした。

基本的に、元の質問に投稿された起動ロジックをすべて削除し、新しいパッケージを作成しました。このパッケージの唯一の機能は、(カスタムアクションを使用して)アプリケーションを起動することであり、その場所は以前にレジストリに保存されていました-つまり、更新が利用可能であることが検出されたときに実行されているアプリケーションは、この項目をレジストリに設定します。

パッケージ(以下ではPostInstallと呼ばれます)は、他のパッケージの1つが以前にインストールされている場合にのみ実行されます-レジストリ内のキー(各製品の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>
于 2013-03-28T13:07:10.477 に答える
4

WiXマニュアルの「方法:セットアップ後にインストール済みアプリケーションを実行する」に記載されているアドバイスを使用してください。これを処理する組み込みのWiX拡張機能があります。WiX Util拡張機能を参照し、プロジェクトに次のコードを追加して(もちろん、プロパティの値を置き換えて)、実行するアクションをスケジュールできるはずです。

<Property Id="WixShellExecTarget" 
          Value="[#myapplication.exe]" />
<CustomAction Id="LaunchApplication" 
              BinaryKey="WixCA" 
              DllEntry="WixShellExec" 
              Impersonate="yes" />
于 2012-10-10T22:40:49.517 に答える