VirtualBox

Ignore:
Timestamp:
Nov 3, 2010 1:06:12 PM (14 years ago)
Author:
vboxsync
Message:

Automatic Guest Additions update: Support/graceful handling for old(er) Guest Additions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/GuestImpl.cpp

    r33697 r33723  
    258258                                                        ComSafeArrayAsInParam(args),
    259259                                                        ComSafeArrayAsInParam(env),
    260                                                         Bstr("").raw() /* Username */,
     260                                                        Bstr("").raw() /* Username. */,
    261261                                                        Bstr("").raw() /* Password */,
    262                                                         10 * 1000 /* Wait 10s for getting the process started */,
    263                                                         &uPID, progressCopy.asOutParam());
    264                     if (SUCCEEDED(rc))
     262                                                        5 * 1000 /* Wait 10s for getting the process started. */,
     263                                                        &uPID, progressCopy.asOutParam(), &vrc);
     264                    if (RT_FAILURE(vrc))
     265                    {
     266                        switch (vrc)
     267                        {
     268                            /* If we got back VERR_INVALID_PARAMETER we're running an old(er) Guest Additions version
     269                             * (< 4.0) which does not support automatic updating and/or has not the internal tool "vbox_cat". */
     270                            case VERR_INVALID_PARAMETER:
     271                                rc = setError(VBOX_E_NOT_SUPPORTED,
     272                                              tr("Currently installed Guest Additions don't support automatic updating, please update them manually"));
     273                                break;
     274                            /* Getting back a VERR_TIMEOUT basically means that either VBoxService on the guest does not run (anymore) or that
     275                             * no Guest Additions (on a supported automatic updating OS) are installed at all. */
     276                            case VERR_TIMEOUT:
     277                                rc = setError(VBOX_E_NOT_SUPPORTED,
     278                                              tr("Guest Additions seem not to be installed on the guest or are not responding, please update them manually"));
     279                                break;
     280
     281                            default:
     282                                break;
     283                        }
     284                    }
     285                    else
    265286                    {
    266287                        if (aTask->progress)
     
    362383                                                    Bstr("").raw() /* Username */,
    363384                                                    Bstr("").raw() /* Password */,
    364                                                     10 * 1000 /* Wait 10s for getting the process started */,
    365                                                     &uPID, progressInstaller.asOutParam());
     385                                                    5 * 1000 /* Wait 5s for getting the process started */,
     386                                                    &uPID, progressInstaller.asOutParam(), &vrc);
    366387                if (SUCCEEDED(rc))
    367388                {
     
    14561477    return executeProcessInternal(aCommand, aFlags, ComSafeArrayInArg(aArguments),
    14571478                                  ComSafeArrayInArg(aEnvironment),
    1458                                   aUserName, aPassword, aTimeoutMS, aPID, aProgress);
     1479                                  aUserName, aPassword, aTimeoutMS, aPID, aProgress, NULL /* rc */);
    14591480#endif
    14601481}
     
    14631484                                      ComSafeArrayIn(IN_BSTR, aArguments), ComSafeArrayIn(IN_BSTR, aEnvironment),
    14641485                                      IN_BSTR aUserName, IN_BSTR aPassword,
    1465                                       ULONG aTimeoutMS, ULONG *aPID, IProgress **aProgress)
     1486                                      ULONG aTimeoutMS, ULONG *aPID, IProgress **aProgress, int *pRC)
    14661487{
    14671488/** @todo r=bird: Eventually we should clean up all the timeout parameters
     
    14811502            && !(aFlags & ExecuteProcessFlag_WaitForProcessStartOnly))
    14821503        {
     1504            if (pRC)
     1505                *pRC = VERR_INVALID_PARAMETER;
    14831506            return setError(E_INVALIDARG, tr("Unknown flags (%#x)"), aFlags);
    14841507        }
     
    15081531                                Bstr(tr("Starting process ...")).raw());    /* Description of first stage. */
    15091532        }
    1510         if (FAILED(rc)) return rc;
     1533        ComAssertRC(rc);
    15111534
    15121535        /*
     
    17651788        if (RT_FAILURE(vrc))
    17661789        {
    1767             if (!Utf8UserName.isEmpty()) /* Skip logging internal calls. */
     1790            if (!pRC) /* Skip logging internal calls. */
    17681791                LogRel(("Executing guest process \"%s\" as user \"%s\" failed with %Rrc\n",
    17691792                        Utf8Command.c_str(), Utf8UserName.c_str(), vrc));
    17701793        }
     1794
     1795        if (pRC)
     1796            *pRC = vrc;
    17711797    }
    17721798    catch (std::bad_alloc &)
     
    23082334                                            Bstr(Utf8UserName).raw(),
    23092335                                            Bstr(Utf8Password).raw(),
    2310                                             10 * 1000 /* Wait 10s for getting the process started */,
     2336                                            5 * 1000 /* Wait 5s for getting the process started. */,
    23112337                                            &uPID, execProgress.asOutParam());
    23122338                    }
Note: See TracChangeset for help on using the changeset viewer.

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