VirtualBox

Changeset 108302 in vbox


Ignore:
Timestamp:
Feb 19, 2025 4:01:47 PM (2 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
167646
Message:

Host installer/win: Run our custom driver installation code in deferred custom actions rather in immediate ones, as this otherwise can make trouble on Windows 11 and/or 10 if the UAC prompt is configured differently. This makes use of the code committed in r167628. bugref:10762

Location:
trunk/src/VBox/Installer/win
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp

    r108074 r108302  
    14711471}
    14721472
     1473/**
     1474 * Returns a custom action data value.
     1475 *
     1476 * @returns Value of \a pszName if found, or NULL if not found.
     1477 * @param   hModule             Windows installer module handle.
     1478 * @param   pData               Custom action data to search in.
     1479 * @param   pszName             Name of the custom action data value to search for.
     1480 * @param   fOptional           Whether the custom action data value is optional or not.
     1481 *                              If @c true, \a pData will be destroyed automatically,
     1482 *                              so that the caller can skip cleaning up.
     1483 *                              That implies that \a pData will be invalid when returning
     1484 *                              a failure, so use with care.
     1485 */
     1486static const char *getCustomActionDataValue(MSIHANDLE hModule, PVBOXMSICUSTOMACTIONDATA pData, const char *pszName, bool fOptional)
     1487{
     1488    const char *pszVal = VBoxMsiCustomActionDataFind(pData, pszName);
     1489    if (   !pszVal
     1490        && !fOptional)
     1491    {
     1492        logStringF(hModule, "Error: Value '%s' not specified in CustomActionData!", pszName);
     1493
     1494#ifdef DEBUG
     1495        for (size_t i = 0; i < pData->cEntries; i++)
     1496            logStringF(hModule, "CustomActionData: %s = %s", pData->paEntries[i].pszKey, pData->paEntries[i].pszVal);
     1497#endif
     1498        VBoxMsiCustomActionDataFree(pData);
     1499        pData = NULL;
     1500    }
     1501
     1502    return pszVal;
     1503}
     1504
    14731505UINT __stdcall DriverInstall(MSIHANDLE hModule)
    14741506{
    14751507    logStringF(hModule, "Installing driver ...");
    14761508
    1477     char *pszInfFile = NULL;
    1478     int rc = VBoxMsiQueryPropUtf8(hModule, "VBoxDrvInstInfFile", &pszInfFile);
     1509    PVBOXMSICUSTOMACTIONDATA pData;
     1510    int rc = VBoxMsiCustomActionDataQuery(hModule, &pData);
     1511    if (RT_FAILURE(rc))
     1512    {
     1513        logStringF(hModule, "DriverInstall: No CustomActionData specified!");
     1514        return ERROR_INVALID_PARAMETER;
     1515    }
     1516
     1517    const char *pszInfFile = getCustomActionDataValue(hModule, pData, "VBoxDrvInstInfFile", false /* fOptional */);
     1518    if (!pszInfFile)
     1519        return ERROR_INVALID_PARAMETER;
     1520
     1521    /* VBoxDrvInstInfSection is optional. */
     1522    const char *pszInfSection = getCustomActionDataValue(hModule, pData, "VBoxDrvInstInfSection", true /* fOptional */);
     1523    /* VBoxDrvInstModel is optional. */
     1524    const char *pszModel      = getCustomActionDataValue(hModule, pData, "VBoxDrvInstModel", true /* fOptional */);
     1525    /* VBoxDrvInstPnpId is optional. */
     1526    const char *pszPnpId      = getCustomActionDataValue(hModule, pData, "VBoxDrvInstPnpId", true /* fOptional */);
     1527
     1528    uint32_t fFlags = VBOX_WIN_DRIVERINSTALL_F_NONE;
     1529    if (getCustomActionDataValue(hModule, pData, "VBoxDrvInstFlagForce", true /* fOptional */))
     1530        fFlags |= VBOX_WIN_DRIVERINSTALL_F_FORCE;
     1531    if (getCustomActionDataValue(hModule, pData, "VBoxDrvInstFlagSilent", true /* fOptional */))
     1532        fFlags |= VBOX_WIN_DRIVERINSTALL_F_SILENT;
     1533
     1534    VBOXWINDRVINST hWinDrvInst;
     1535    rc = VBoxWinDrvInstCreateEx(&hWinDrvInst, 1 /* uVerbostiy */, &vboxWinDrvInstLogCallback, &hModule /* pvUser */);
    14791536    if (RT_SUCCESS(rc))
    14801537    {
    1481         char *pszInfSection = NULL;
    1482         rc = VBoxMsiQueryPropUtf8(hModule, "VBoxDrvInstInfSection", &pszInfSection);
    1483         if (   RT_SUCCESS(rc)
    1484             || rc == VERR_NOT_FOUND) /* VBoxDrvInstInfSection is optional. */
    1485         {
    1486             char *pszModel = NULL;
    1487             rc = VBoxMsiQueryPropUtf8(hModule, "VBoxDrvInstModel", &pszModel);
    1488             if (   RT_SUCCESS(rc)
    1489                 || rc == VERR_NOT_FOUND) /* VBoxDrvInstModel is optional. */
    1490             {
    1491                 char *pszPnpId = NULL;
    1492                 rc = VBoxMsiQueryPropUtf8(hModule, "VBoxDrvInstPnpId", &pszPnpId);
    1493                 if (   RT_SUCCESS(rc)
    1494                     || rc == VERR_NOT_FOUND) /* VBoxDrvInstPnpId is optional. */
    1495                 {
    1496                     uint32_t fFlags = VBOX_WIN_DRIVERINSTALL_F_NONE;
    1497 
    1498                     DWORD dwVal;
    1499                     rc = VBoxMsiQueryPropInt32(hModule, "VBoxDrvInstFlagForce", &dwVal);
    1500                     if (RT_SUCCESS(rc))
    1501                         fFlags |= VBOX_WIN_DRIVERINSTALL_F_FORCE;
    1502                     rc = VBoxMsiQueryPropInt32(hModule, "VBoxDrvInstFlagSilent", &dwVal);
    1503                     if (RT_SUCCESS(rc))
    1504                         fFlags |= VBOX_WIN_DRIVERINSTALL_F_SILENT;
    1505 
    1506                     VBOXWINDRVINST hWinDrvInst;
    1507                     rc = VBoxWinDrvInstCreateEx(&hWinDrvInst, 1 /* uVerbostiy */, &vboxWinDrvInstLogCallback, &hModule /* pvUser */);
    1508                     if (RT_SUCCESS(rc))
    1509                     {
    1510                         if (pszInfSection && *pszInfSection)
    1511                             rc = VBoxWinDrvInstInstallExecuteInf(hWinDrvInst, pszInfFile, pszInfSection, fFlags);
    1512                         else
    1513                             rc = VBoxWinDrvInstInstallEx(hWinDrvInst, pszInfFile, pszModel, pszPnpId, fFlags);
    1514 
    1515                         VBoxWinDrvInstDestroy(hWinDrvInst);
    1516                     }
    1517 
    1518                     RTStrFree(pszPnpId);
    1519                 }
    1520 
    1521                 RTStrFree(pszModel);
    1522             }
    1523 
    1524             RTStrFree(pszInfSection);
    1525         }
    1526 
    1527         RTStrFree(pszInfFile);
    1528     }
    1529     else
    1530     {
    1531         logStringF(hModule, "DriverInstall: No INF or invalid file to install specified!");
    1532         if (rc == VERR_NOT_FOUND) /* Give a better clue. */
    1533             rc = VERR_INVALID_PARAMETER;
    1534     }
     1538        if (pszInfSection && *pszInfSection)
     1539            rc = VBoxWinDrvInstInstallExecuteInf(hWinDrvInst, pszInfFile, pszInfSection, fFlags);
     1540        else
     1541            rc = VBoxWinDrvInstInstallEx(hWinDrvInst, pszInfFile, pszModel, pszPnpId, fFlags);
     1542
     1543        VBoxWinDrvInstDestroy(hWinDrvInst);
     1544    }
     1545
     1546    VBoxMsiCustomActionDataFree(pData);
     1547    pData = NULL;
    15351548
    15361549    logStringF(hModule, "DriverInstall: Handling done (rc=%Rrc)", rc);
     
    15401553UINT __stdcall DriverUninstall(MSIHANDLE hModule)
    15411554{
    1542     char *pszInfFile = NULL;
    1543     int rc = VBoxMsiQueryPropUtf8(hModule, "VBoxDrvUninstInfFile", &pszInfFile);
    1544     if (   RT_SUCCESS(rc)
    1545         || rc == VERR_NOT_FOUND) /* VBoxDrvUninstInfFile is optional. */
    1546     {
    1547         char *pszInfSection = NULL;
    1548         rc = VBoxMsiQueryPropUtf8(hModule, "VBoxDrvUninstInfSection", &pszInfSection);
    1549         if (   RT_SUCCESS(rc)
    1550             || rc == VERR_NOT_FOUND) /* VBoxDrvUninstInfSection is optional. */
    1551         {
    1552             char *pszModel = NULL;
    1553             rc = VBoxMsiQueryPropUtf8(hModule, "VBoxDrvUninstModel", &pszModel);
    1554             if (   RT_SUCCESS(rc)
    1555                 || rc == VERR_NOT_FOUND) /* VBoxDrvUninstModel is optional. */
    1556             {
    1557                 char *pszPnpId = NULL;
    1558                 rc = VBoxMsiQueryPropUtf8(hModule, "VBoxDrvUninstPnpId", &pszPnpId);
    1559                 if (   RT_SUCCESS(rc)
    1560                     || rc == VERR_NOT_FOUND) /* VBoxDrvUninstPnpId is optional. */
    1561                 {
    1562                     VBOXWINDRVINST hWinDrvInst;
    1563                     rc = VBoxWinDrvInstCreateEx(&hWinDrvInst, 1 /* uVerbostiy */,
    1564                                                 &vboxWinDrvInstLogCallback, &hModule /* pvUser */);
    1565                     if (RT_SUCCESS(rc))
    1566                     {
    1567                         if (pszInfSection && *pszInfSection)
    1568                             rc = VBoxWinDrvInstUninstallExecuteInf(hWinDrvInst, pszInfFile, pszInfSection,
    1569                                                                    VBOX_WIN_DRIVERINSTALL_F_NONE);
    1570                         else
    1571                             rc = VBoxWinDrvInstUninstall(hWinDrvInst, pszInfFile, pszModel, pszPnpId,
    1572                                                          VBOX_WIN_DRIVERINSTALL_F_NONE);
    1573 
    1574                         VBoxWinDrvInstDestroy(hWinDrvInst);
    1575                     }
    1576 
    1577                     RTStrFree(pszPnpId);
    1578                 }
    1579 
    1580                 RTStrFree(pszModel);
    1581             }
    1582 
    1583             RTStrFree(pszInfSection);
    1584         }
    1585 
    1586         RTStrFree(pszInfFile);
    1587     }
     1555    logStringF(hModule, "Uninstalling driver ...");
     1556
     1557    PVBOXMSICUSTOMACTIONDATA pData;
     1558    int rc = VBoxMsiCustomActionDataQuery(hModule, &pData);
     1559    if (RT_FAILURE(rc))
     1560    {
     1561        logStringF(hModule, "DriverUninstall: No CustomActionData specified!");
     1562        return ERROR_INVALID_PARAMETER;
     1563    }
     1564
     1565#ifdef DEBUG
     1566    for (size_t i = 0; i < pData->cEntries; i++)
     1567        logStringF(hModule, "CustomActionData: %s = %s", pData->paEntries[i].pszKey, pData->paEntries[i].pszVal);
     1568#endif
     1569
     1570    /* VBoxDrvUninstInfFile is optional. */
     1571    const char *pszInfFile = VBoxMsiCustomActionDataFind(pData, "VBoxDrvUninstInfFile");
     1572    /* VBoxDrvUninstInfSection is optional. */
     1573    const char *pszInfSection = VBoxMsiCustomActionDataFind(pData, "VBoxDrvUninstInfSection");
     1574    /* VBoxDrvUninstModel is optional. */
     1575    const char *pszModel = VBoxMsiCustomActionDataFind(pData, "VBoxDrvUninstModel");
     1576    /* VBoxDrvUninstPnpId is optional. */
     1577    const char *pszPnpId = VBoxMsiCustomActionDataFind(pData, "VBoxDrvUninstPnpId");
     1578
     1579    VBOXWINDRVINST hWinDrvInst;
     1580    rc = VBoxWinDrvInstCreateEx(&hWinDrvInst, 1 /* uVerbostiy */,
     1581                                &vboxWinDrvInstLogCallback, &hModule /* pvUser */);
     1582    if (RT_SUCCESS(rc))
     1583    {
     1584        if (pszInfSection && *pszInfSection)
     1585            rc = VBoxWinDrvInstUninstallExecuteInf(hWinDrvInst, pszInfFile, pszInfSection,
     1586                                                   VBOX_WIN_DRIVERINSTALL_F_NONE);
     1587        else
     1588            rc = VBoxWinDrvInstUninstall(hWinDrvInst, pszInfFile, pszModel, pszPnpId,
     1589                                         VBOX_WIN_DRIVERINSTALL_F_NONE);
     1590
     1591        VBoxWinDrvInstDestroy(hWinDrvInst);
     1592    }
     1593
     1594    VBoxMsiCustomActionDataFree(pData);
     1595    pData = NULL;
    15881596
    15891597    logStringF(hModule, "DriverUninstall: Handling done (rc=%Rrc)", rc);
     
    16391647UINT __stdcall ServiceControl(MSIHANDLE hModule)
    16401648{
    1641     char *pszSvcCtlName;
    1642     int rc = VBoxMsiQueryPropUtf8(hModule, "VBoxSvcCtlName", &pszSvcCtlName);
     1649    PVBOXMSICUSTOMACTIONDATA pData;
     1650    int rc = VBoxMsiCustomActionDataQuery(hModule, &pData);
     1651    if (RT_FAILURE(rc))
     1652    {
     1653        logStringF(hModule, "ServiceControl: No CustomActionData specified!");
     1654        return ERROR_INVALID_PARAMETER;
     1655    }
     1656
     1657    const char *pszSvcCtlName = getCustomActionDataValue(hModule, pData, "VBoxSvcCtlName", false /* fOptional */);
     1658    if (!pszSvcCtlName)
     1659        return ERROR_INVALID_PARAMETER;
     1660    const char *pszSvcCtlFn   = getCustomActionDataValue(hModule, pData, "VBoxSvcCtlFn", false /* fOptional */);
     1661    if (!pszSvcCtlFn)
     1662        return ERROR_INVALID_PARAMETER;
     1663
     1664    VBOXWINDRVSVCFN enmFn = VBOXWINDRVSVCFN_INVALID; /* Shut up MSVC. */
     1665    if (!RTStrICmp(pszSvcCtlFn, "start"))
     1666        enmFn = VBOXWINDRVSVCFN_START;
     1667    else if (!RTStrICmp(pszSvcCtlFn, "stop"))
     1668        enmFn = VBOXWINDRVSVCFN_STOP;
     1669    else if (!RTStrICmp(pszSvcCtlFn, "restart"))
     1670        enmFn = VBOXWINDRVSVCFN_RESTART;
     1671    else
     1672        rc = VERR_INVALID_PARAMETER;
     1673
    16431674    if (RT_SUCCESS(rc))
    16441675    {
    1645         char *pszSvcCtlFn;
    1646         rc = VBoxMsiQueryPropUtf8(hModule, "VBoxSvcCtlFn", &pszSvcCtlFn);
     1676        RTMSINTERVAL msTimeout = 0; /* Don't wait by default. */
     1677        const char *pszTmp = getCustomActionDataValue(hModule, pData, "VBoxSvcCtlWaitMs", true /* fOptional */);
     1678        if (pszTmp)
     1679            msTimeout = RTStrToUInt32(pszTmp);
     1680
     1681        VBOXWINDRVINST hWinDrvInst;
     1682        rc = VBoxWinDrvInstCreateEx(&hWinDrvInst, 1 /* uVerbostiy */,
     1683                                    &vboxWinDrvInstLogCallback, &hModule /* pvUser */);
    16471684        if (RT_SUCCESS(rc))
    16481685        {
    1649             VBOXWINDRVSVCFN enmFn = VBOXWINDRVSVCFN_INVALID; /* Shut up MSVC. */
    1650             if (!RTStrICmp(pszSvcCtlFn, "start"))
    1651                 enmFn = VBOXWINDRVSVCFN_START;
    1652             else if (!RTStrICmp(pszSvcCtlFn, "stop"))
    1653                 enmFn = VBOXWINDRVSVCFN_STOP;
    1654             else if (!RTStrICmp(pszSvcCtlFn, "restart"))
    1655                 enmFn = VBOXWINDRVSVCFN_RESTART;
    1656             else
    1657                 rc = VERR_INVALID_PARAMETER;
    1658 
    1659             if (RT_SUCCESS(rc))
    1660             {
    1661                 RTMSINTERVAL msTimeout = 0; /* Don't wait by default. */
    1662                 rc = VBoxMsiQueryPropInt32(hModule, "VBoxSvcCtlWaitMs", (DWORD *)&msTimeout);
    1663                 if (   RT_SUCCESS(rc)
    1664                     || rc == VERR_NOT_FOUND) /* VBoxSvcCtlWaitMs is optional. */
    1665                 {
    1666                     VBOXWINDRVINST hWinDrvInst;
    1667                     rc = VBoxWinDrvInstCreateEx(&hWinDrvInst, 1 /* uVerbostiy */,
    1668                                                 &vboxWinDrvInstLogCallback, &hModule /* pvUser */);
    1669                     if (RT_SUCCESS(rc))
    1670                     {
    1671                         rc = VBoxWinDrvInstControlServiceEx(hWinDrvInst, pszSvcCtlName, enmFn,
    1672                                                             msTimeout == 0 ? VBOXWINDRVSVCFN_F_NONE : VBOXWINDRVSVCFN_F_WAIT,
    1673                                                             msTimeout);
    1674                         VBoxWinDrvInstDestroy(hWinDrvInst);
    1675                     }
    1676                 }
    1677             }
    1678 
    1679             RTStrFree(pszSvcCtlFn);
    1680         }
    1681 
    1682         RTStrFree(pszSvcCtlName);
    1683     }
     1686            rc = VBoxWinDrvInstControlServiceEx(hWinDrvInst, pszSvcCtlName, enmFn,
     1687                                                msTimeout == 0 ? VBOXWINDRVSVCFN_F_NONE : VBOXWINDRVSVCFN_F_WAIT,
     1688                                                msTimeout);
     1689            VBoxWinDrvInstDestroy(hWinDrvInst);
     1690        }
     1691    }
     1692
     1693    VBoxMsiCustomActionDataFree(pData);
     1694    pData = NULL;
    16841695
    16851696    logStringF(hModule, "ServiceControl: Handling done (rc=%Rrc)", rc);
     
    29642975    return ERROR_SUCCESS;
    29652976}
    2966 
  • trunk/src/VBox/Installer/win/VBoxMergeAppCA.wxi

    r108074 r108302  
    2626<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
    2727
    28     <CustomAction Id="ca_VBoxSupDrvInst" DllEntry="DriverInstall" Execute="immediate" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    29     <CustomAction Id="ca_VBoxSupDrvInstArgInfFile" Property="VBoxDrvInstInfFile" Value="[#file_VBoxSup.inf]" Execute="immediate" />
    30     <CustomAction Id="ca_VBoxSupDrvInstArgModel" Property="VBoxDrvInstModel" Value="VBoxSup" Execute="immediate" />
    31     <CustomAction Id="ca_VBoxSupDrvInstArgFlagForce" Property="VBoxDrvInstFlagForce" Value="1" Execute="immediate" />
    32     <CustomAction Id="ca_VBoxSupDrvInstArgFlagSilent" Property="VBoxDrvInstFlagSilent" Value="1" Execute="immediate" />
     28    <CustomAction Id="ca_VBoxSupDrvInstParms" Property="ca_VBoxSupDrvInst" Value="VBoxDrvInstInfFile=[#file_VBoxSup.inf]##VBoxDrvInstModel=VBoxSup##VBoxDrvInstFlagForce=1##VBoxDrvInstFlagSilent=1" Execute="immediate" />
     29    <CustomAction Id="ca_VBoxSupDrvInst" DllEntry="DriverInstall" Execute="deferred" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    3330
    34     <CustomAction Id="ca_VBoxSupDrvStart" DllEntry="ServiceControl" Execute="immediate" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    35     <CustomAction Id="ca_VBoxSupDrvStartArgName" Property="VBoxSvcCtlName" Value="VBoxSUP" Execute="immediate" />
    36     <CustomAction Id="ca_VBoxSupDrvStartArgFn" Property="VBoxSvcCtlFn" Value="start" Execute="immediate" />
     31    <CustomAction Id="ca_VBoxSupDrvStartParms" Property="ca_VBoxSupDrvStart" Value="VBoxSvcCtlName=VBoxSUP##VBoxSvcCtlFn=start" Execute="immediate" />
     32    <CustomAction Id="ca_VBoxSupDrvStart" DllEntry="ServiceControl" Execute="deferred" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    3733
    38     <CustomAction Id="ca_VBoxSupDrvUninst" DllEntry="DriverUninstall" Execute="immediate" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    39     <CustomAction Id="ca_VBoxSupDrvUninstArgModel" Property="VBoxDrvUninstModel" Value="VBoxSup*" Execute="immediate" />
     34    <CustomAction Id="ca_VBoxSupDrvUninstParms" Property="ca_VBoxSupDrvUninst" Value="VBoxDrvUninstModel=VBoxSUP*" Execute="immediate" />
     35    <CustomAction Id="ca_VBoxSupDrvUninst" DllEntry="DriverUninstall" Execute="deferred" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    4036
    4137    <CustomAction Id="ca_GetPlatformArchitecture" DllEntry="GetPlatformArchitecture" Execute="immediate" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
     
    5147    <CustomAction Id="ca_CheckTargetDirPost" DllEntry="CheckTargetDir" Execute="immediate" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    5248</Include>
    53 
  • trunk/src/VBox/Installer/win/VBoxMergeAppSeq.wxi

    r108074 r108302  
    2626<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
    2727
    28     <Custom Action="ca_VBoxSupDrvInstArgFlagSilent" Before="ca_VBoxSupDrvInstArgFlagForce" Condition="NOT REMOVE" />
    29     <Custom Action="ca_VBoxSupDrvInstArgFlagForce" Before="ca_VBoxSupDrvInstArgModel" Condition="NOT REMOVE" />
    30     <Custom Action="ca_VBoxSupDrvInstArgInfFile" Before="ca_VBoxSupDrvInstArgModel" Condition="NOT REMOVE" />
    31     <Custom Action="ca_VBoxSupDrvInstArgModel" Before="ca_VBoxSupDrvInst" Condition="NOT REMOVE" />
    32     <Custom Action="ca_VBoxSupDrvInst" After="InstallFinalize" Condition="NOT REMOVE" />
     28    <Custom Action="ca_VBoxSupDrvInstParms" After="InstallFiles" Condition="NOT REMOVE" />
     29    <Custom Action="ca_VBoxSupDrvInst" After="ca_VBoxSupDrvInstParms" Condition="NOT REMOVE" />
    3330
    3431    <!-- Start VBoxSUP.sys after installation. -->
    35     <Custom Action="ca_VBoxSupDrvStartArgFn" Before="ca_VBoxSupDrvStartArgName" Condition="NOT REMOVE" />
    36     <Custom Action="ca_VBoxSupDrvStartArgName" Before="ca_VBoxSupDrvStart" Condition="NOT REMOVE" />
    37     <Custom Action="ca_VBoxSupDrvStart" After="ca_VBoxSupDrvInst" Condition="NOT REMOVE" />
     32    <Custom Action="ca_VBoxSupDrvStartParms" After="ca_VBoxSupDrvInst" Condition="NOT REMOVE" />
     33    <Custom Action="ca_VBoxSupDrvStart" After="ca_VBoxSupDrvStartParms" Condition="NOT REMOVE" />
    3834
    39     <Custom Action="ca_VBoxSupDrvUninstArgModel" Before="ca_VBoxSupDrvUninst"
     35    <Custom Action="ca_VBoxSupDrvUninstParms" After="InstallInitialize"
    4036            Condition="NOT (UPGRADINGPRODUCTCODE) AND (Installed) AND (REMOVE=&quot;ALL&quot;)" />
    41     <Custom Action="ca_VBoxSupDrvUninst" After="InstallInitialize"
     37    <Custom Action="ca_VBoxSupDrvUninst" After="ca_VBoxSupDrvUninstParms"
    4238            Condition="NOT (UPGRADINGPRODUCTCODE) AND (Installed) AND (REMOVE=&quot;ALL&quot;)" />
    4339
     
    5551
    5652</Include>
    57 
  • trunk/src/VBox/Installer/win/VBoxMergeUSBCA.wxi

    r108271 r108302  
    2626<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
    2727
    28     <CustomAction Id="ca_VBoxUSBDevDrvInst" DllEntry="DriverInstall" Execute="immediate" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    29     <CustomAction Id="ca_VBoxUSBDevDrvInstArgInfFile"  Property="VBoxDrvInstInfFile" Value="[#file_VBoxUSB.inf]" Execute="immediate" />
    30     <CustomAction Id="ca_VBoxUSBDevDrvInstArgModel" Property="VBoxDrvInstModel" Value="VBoxUSB*" Execute="immediate" />
    31     <CustomAction Id="ca_VBoxUSBDevDrvInstArgFlagForce" Property="VBoxDrvInstFlagForce" Value="1" Execute="immediate" />
    32     <CustomAction Id="ca_VBoxUSBDevDrvInstArgFlagSilent" Property="VBoxDrvInstFlagSilent" Value="1" Execute="immediate" />
     28    <CustomAction Id="ca_VBoxUSBDevDrvInstParms" Property="ca_VBoxUSBDevDrvInst" Value="VBoxDrvInstInfFile=[#file_VBoxUSB.inf]##VBoxDrvInstModel=VBoxUSB*##VBoxDrvInstFlagForce=1##VBoxDrvInstFlagSilent=1" Execute="immediate" />
     29    <CustomAction Id="ca_VBoxUSBDevDrvInst" DllEntry="DriverInstall" Execute="deferred" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    3330
    34     <CustomAction Id="ca_VBoxUSBDevDrvUninst" DllEntry="DriverUninstall" Execute="immediate" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    35     <CustomAction Id="ca_VBoxUSBDevDrvUninstArgModel" Property="VBoxDrvUninstModel" Value="VBoxUSB*" Execute="immediate" />
     31    <CustomAction Id="ca_VBoxUSBDevDrvUninstParms" Property="ca_VBoxUSBDevDrvUninst" Value="VBoxDrvUninstModel=VBoxUSB*" Execute="immediate" />
     32    <CustomAction Id="ca_VBoxUSBDevDrvUninst" DllEntry="DriverUninstall" Execute="deferred" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    3633
    37     <CustomAction Id="ca_VBoxUSBMonDrvInst" DllEntry="DriverInstall" Execute="immediate" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    38     <CustomAction Id="ca_VBoxUSBMonDrvInstArgInfFile"  Property="VBoxDrvInstInfFile" Value="[#file_VBoxUSBMon.inf]" Execute="immediate" />
    39     <CustomAction Id="ca_VBoxUSBMonDrvInstArgModel" Property="VBoxDrvInstModel" Value="VBoxUSBMon*" Execute="immediate" />
    40     <CustomAction Id="ca_VBoxUSBMonDrvInstArgFlagForce" Property="VBoxDrvInstFlagForce" Value="1" Execute="immediate" />
    41     <CustomAction Id="ca_VBoxUSBMonDrvInstArgFlagSilent" Property="VBoxDrvInstFlagSilent" Value="1" Execute="immediate" />
     34    <CustomAction Id="ca_VBoxUSBMonDrvInstParms" Property="ca_VBoxUSBMonDrvInst" Value="VBoxDrvInstInfFile=[#file_VBoxUSBMon.inf]##VBoxDrvInstModel=VBoxUSBMon*##VBoxDrvInstFlagForce=1##VBoxDrvInstFlagSilent=1" Execute="immediate" />
     35    <CustomAction Id="ca_VBoxUSBMonDrvInst" DllEntry="DriverInstall" Execute="deferred" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    4236
    43     <CustomAction Id="ca_VBoxUSBMonDrvStart" DllEntry="ServiceControl" Execute="immediate" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    44     <CustomAction Id="ca_VBoxUSBMonDrvStartArgName" Property="VBoxSvcCtlName" Value="VBoxUSBMon" Execute="immediate" />
    45     <CustomAction Id="ca_VBoxUSBMonDrvStartArgFn" Property="VBoxSvcCtlFn" Value="start" Execute="immediate" />
     37    <CustomAction Id="ca_VBoxUSBMonDrvStartParms" Property="ca_VBoxUSBMonDrvStart" Value="VBoxSvcCtlName=VBoxUSBMon##VBoxSvcCtlFn=start" Execute="immediate" />
     38    <CustomAction Id="ca_VBoxUSBMonDrvStart" DllEntry="ServiceControl" Execute="deferred" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    4639
    47     <CustomAction Id="ca_VBoxUSBMonDrvUninst" DllEntry="DriverUninstall" Execute="immediate" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    48     <CustomAction Id="ca_VBoxUSBMonDrvUninstArgModel" Property="VBoxDrvUninstModel" Value="VBoxUSBMon*" Execute="immediate" />
     40    <CustomAction Id="ca_VBoxUSBMonDrvUninstParms" Property="ca_VBoxUSBMonDrvUninst" Value="VBoxDrvUninstModel=VBoxUSBMon*" Execute="immediate" />
     41    <CustomAction Id="ca_VBoxUSBMonDrvUninst" DllEntry="DriverUninstall" Execute="deferred" Return="check" Impersonate="no" BinaryRef="VBoxInstallHelper" />
    4942
    5043</Include>
  • trunk/src/VBox/Installer/win/VBoxMergeUSBSeq.wxi

    r108271 r108302  
    2626<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
    2727
    28     <Custom Action="ca_VBoxUSBDevDrvInstArgFlagSilent" Before="ca_VBoxUSBDevDrvInstArgFlagForce" Condition="NOT REMOVE" />
    29     <Custom Action="ca_VBoxUSBDevDrvInstArgFlagForce" Before="ca_VBoxUSBDevDrvInstArgModel" Condition="NOT REMOVE" />
    30     <Custom Action="ca_VBoxUSBDevDrvInstArgModel" Before="ca_VBoxUSBDevDrvInstArgInfFile" Condition="NOT REMOVE" />
    31     <Custom Action="ca_VBoxUSBDevDrvInstArgInfFile" Before="ca_VBoxUSBDevDrvInst" Condition="NOT REMOVE" />
    32     <Custom Action="ca_VBoxUSBDevDrvInst" After="InstallFinalize"
     28    <Custom Action="ca_VBoxUSBDevDrvInstParms" After="InstallFiles"
     29            Condition="NOT REMOVE AND (&amp;VBoxUSB=3)" />
     30    <Custom Action="ca_VBoxUSBDevDrvInst" After="ca_VBoxUSBDevDrvInstParms"
    3331            Condition="NOT REMOVE AND (&amp;VBoxUSB=3)" />
    3432
    35     <Custom Action="ca_VBoxUSBDevDrvUninstArgModel" Before="ca_VBoxUSBDevDrvUninst"
    36             Condition="NOT (UPGRADINGPRODUCTCODE) AND (Installed) AND (REMOVE=&quot;ALL&quot;)" />
    37     <Custom Action="ca_VBoxUSBDevDrvUninst" After="InstallInitialize"
     33    <Custom Action="ca_VBoxUSBDevDrvUninstParms" Before="ca_VBoxSupDrvUninst"
     34            Condition="NOT (UPGRADINGPRODUCTCODE) AND (Installed) AND (REMOVE=&quot;ALL&quot;)"/>
     35    <Custom Action="ca_VBoxUSBDevDrvUninst" After="ca_VBoxUSBDevDrvUninstParms"
    3836            Condition="NOT (UPGRADINGPRODUCTCODE) AND (Installed) AND (REMOVE=&quot;ALL&quot;)"/>
    3937
    40     <Custom Action="ca_VBoxUSBMonDrvInstArgFlagSilent" Before="ca_VBoxUSBMonDrvInstArgFlagForce" Condition="NOT REMOVE" />
    41     <Custom Action="ca_VBoxUSBMonDrvInstArgFlagForce" Before="ca_VBoxUSBMonDrvInstArgModel" Condition="NOT REMOVE" />
    42     <Custom Action="ca_VBoxUSBMonDrvInstArgModel" Before="ca_VBoxUSBMonDrvInstArgInfFile" Condition="NOT REMOVE" />
    43     <Custom Action="ca_VBoxUSBMonDrvInstArgInfFile" Before="ca_VBoxUSBMonDrvInst" Condition="NOT REMOVE" />
    44     <Custom Action="ca_VBoxUSBMonDrvInst" After="InstallFinalize"
     38    <Custom Action="ca_VBoxUSBMonDrvInstParms" After="InstallFiles"
     39            Condition="NOT REMOVE AND (&amp;VBoxUSB=3)" />
     40    <Custom Action="ca_VBoxUSBMonDrvInst" After="ca_VBoxUSBMonDrvInstParms"
    4541            Condition="NOT REMOVE AND (&amp;VBoxUSB=3)" />
    4642
    4743    <!-- Start VBoxUSBMon after installation. -->
    48     <Custom Action="ca_VBoxUSBMonDrvStartArgFn" Before="ca_VBoxUSBMonDrvStartArgName" Condition="NOT REMOVE" />
    49     <Custom Action="ca_VBoxUSBMonDrvStartArgName" Before="ca_VBoxUSBMonDrvStart" Condition="NOT REMOVE" />
    50     <Custom Action="ca_VBoxUSBMonDrvStart" After="ca_VBoxUSBMonDrvInst" Condition="NOT REMOVE" />
     44    <Custom Action="ca_VBoxUSBMonDrvStartParms" After="ca_VBoxUSBMonDrvInst" Condition="NOT REMOVE" />
     45    <Custom Action="ca_VBoxUSBMonDrvStart" After="ca_VBoxUSBMonDrvStartParms" Condition="NOT REMOVE" />
    5146
    52     <Custom Action="ca_VBoxUSBMonDrvUninstArgModel" Before="ca_VBoxUSBMonDrvUninst"
     47    <Custom Action="ca_VBoxUSBMonDrvUninstParms" Before="ca_VBoxSupDrvUninst"
    5348            Condition="NOT (UPGRADINGPRODUCTCODE) AND (Installed) AND (REMOVE=&quot;ALL&quot;)" />
    54     <Custom Action="ca_VBoxUSBMonDrvUninst" After="InstallInitialize"
     49    <Custom Action="ca_VBoxUSBMonDrvUninst" After="ca_VBoxUSBMonDrvUninstParms"
    5550            Condition="NOT (UPGRADINGPRODUCTCODE) AND (Installed) AND (REMOVE=&quot;ALL&quot;)" />
    5651
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