Wix Burn DetectRelatedMsiPackage во время обновления не срабатывает, когда установка выполняется системой
Я использую Burn v3.11.0.1701. При установке пакета в Windows 10 и Windows Server 2016, созданного с помощью Burn как пользователь, связанные MSI-пакеты успешно обнаруживаются с помощью обратного вызова DetectRelatedMsiPackage. Когда пакет устанавливается из системной учетной записи, часть записи C++ не может полностью обнаружить связанный пакет msi и поэтому не вызывает событие DetectRelatedMsiPackage. В результате управляемый загрузчик не может обнаружить ранее установленные функции.
Когда я запускаю его как системную учетную запись, я получаю следующие строки в журнале:
i000: Bootstrapper is ran by NT AUTHORITY\SYSTEM
i000: Bootstrapper is running is Authenticated = True
i000: Bootstrapper is running as Anonymous = False
i000: Bootstrapper is running as Guest = False
i000: Bootstrapper is running as System = True
i000: Bootstrapper is running as an Administrator = True
i000: Bootstrapper is running Elevated = 1
i100: Detect begin, 1 packages
i102: Detected related bundle: {291900bb-7cdb-486a-8ddb-372aa1df1fe4}, type: Upgrade, scope: PerMachine, version: 1.0.1.3, operation: None
e152: Detected related package: {FAB36CB5-330A-48F0-96D5-741B2544367B}, but failed to read language: , error: 0x6ff5a4
i000: onDetectMsiFeature - [ServerUpdateMsi] [Feature1] [Local]
i000: onDetectMsiFeature - [ServerUpdateMsi] [CompleteFeature] [Local]
i000: onDetectMsiFeature - [ServerUpdateMsi] [Feature2] [Local]
Когда я запускаю его как пользователь, я получаю следующие строки в журнале:
i000: Bootstrapper is ran by ABC\KHenderson
i000: Bootstrapper is running is Authenticated = True
i000: Bootstrapper is running as Anonymous = False
i000: Bootstrapper is running as Guest = False
i000: Bootstrapper is running as System = False
i000: Bootstrapper is running as an Administrator = True
i000: Bootstrapper is running Elevated = 1
i100: Detect begin, 1 packages
i102: Detected related bundle: {291900bb-7cdb-486a-8ddb-372aa1df1fe4}, type: Upgrade, scope: PerMachine, version: 1.0.1.3, operation: MajorUpgrade
i103: Detected related package: {FAB36CB5-330A-48F0-96D5-741B2544367B}, scope: PerMachine, version: 1.0.1.3, language: 1033 operation: MajorUpgrade
i000: Detected existing related package ServerUpdateMsi (product: {FAB36CB5-330A-48F0-96D5-741B2544367B}) at version 1.0.1.3, which will be MajorUpgrade
i000: Migrating features for MajorUpgrade of Package ServerUpdateMsi
i000: Migrating feature Feature1 of Package ServerUpdateMsi - marking as Present
i000: Migrating feature CompleteFeature of Package ServerUpdateMsi - marking as Present
i000: Migrating feature Feature2 of Package ServerUpdateMsi - marking as Present
i000: onDetectMsiFeature - [ServerUpdateMsi] [Feature1] [Absent]
i000: onDetectMsiFeature - [ServerUpdateMsi] [CompleteFeature] [Absent]
i000: onDetectMsiFeature - [ServerUpdateMsi] [Feature2] [Absent]
Я ожидаю, что обнаружение связанных MSI-пакетов будет вести себя одинаково независимо от того, какой пользователь запускает установку.
Я связал урезанную версию моего решения. Я подтвердил, что в цепочке может быть один пакет MSI, и проблема все еще проявляется. https://1drv.ms/u/s!AiNxIEp_pbmayH3qyadKtSNtqqRN
Моя связка выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?ifndef BuildVersion ?>
<?define BuildVersion="1.0.0.0"?>
<?endif?>
<?ifndef ProductManufacturer?>
<?define ProductManufacturer="Acme Bricks"?>
<?endif?>
<?define BuildVersionLong="$(var.BuildVersion)"?>
<?define CustomBootstrapSourceDirectory="..\CustomBootstrap"?>
<Bundle Name="Install Tester Bootstrapper"
Version="$(var.BuildVersion)"
Manufacturer="$(var.ProductManufacturer)"
UpgradeCode="B1964223-90D9-4DD9-AF29-88FC026D59E6">
<WixVariable Id="WixMbaPrereqPackageId" Value="..." />
<WixVariable Id="WixMbaPrereqLicenseUrl" Value="..." />
<Variable Name="OVERRIDECODE" Type="string" Value="OVERRIDECODE" bal:Overridable="yes" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"/>
<Variable Name="PackageVersion" Type="string" Value="(Not set yet)"/>
<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost">
<Payload SourceFile="$(var.CustomBootstrapSourceDirectory)\BootstrapperCore.config" />
<Payload SourceFile="$(var.CustomBootstrapSourceDirectory)\bin\x64\Release\CustomBootstrap.dll"/>
<Payload SourceFile="$(var.CustomBootstrapSourceDirectory)\bin\x64\Release\Microsoft.Deployment.WindowsInstaller.dll" />
<Payload SourceFile="$(var.CustomBootstrapSourceDirectory)\bin\x64\Release\BootstrapperCore.dll" />
</BootstrapperApplicationRef>
<Chain>
<MsiPackage Id="ServerUpdateMsi" SourceFile="..\WixPlay_11\bin\Release\WixPlay_11.msi" EnableFeatureSelection ="yes" Permanent="no" Vital="yes" Compressed="yes" DisplayInternalUI="no" Visible="no">
<MsiProperty Name="OVERRIDECODE" Value="[OVERRIDECODE]"/>
</MsiPackage>
</Chain>
</Bundle>
</Wix>
Мое определение MSI выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?ifndef BuildVersion ?>
<?define BuildVersion="1.0.0.0"?>
<?endif?>
<Product Id="*"
Name="Install Tester MSI"
Language="1033"
Version="$(var.BuildVersion)"
Manufacturer="Acme Bricks"
UpgradeCode="cc6fae0c-f4bd-4ca6-8726-44e801ab7719">
<Package InstallerVersion="300" Compressed="yes" InstallScope="perMachine" Platform="x64" />
<Media Id="1" Cabinet="Acme.Wixplay3.cab" EmbedCab="yes" />
<Upgrade Id="cc6fae0c-f4bd-4ca6-8726-44e801ab7719">
<UpgradeVersion Minimum="$(var.BuildVersion)"
IncludeMinimum="no"
OnlyDetect="yes"
Language="1033"
Property="NEWPRODUCTFOUND"
/>
<UpgradeVersion Minimum="0.0.0.0"
IncludeMinimum="yes"
Maximum="$(var.BuildVersion)"
IncludeMaximum="no"
Language="1033"
Property="UPGRADEFOUND"
MigrateFeatures="yes"
/>
</Upgrade>
<Property Id="OVERRIDECODE" Value="(None)" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFiles64Folder">
<Directory Id="CompanyFilesFolder" Name="ACME">
<Directory Id="INSTALLLOCATION" Name="WixPlay3">
<Component Id="PlaceHolderComponent" Guid="A24BAAB6-ABD7-4F3E-9EBE-1E45BD14BDAE">
<File Id="PlaceHolderFile" Name="PlaceHolder.txt" Source="TextFile1.txt" KeyPath="yes"/>
</Component>
<Component Id="PlaceHolderComponent1" Guid="BEC6F1C4-4561-451C-ACDC-C692239738B4">
<File Id="PlaceHolderFile1" Name="Feature1.txt" Source="TextFile1.txt" KeyPath="yes"/>
</Component>
<Component Id="PlaceHolderComponent2" Guid="1CE33163-41B8-4C0F-926F-EE0677E29598">
<File Id="PlaceHolderFile2" Name="Feature2.txt" Source="TextFile1.txt" KeyPath="yes"/>
</Component>
</Directory>
</Directory>
</Directory>
</Directory>
<Feature Id="CompleteFeature" Title="Acme Complete Feature" Level="1" Display="expand" AllowAdvertise="no">
<ComponentRef Id="PlaceHolderComponent"/>
<Feature Id="Feature1" Title="Feature1" Level="1" AllowAdvertise="no">
<ComponentRef Id="PlaceHolderComponent1"/>
</Feature>
<Feature Id="Feature2" Title="Feature2" Level="1" AllowAdvertise="no">
<ComponentRef Id="PlaceHolderComponent2"/>
</Feature>
</Feature>
<CustomAction Id="PreventDowngrading" Error="Newer version already installed." />
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallExecute" />
<Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
</InstallExecuteSequence>
<InstallUISequence>
<Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
</InstallUISequence>
</Product>
</Wix>
Я надеюсь, что что-то простое - это все, что нужно сделать, и просто нужны люди с большим опытом, чтобы указать мне на эту проблему.
Заранее благодарим за любую помощь, которую вы можете предоставить.