[英]Wix - bootstrapping an MSI with Burn Installs ok, Uninstall Fails. MSI on it's own installs / uninstalls Ok
幾天以來,我一直在嘗試從Web上用.Net 4.0生成MSI安裝程序的自舉EXE,我需要一些幫助。
我們有一個簡單的MSI,需要將其與.Net4捆綁在一起。 我們提供了MSI的2種變體-x64 / x86,並且通常以捆綁方式處理。
如果存在.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的回答(非常感謝)
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.
幾乎就像是試圖在卸載時啟動該應用程序一樣……謝謝,我認為捆綁軟件是正確的,但是我為此花費了很多時間。 收到任何建議
向您的MsiPackage中添加“ permanent =“ no”屬性。
PS:默認情況下,它表示永久屬性值為no,但是我遇到了同樣的問題,並且在添加屬性后能夠對其進行修復。
x86 MSI無法卸載。 0x80070643
是“由於某種原因此安裝程序包失敗”的一般錯誤。
看一下.MSI日志文件: 'C:\\Users\\IEUser\\AppData\\Local\\Temp\\App.Net_Desktop_Bootstrapper_20130411002911_0_x86.log'
您可以在“ WixBundleLog_x86”變量中看到作為日志文件引用的該日志文件。 日志文件顯示您的LaunchApplication
自定義操作失敗(請參閱此舊博客文章如何找到錯誤)。
您需要查看LaunchApplication
自定義操作的條件,因為這似乎是在卸載時啟動應用程序(這確實很奇怪)。 可能是因為AUTOSTART
屬性始終從值捆綁中以"1"
的值傳遞給導致問題的MSI嗎?
PS:您不需要顯式設置MsiPackage/@Visible='no'
。 這是默認值。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.