VirtualBox

Changeset 107392 in vbox for trunk/src/VBox/GuestHost


Ignore:
Timestamp:
Dec 20, 2024 8:55:27 AM (3 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
166435
Message:

Windows driver installation/VBoxDrvInst: Added a "--ignore-reboot" option to the install/uninstall sub commands. This will ignore the reboot requirements and also will affect the exit code (0 instead of 5, as documented).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/installation/VBoxDrvInst.cpp

    r107049 r107392  
    140140    VBOXDRVINST_INSTALL_OPT_PNPID,
    141141    VBOXDRVINST_INSTALL_OPT_NOT_FORCE,
    142     VBOXDRVINST_INSTALL_OPT_NOT_SILENT
     142    VBOXDRVINST_INSTALL_OPT_NOT_SILENT,
     143    VBOXDRVINST_INSTALL_OPT_IGNORE_REBOOT
    143144};
    144145
     
    148149static const RTGETOPTDEF g_aCmdInstallOptions[] =
    149150{
    150     { "--inf-file",    VBOXDRVINST_INSTALL_OPT_INF_FILE,    RTGETOPT_REQ_STRING   },
    151     { "--inf-section", VBOXDRVINST_INSTALL_OPT_INF_SECTION, RTGETOPT_REQ_STRING   },
    152     { "--model",       VBOXDRVINST_INSTALL_OPT_MODEL,       RTGETOPT_REQ_STRING   },
    153     { "--pnp",         VBOXDRVINST_INSTALL_OPT_PNPID,       RTGETOPT_REQ_STRING   },
    154     { "--pnpid" ,      VBOXDRVINST_INSTALL_OPT_PNPID,       RTGETOPT_REQ_STRING   },
    155     { "--pnp-id",      VBOXDRVINST_INSTALL_OPT_PNPID,       RTGETOPT_REQ_STRING   },
    156     { "--not-force",   VBOXDRVINST_INSTALL_OPT_NOT_FORCE,   RTGETOPT_REQ_NOTHING  },
    157     { "--not-silent",  VBOXDRVINST_INSTALL_OPT_NOT_SILENT,  RTGETOPT_REQ_NOTHING  }
     151    { "--inf-file",      VBOXDRVINST_INSTALL_OPT_INF_FILE,       RTGETOPT_REQ_STRING  },
     152    { "--inf-section",   VBOXDRVINST_INSTALL_OPT_INF_SECTION,    RTGETOPT_REQ_STRING  },
     153    { "--model",         VBOXDRVINST_INSTALL_OPT_MODEL,          RTGETOPT_REQ_STRING  },
     154    { "--pnp",           VBOXDRVINST_INSTALL_OPT_PNPID,          RTGETOPT_REQ_STRING  },
     155    { "--pnpid" ,        VBOXDRVINST_INSTALL_OPT_PNPID,          RTGETOPT_REQ_STRING  },
     156    { "--pnp-id",        VBOXDRVINST_INSTALL_OPT_PNPID,          RTGETOPT_REQ_STRING  },
     157    { "--not-force",     VBOXDRVINST_INSTALL_OPT_NOT_FORCE,      RTGETOPT_REQ_NOTHING },
     158    { "--not-silent",    VBOXDRVINST_INSTALL_OPT_NOT_SILENT,     RTGETOPT_REQ_NOTHING },
     159    { "--ignore-reboot", VBOXDRVINST_INSTALL_OPT_IGNORE_REBOOT, RTGETOPT_REQ_NOTHING }
    158160};
    159161
     
    179181    VBOXDRVINST_UNINSTALL_OPT_INF_SECTION,
    180182    VBOXDRVINST_UNINSTALL_OPT_MODEL,
    181     VBOXDRVINST_UNINSTALL_OPT_PNPID
     183    VBOXDRVINST_UNINSTALL_OPT_PNPID,
     184    VBOXDRVINST_UNINSTALL_OPT_IGNORE_REBOOT
    182185};
    183186
     
    187190static const RTGETOPTDEF g_aCmdUninstallOptions[] =
    188191{
    189     { "--inf-file",    VBOXDRVINST_UNINSTALL_OPT_INF_FILE,    RTGETOPT_REQ_STRING  },
    190     { "--inf-section", VBOXDRVINST_UNINSTALL_OPT_INF_SECTION, RTGETOPT_REQ_STRING  },
    191     { "--model",       VBOXDRVINST_UNINSTALL_OPT_MODEL,       RTGETOPT_REQ_STRING  },
    192     { "--pnp",         VBOXDRVINST_UNINSTALL_OPT_PNPID,       RTGETOPT_REQ_STRING  },
    193     { "--pnpid" ,      VBOXDRVINST_UNINSTALL_OPT_PNPID,       RTGETOPT_REQ_STRING  },
    194     { "--pnp-id",      VBOXDRVINST_UNINSTALL_OPT_PNPID,       RTGETOPT_REQ_STRING  }
     192    { "--inf-file",      VBOXDRVINST_UNINSTALL_OPT_INF_FILE,      RTGETOPT_REQ_STRING  },
     193    { "--inf-section",   VBOXDRVINST_UNINSTALL_OPT_INF_SECTION,   RTGETOPT_REQ_STRING  },
     194    { "--model",         VBOXDRVINST_UNINSTALL_OPT_MODEL,         RTGETOPT_REQ_STRING  },
     195    { "--pnp",           VBOXDRVINST_UNINSTALL_OPT_PNPID,         RTGETOPT_REQ_STRING  },
     196    { "--pnpid" ,        VBOXDRVINST_UNINSTALL_OPT_PNPID,         RTGETOPT_REQ_STRING  },
     197    { "--pnp-id",        VBOXDRVINST_UNINSTALL_OPT_PNPID,         RTGETOPT_REQ_STRING  },
     198    { "--ignore-reboot", VBOXDRVINST_UNINSTALL_OPT_IGNORE_REBOOT, RTGETOPT_REQ_NOTHING }
    195199};
    196200
     
    401405    switch (pOpt->iShort)
    402406    {
    403         case VBOXDRVINST_INSTALL_OPT_INF_FILE:    return "Specifies the INF file to install";
    404         case VBOXDRVINST_INSTALL_OPT_INF_SECTION: return "Specifies the INF section to install";
    405         case VBOXDRVINST_INSTALL_OPT_MODEL:       return "Specifies the driver model";
    406         case VBOXDRVINST_INSTALL_OPT_PNPID:       return "Specifies the PnP (device) ID";
    407         case VBOXDRVINST_INSTALL_OPT_NOT_FORCE:   return "Installation will not be forced";
    408         case VBOXDRVINST_INSTALL_OPT_NOT_SILENT:  return "Installation will not run in silent mode";
     407        case VBOXDRVINST_INSTALL_OPT_INF_FILE:      return "Specifies the INF file to install";
     408        case VBOXDRVINST_INSTALL_OPT_INF_SECTION:   return "Specifies the INF section to install";
     409        case VBOXDRVINST_INSTALL_OPT_MODEL:         return "Specifies the driver model";
     410        case VBOXDRVINST_INSTALL_OPT_PNPID:         return "Specifies the PnP (device) ID";
     411        case VBOXDRVINST_INSTALL_OPT_NOT_FORCE:     return "Installation will not be forced";
     412        case VBOXDRVINST_INSTALL_OPT_NOT_SILENT:    return "Installation will not run in silent mode";
     413        case VBOXDRVINST_INSTALL_OPT_IGNORE_REBOOT: return "Ignores reboot requirements";
    409414        default:
    410415            break;
     
    428433    /* By default we want to force an installation and be silent. */
    429434    uint32_t fInstall = VBOX_WIN_DRIVERINSTALL_F_SILENT | VBOX_WIN_DRIVERINSTALL_F_FORCE;
     435
     436    /* Whether to ignore reboot messages or not. This will also affect the returned exit code. */
     437    bool fIgnoreReboot = false;
    430438
    431439    int rc = VINF_SUCCESS;
     
    473481                break;
    474482
     483            case VBOXDRVINST_INSTALL_OPT_IGNORE_REBOOT:
     484                fIgnoreReboot = true;
     485                break;
     486
    475487            default:
    476488                return RTGetOptPrintError(ch, &ValueUnion);
     
    492504        if (RT_SUCCESS(rc))
    493505        {
    494             if (rc == VINF_REBOOT_NEEDED)
     506            if (   rc == VINF_REBOOT_NEEDED
     507                && !fIgnoreReboot)
    495508                rcExit = (RTEXITCODE)VBOXDRVINSTEXITCODE_REBOOT_NEEDED;
    496509        }
     
    514527    switch (pOpt->iShort)
    515528    {
    516         case VBOXDRVINST_UNINSTALL_OPT_INF_FILE:    return "Specifies the INF File to install";
    517         case VBOXDRVINST_UNINSTALL_OPT_INF_SECTION: return "Specifies the INF section to install";
    518         case VBOXDRVINST_UNINSTALL_OPT_MODEL:       return "Specifies the driver model to install";
    519         case VBOXDRVINST_UNINSTALL_OPT_PNPID:       return "Specifies the PnP (device) ID to install";
     529        case VBOXDRVINST_UNINSTALL_OPT_INF_FILE:      return "Specifies the INF File to install";
     530        case VBOXDRVINST_UNINSTALL_OPT_INF_SECTION:   return "Specifies the INF section to install";
     531        case VBOXDRVINST_UNINSTALL_OPT_MODEL:         return "Specifies the driver model to install";
     532        case VBOXDRVINST_UNINSTALL_OPT_PNPID:         return "Specifies the PnP (device) ID to install";
     533        case VBOXDRVINST_UNINSTALL_OPT_IGNORE_REBOOT: return "Ignores reboot requirements";
    520534        default:
    521535            break;
     
    539553    /* By default we want a silent uninstallation. */
    540554    uint32_t fInstall = VBOX_WIN_DRIVERINSTALL_F_SILENT;
     555
     556    /* Whether to ignore reboot messages or not. This will also affect the returned exit code. */
     557    bool fIgnoreReboot = false;
    541558
    542559    int rc = VINF_SUCCESS;
     
    580597                break;
    581598
     599            case VBOXDRVINST_UNINSTALL_OPT_IGNORE_REBOOT:
     600                fIgnoreReboot = true;
     601                break;
     602
    582603            default:
    583604                return RTGetOptPrintError(ch, &ValueUnion);
     
    599620        if (RT_SUCCESS(rc))
    600621        {
    601             if (rc == VINF_REBOOT_NEEDED)
     622            if (   rc == VINF_REBOOT_NEEDED
     623                && !fIgnoreReboot)
    602624                rcExit = (RTEXITCODE)VBOXDRVINSTEXITCODE_REBOOT_NEEDED;
    603625        }
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette