Brian Henry
Brian Henry

Reputation: 97

How to register dependency on ExePackage which requires reboot

I have a WiX 3.14 bundle installer with a custom managed bootstrapper application. One of the packages in my bundle looks like this:

<ExePackage
  Id="InstallDependency"
  DisplayName ="Installing Dependency"
  SourceFile="$(var.InstallerApp.TargetPath)"
  CacheId="B63A80A5-FE60-4945-AAD8-186BA680B810"
  PerMachine="yes"
  DetectCondition="CurrentVersionBundleInstalled"
  InstallCommand="install [WixBundleLog_InstallDependency]"
  UninstallCommand="uninstall [WixBundleLog_InstallDependency]">
    <PayloadGroupRef Id="InstallerAppDependencies"/>
    <ExitCode Behavior="success" Value="0"/>
    <ExitCode Behavior="error" Value="-1"/>
    <ExitCode Behavior="forceReboot" Value="2"/>
    <dep:Provides Key="Dependency" Version="1.2.3.4"/>
</ExePackage>

This package usually requests an immediate reboot on completion (exit code 2). When this happens, the dependency registration does not happen before the reboot, and never gets written to the registry. My installer logs reflect this:

[0444:2358][2024-09-23T13:44:51]i323: Registering package dependency provider: Foo, version: 1.0.0.0, package: FooPackage
[0444:2358][2024-09-23T13:44:51]i301: Applying execute package: FooPackage, action: Install, path: C:\ProgramData\Package Cache\A6046A33-3B0E-4830-9C1B-7646FF871D66\InstallerApp.exe, arguments: '"C:\ProgramData\Package Cache\A6046A33-3B0E-4830-9C1B-7646FF871D66\InstallerApp.exe" install cleanup eyJWZXJzaW9uIjoiMy4xMC4wLjAiLCJVcGdyYWRpbmdGcm9tVmVyc2lvbiI6IjMuOS4zLjAiLCJCb290c3RyYXBGb2xkZXIiOiJcXFxcdHNjbGllbnRcXENcXGRldlxcaW5zaWdodGNtXFxBXFxJbnN0YWxsZXJcXEJvb3RzdHJhcHBlclxcYmluXFxEZWJ1Z1xcIiwiQnVuZGxlTG9nRmlsZSI6IkM6XFxVc2Vyc1xcQURNSU5JfjFcXEFwcERhdGFcXExvY2FsXFxUZW1wXFxJbnNpZ2h0Q01fMjAyNDA5MjMxMzM4MjYubG9nIiwiRGF0YUZvbGRlciI6IkM6XFxQcm9ncmFtRGF0YVxcQ3V0c2ZvcnRoXFxJbnNpZ2h0Q01cXEZpbGVzIiwiRGF0YWJhc2VGb2xkZXIiOiJDOlxcUHJvZ3JhbURhdGFcXEN1dHNmb3J0aFxcSW5zaWdodENNXFxNb25nb0RCIn0= C:\Users\ADMINI~1\AppData\Local\Temp\InsightCM_20240923133826_001_FooPackage.log'
[0364:2F68][2024-09-23T13:44:51]i319: Applied execute package: FooPackage, result: 0x0, restart: None
[0444:2358][2024-09-23T13:44:51]i325: Registering dependency: {9f02661f-3564-4fd2-90e6-7ec111fec691} on package provider: Foo, package: FooPackage // Dependency on package "Foo" successfully registered because FooPackage didn't request reboot
[0444:2358][2024-09-23T13:48:37]i323: Registering package dependency provider: Bar, version: 3.10.1.0, package: BarPackage
[0444:2358][2024-09-23T13:48:37]i301: Applying execute package: BarPackage, action: Install, path: C:\ProgramData\Package Cache\706251C0-EC22-446C-A89A-DA7A7980A26F\InstallerApp.exe, arguments: '"C:\ProgramData\Package Cache\706251C0-EC22-446C-A89A-DA7A7980A26F\InstallerApp.exe" install nipm-dependencies eyJWZXJzaW9uIjoiMy4xMC4wLjAiLCJVcGdyYWRpbmdGcm9tVmVyc2lvbiI6IjMuOS4zLjAiLCJCb290c3RyYXBGb2xkZXIiOiJcXFxcdHNjbGllbnRcXENcXGRldlxcaW5zaWdodGNtXFxBXFxJbnN0YWxsZXJcXEJvb3RzdHJhcHBlclxcYmluXFxEZWJ1Z1xcIiwiQnVuZGxlTG9nRmlsZSI6IkM6XFxVc2Vyc1xcQURNSU5JfjFcXEFwcERhdGFcXExvY2FsXFxUZW1wXFxJbnNpZ2h0Q01fMjAyNDA5MjMxMzM4MjYubG9nIiwiRGF0YUZvbGRlciI6IkM6XFxQcm9ncmFtRGF0YVxcQ3V0c2ZvcnRoXFxJbnNpZ2h0Q01cXEZpbGVzIiwiRGF0YWJhc2VGb2xkZXIiOiJDOlxcUHJvZ3JhbURhdGFcXEN1dHNmb3J0aFxcSW5zaWdodENNXFxNb25nb0RCIn0= C:\Users\ADMINI~1\AppData\Local\Temp\InsightCM_20240923133826_005_BarPackage.log'
[0364:2F68][2024-09-23T13:50:26]i319: Applied execute package: BarPackage, result: 0x0, restart: Initiated
// Here's where I would expect the dependency on dependency provider "Bar" to be registered
[0444:2358][2024-09-23T13:50:26]i372: Session end, registration key: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9f02661f-3564-4fd2-90e6-7ec111fec691}, resume: Reboot Pending, restart: Initiated, disable resume: No
[0444:2358][2024-09-23T13:50:26]i371: Updating session, registration key: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9f02661f-3564-4fd2-90e6-7ec111fec691}, resume: Reboot Pending, restart initiated: Yes, disable resume: No
[0364:2F68][2024-09-23T13:50:26]i399: Apply complete, result: 0x0, restart: Initiated, ba requested restart:  No

Like I said earlier, I have a managed BA. In the BA, I handle ExecutePackageComplete (and the reboot request) like this:

private void Bootstrapper_ExecutePackageComplete(object sender, ExecutePackageCompleteEventArgs e)
{
    try
    {
        if (_bootstrapper.Status.IsCanceled)
        {
            _bootstrapper.Log("Initiating cancelation.");
            e.Result = Result.Cancel;
            return;
        }
        else if (e.Status < 0)
        {
            // Handle errors
        }
        else if (e.Restart == ApplyRestart.RestartInitiated)
        {
            e.Result = Result.Restart;
            _bootstrapper.Status.RestartRequired = true;
        }
    }
    catch (Exception ex)
    {
        // Log exception
        e.Result = Result.Error;
    }
}

Is there something wrong with how I'm handling the requested reboot in my BA? Or is there a bug in WiX 3 that prevents the dependency registration from happening in this case? I know there are now newer versions of WiX available, but we don't currently have the bandwidth to upgrade.

Upvotes: 1

Views: 38

Answers (0)

Related Questions