1

数日前から、Web から .Net 4.0 を使用して MSI インストーラーのブートストラップ EXE を作成しようとしていますが、助けが必要です。

シンプルな MSI があり、それを .Net4 にバンドルする必要があります。MSI には x64/x86 の 2 つのバリエーションがあり、通常の方法でバンドルで処理されます。

.Net4 が存在する場合、MSI は正常にインストールおよびアンインストールされます。素晴らしい。ブートストラップが完了すると、EXE が正常にインストールされ (実際、必要に応じて .Net4 にパッチが適用されます)、アプリが (意図したとおりに) 起動します。問題はアンインストールです。次のログで失敗します。

私は困惑しています。手がかりはありますか?

Bundle.wxs

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">

  <?ifdef env.BuildNumber ?>
    <?define VersionNumber= $(env.BuildNumber) ?>
  <?else ?>
    <?define VersionNumber="1.0.0.0" ?>
  <?endif ?>
  <?define UpgradeCode="{5C7CB098-A9BB-4ABC-9496-68B96C357270}"?>

  <!-- leaving name off Bundle would stop it appearring in Control Panel-->
  <Bundle Name="App.Net Desktop Bootstrapper" 
          Version="$(var.VersionNumber)" 
          Manufacturer="App.Net" 
          UpgradeCode="$(var.UpgradeCode)"
          Condition="((VersionNT >= v5.1) AND (ServicePackLevel >= 3)) OR ((VersionNT >= v5.2) AND (ServicePackLevel >= 2)) OR (VersionNT >= v6.0)"
          IconSourceFile="..\..\assets\App.NetDesktopIcon.ico">

    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkLicense"> <!-- hyperlink license form -->
      <!-- leave hyperlink url blank to prevent display -->
      <bal:WixStandardBootstrapperApplication 
        LicenseUrl=""
        SuppressOptionsUI="yes" 
        ThemeFile="..\..\assets\wixTheme\PipeInstaller.xml" 
        LocalizationFile="..\..\assets\wixTheme\MyTheme.wxl" />  <!-- setup custom theme -->
      <PayloadGroupRef Id="installPayload"/>   <!-- payload for images used in theme -->
    </BootstrapperApplicationRef>

  <PayloadGroup Id ="installPayload">
     <!-- Images referred to by name in theme -->
      <Payload Id="image1" Name ="header.png" SourceFile="..\..\assets\wixTheme\header.png" />
      <Payload Id="image2" Name ="install-smaller.png" SourceFile="..\..\assets\wixTheme\install-smaller.png" />
    </PayloadGroup>
    <Chain>
      <PackageGroupRef Id="NetFx40Web" />   <!-- bootstrap the /Net install from the web. This is build into Wix -->

      <!-- Set NOT Visible so it's viewable in Control Panel-->
      <MsiPackage
         Id="x86"
          SourceFile="..\..\bin\Win\x86\msi\App.Net.msi"
         InstallCondition="NOT VersionNT64"
         Visible="no">
        <!-- Override property values in the MSI -->
        <MsiProperty Name="AUTOUPDATEENABLED" Value="1" />
        <MsiProperty Name="AUTOSTART" Value="1" />
        <MsiProperty Name="CALLEDFROMEXE" Value="1" />
      </MsiPackage>

      <MsiPackage
          Id="x64"
          SourceFile="..\..\bin\Win\x64\msi\App.Net.msi"
          InstallCondition="VersionNT64"
          Visible="no">
        <!-- Override property values in the MSI -->
        <MsiProperty Name="AUTOUPDATEENABLED" Value="1" />
        <MsiProperty Name="AUTOSTART" Value="1" />
        <MsiProperty Name="CALLEDFROMEXE" Value="1" />
      </MsiPackage>
    </Chain>
    </Bundle>
</Wix>  

インストール エラー ログ

[0FAC:0348][2013-04-11T00:29:11]: Burn v3.6.3303.0, Windows v6.1 (Build 7601: Service Pack 1), path: C:\ProgramData\Package Cache\{c7e4c719-a2f5-46ab-8875-3bc46f059503}\App.Net.Setup.exe, cmdline: '/uninstall -burn.unelevated BurnPipe.{0ED581A2-B6CE-473D-AADF-46CF51E7DF81} {20A283F6-897C-4CFC-9718-89B0E4BD138E} 3888'
[0FAC:0348][2013-04-11T00:29:11]: Setting string variable 'WixBundleLog' to value 'C:\Users\IEUser\AppData\Local\Temp\App.Net_Desktop_Bootstrapper_20130411002911.log'
[0FAC:0348][2013-04-11T00:29:11]: Condition '((VersionNT >= v5.1) AND (ServicePackLevel >= 3)) OR ((VersionNT >= v5.2) AND (ServicePackLevel >= 2)) OR (VersionNT >= v6.0)' evaluates to true.
[0FAC:0348][2013-04-11T00:29:11]: Detect 3 packages
[0FAC:0348][2013-04-11T00:29:11]: Setting string variable 'NETFRAMEWORK40' to value '1'
[0FAC:0348][2013-04-11T00:29:11]: Condition 'NETFRAMEWORK40' evaluates to true.
[0FAC:0348][2013-04-11T00:29:11]: Detected package: NetFx40Web, state: Present, cached: Complete
[0FAC:0348][2013-04-11T00:29:11]: Detected package: x86, state: Present, cached: Complete
[0FAC:0348][2013-04-11T00:29:11]: Detected package: x64, state: Absent, cached: None
[0FAC:0348][2013-04-11T00:29:11]: Detect complete, result: 0x0
[0FAC:0348][2013-04-11T00:29:59]: Plan 3 packages, action: Uninstall
[0FAC:0348][2013-04-11T00:29:59]: Setting string variable 'WixBundleRollbackLog_x86' to value 'C:\Users\IEUser\AppData\Local\Temp\App.Net_Desktop_Bootstrapper_20130411002911_0_x86_rollback.log'
[0FAC:0348][2013-04-11T00:29:59]: Setting string variable 'WixBundleLog_x86' to value 'C:\Users\IEUser\AppData\Local\Temp\App.Net_Desktop_Bootstrapper_20130411002911_0_x86.log'
[0FAC:0348][2013-04-11T00:29:59]: Skipping dependency registration on package with no dependency providers: NetFx40Web
[0FAC:0348][2013-04-11T00:29:59]: Planned package: x64, state: Absent, default requested: Absent, ba requested: Absent, execute: None, rollback: None, cache: No, uncache: No, dependency: Unregister
[0FAC:0348][2013-04-11T00:29:59]: Planned package: x86, state: Present, default requested: Absent, ba requested: Absent, execute: Uninstall, rollback: Install, cache: No, uncache: Yes, dependency: Unregister
[0FAC:0348][2013-04-11T00:29:59]: Planned package: NetFx40Web, state: Present, default requested: None, ba requested: None, execute: None, rollback: None, cache: No, uncache: No, dependency: None
[0FAC:0348][2013-04-11T00:29:59]: Plan complete, result: 0x0
[0FAC:0348][2013-04-11T00:29:59]: Apply begin
[0F30:0F50][2013-04-11T00:29:59]: Creating a system restore point.
[0F30:0F50][2013-04-11T00:29:59]: Could not create system restore point, error: 0x80070422. Continuing...
[0F30:0F50][2013-04-11T00:29:59]: Removed dependency: {c7e4c719-a2f5-46ab-8875-3bc46f059503} on package provider: {129A003A-2370-4378-B0FA-10509C76FE2E}, package x86
[0F30:0F50][2013-04-11T00:29:59]: Applying execute package: x86, action: Uninstall, path: C:\ProgramData\Package Cache\{129A003A-2370-4378-B0FA-10509C76FE2E}v1.0.0.0\App.Net.msi, arguments: ' ARPSYSTEMCOMPONENT="1" MSIFASTINSTALL="7" AUTOUPDATEENABLED="1" AUTOSTART="1" CALLEDFROMEXE="1"'
[0F30:0F50][2013-04-11T00:30:00]: Error 0x80070643: Failed to uninstall MSI package.
[0F30:0F50][2013-04-11T00:30:00]: Error 0x80070643: Failed to execute MSI package.
[0FAC:0348][2013-04-11T00:30:00]: Error 0x80070643: Failed to configure per-machine MSI package.
[0FAC:0348][2013-04-11T00:30:00]: Applied execute package: x86, result: 0x80070643, restart: None
[0FAC:0348][2013-04-11T00:30:00]: Error 0x80070643: Failed to execute MSI package.
[0F30:0F50][2013-04-11T00:30:00]: Applying rollback package: x86, action: Install, path: C:\ProgramData\Package Cache\{129A003A-2370-4378-B0FA-10509C76FE2E}v1.0.0.0\App.Net.msi, arguments: ' ARPSYSTEMCOMPONENT="1" MSIFASTINSTALL="7" AUTOUPDATEENABLED="1" AUTOSTART="1" CALLEDFROMEXE="1"'
[0F30:0F50][2013-04-11T00:30:01]: Registering package dependency provider: {129A003A-2370-4378-B0FA-10509C76FE2E}, version: 1.0.0.0, package: x86
[0FAC:0348][2013-04-11T00:30:01]: Applied rollback package: x86, result: 0x0, restart: None
[0F30:0F50][2013-04-11T00:30:01]: Registering dependency: {c7e4c719-a2f5-46ab-8875-3bc46f059503} on package provider: {129A003A-2370-4378-B0FA-10509C76FE2E}, package: x86
[0FAC:0348][2013-04-11T00:30:02]: Apply complete, result: 0x80070643, restart: None, ba requested restart:  No

アップデート

ロブの答えに応えて(どうもありがとう)

Rob さん、どうもありがとうございました。不思議なことに、MSI はそれ自体で問題なくインストール/アンインストールします。ログを確認しましたが、「エラー」は表示されませんが、次のように表示されます。

MSI (s) (F0:E4) [05:36:30:999]: No System Restore sequence number for this installation.
MSI (s) (F0:E4) [05:36:30:999]: Unlocking Server
MSI (s) (F0:E4) [05:36:30:999]: PROPERTY CHANGE: Deleting UpdateStarted property. Its current value is '1'.
MSI (s) (F0:E4) [05:36:30:999]: Doing action: LaunchApplication
MSI (s) (F0:E4) [05:36:30:999]: Note: 1: 2205 2:  3: ActionText
Action ended 5:36:30: InstallFinalize. Return value 1.
MSI (s) (F0:F0) [05:36:30:999]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI1A6F.tmp, Entrypoint: WixShellExec
Action start 5:36:30: LaunchApplication.
WixShellExec:  Error 0x80070002: ShellExec failed with return code 2
WixShellExec:  Error 0x80070002: failed to launch target
CustomAction LaunchApplication returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
Action ended 5:36:31: LaunchApplication. Return value 3.
Action ended 5:36:31: INSTALL. Return value 3.
MSI (s) (F0:E4) [05:36:31:015]: Note: 1: 1725
MSI (s) (F0:E4) [05:36:31:015]: Product: TheApp -- Removal failed. 

アンインストール時にアプリを起動しようとしているようです...ありがとう、バンドルは正しいと思っていましたが、これで何日も噛んでいます。どんなアドバイスも大いに受けました

4

2 に答える 2

3

Permanent="no" 属性を MsiPackage に追加します。

PS: デフォルトでは、永続的な属性値は no と表示されていますが、同じ問題が発生し、属性を追加した後に修正できました。

于 2013-09-13T01:28:58.123 に答える
3

x86 MSI がアンインストールに失敗しています。0x80070643は、「このインストール パッケージは何らかの理由で失敗しました」の一般的なエラーです。

.MSI ログ ファイル'C:\Users\IEUser\AppData\Local\Temp\App.Net_Desktop_Bootstrapper_20130411002911_0_x86.log'を見てください。「WixBundleLog_x86」変数でログ ファイルとして参照されているログ ファイルを確認できます。ログ ファイルは、LaunchApplicationカスタム アクションが失敗したことを示しています (エラーを見つけた方法については、この古いブログ記事を参照してください)。

LaunchApplicationアンインストール時にアプリケーションを起動しているように見えるため、カスタムアクションの条件を確認する必要があります(これは奇妙に思えます)。問題を引き起こしているのは、プロパティがバンドルから MSI にAUTOSTART常に値と共に渡されるという事実でしょうか?"1"

PS: を明示的に設定する必要はありませんMsiPackage/@Visible='no'。これがデフォルトです。:)

于 2013-04-11T13:24:25.623 に答える