VirtualBox

儲存庫 vbox 的更動 86782


忽略:
時間撮記:
2020-11-2 下午04:31:41 (4 年 以前)
作者:
vboxsync
svn:sync-xref-src-repo-rev:
141208
訊息:

Windows host installer: Implemented a new warning dialog that shows if the Python bindings dependencies are not met. More code for the Python bindings detection + installation. Only got limited testing so far. bugref:9855

位置:
trunk/src/VBox/Installer/win
檔案:
修改 15 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp

    r86777 r86782  
    144144
    145145/**
    146  * Tries to retrieve the Python installation path on the system.
     146 * Waits for a started process to terminate.
     147 *
     148 * @returns VBox status code.
     149 * @param   Process             Handle of process to wait for.
     150 * @param   msTimeout           Timeout (in ms) to wait for process to terminate.
     151 * @param   pProcSts            Pointer to process status on return.
     152 */
     153static int procWait(RTPROCESS Process, RTMSINTERVAL msTimeout, PRTPROCSTATUS pProcSts)
     154{
     155    uint64_t tsStartMs = RTTimeMilliTS();
     156
     157    while (RTTimeMilliTS() - tsStartMs <= msTimeout)
     158    {
     159        int rc = RTProcWait(Process, RTPROCWAIT_FLAGS_NOBLOCK, pProcSts);
     160        if (rc == VERR_PROCESS_RUNNING)
     161            continue;
     162        else if (RT_FAILURE(rc))
     163            return rc;
     164
     165        if (   pProcSts->iStatus   != 0
     166            || pProcSts->enmReason != RTPROCEXITREASON_NORMAL)
     167        {
     168            rc = VERR_GENERAL_FAILURE; /** @todo Fudge! */
     169        }
     170
     171        return VINF_SUCCESS;
     172    }
     173
     174    return VERR_TIMEOUT;
     175}
     176
     177/**
     178 * Runs an executable on the OS.
     179 *
     180 * @returns VBox status code.
     181 * @param   hModule             Windows installer module handle.
     182 * @param   pcsExe              Absolute path of executable to run.
     183 * @param   papcszArgs          Pointer to command line arguments to use for calling the executable.
     184 * @param   cArgs               Number of command line arguments in \a papcszArgs.
     185 */
     186static int procRun(MSIHANDLE hModule, const char *pcszImage, const char **papcszArgs, size_t cArgs)
     187{
     188    RT_NOREF(cArgs);
     189
     190    RTPROCESS Process;
     191    RT_ZERO(Process);
     192
     193    uint32_t fProcess  = 0;
     194#ifndef DEBUG
     195             fProcess |= RTPROC_FLAGS_HIDDEN;
     196#endif
     197
     198    int rc = RTProcCreate(pcszImage, papcszArgs, RTENV_DEFAULT, fProcess, &Process);
     199    if (RT_SUCCESS(rc))
     200    {
     201        RTPROCSTATUS ProcSts;
     202        RT_ZERO(ProcSts);
     203
     204        rc = procWait(Process, RT_MS_30SEC, &ProcSts);
     205
     206        if (RT_FAILURE(rc))
     207            logStringF(hModule, "procRun: Waiting for process \"%s\" failed with %Rrc (process status: %d, reason: %d)\n",
     208                       pcszImage, rc, ProcSts.iStatus, ProcSts.enmReason);
     209    }
     210    else
     211        logStringF(hModule, "procRun: Creating process for \"%s\" failed with %Rrc\n", pcszImage, rc);
     212
     213    return rc;
     214}
     215
     216/**
     217 * Tries to retrieve the Python installation path on the system, extended version.
    147218 *
    148219 * @returns VBox status code.
     
    152223 *                              Must be free'd by the caller using RTStrFree().
    153224 */
    154 static int getPythonPath(MSIHANDLE hModule, HKEY hKeyRoot, char **ppszPath)
     225static int getPythonPathEx(MSIHANDLE hModule, HKEY hKeyRoot, char **ppszPath)
    155226{
    156227    HKEY hkPythonCore = NULL;
     
    194265        dwErr = RegQueryValueExW(hkPythonInstPath, L"", NULL, &dwKeyType, (LPBYTE)wszVal, &dwKey);
    195266        if (dwErr == ERROR_SUCCESS)
    196             logStringF(hModule, "InstallPythonAPI: Path \"%ls\" found.", wszVal);
     267            logStringF(hModule, "getPythonPath: Path \"%ls\" found.", wszVal);
    197268
    198269        if (pszPythonPath) /* Free former path, if any. */
     
    207278        if (!RTPathExists(pszPythonPath))
    208279        {
    209             logStringF(hModule, "InstallPythonAPI: Warning: Path \"%s\" does not exist, skipping.", wszVal);
     280            logStringF(hModule, "getPythonPath: Warning: Defined path \"%s\" does not exist, skipping.", wszVal);
    210281            rc = VERR_PATH_NOT_FOUND;
    211282        }
     
    227298
    228299/**
    229  * Waits for a started process to terminate.
     300 * Retrieves the absolute path of the Python installation.
    230301 *
    231302 * @returns VBox status code.
    232  * @param   Process             Handle of process to wait for.
    233  * @param   msTimeout           Timeout (in ms) to wait for process to terminate.
    234  * @param   pProcSts            Pointer to process status on return.
     303 * @param   hModule             Windows installer module handle.
     304 * @param   ppszPath            Where to store the absolute path of the Python installation.
     305 *                              Must be free'd by the caller.
    235306 */
    236 int procWait(RTPROCESS Process, RTMSINTERVAL msTimeout, PRTPROCSTATUS pProcSts)
    237 {
    238     uint64_t tsStartMs = RTTimeMilliTS();
    239 
    240     while (RTTimeMilliTS() - tsStartMs <= msTimeout)
    241     {
    242         int rc = RTProcWait(Process, RTPROCWAIT_FLAGS_NOBLOCK, pProcSts);
    243         if (rc == VERR_PROCESS_RUNNING)
    244             continue;
    245         else if (RT_FAILURE(rc))
    246             return rc;
    247 
    248         if (   pProcSts->iStatus   != 0
    249             || pProcSts->enmReason != RTPROCEXITREASON_NORMAL)
    250         {
    251             rc = VERR_GENERAL_FAILURE; /** @todo Fudge! */
    252         }
    253 
    254         return VINF_SUCCESS;
    255     }
    256 
    257     return VERR_TIMEOUT;
     307static int getPythonPath(MSIHANDLE hModule, char **ppszPath)
     308{
     309    int rc = getPythonPathEx(hModule, HKEY_LOCAL_MACHINE, ppszPath);
     310    if (RT_FAILURE(rc))
     311        rc = getPythonPathEx(hModule, HKEY_CURRENT_USER, ppszPath);
     312
     313    return rc;
     314}
     315
     316/**
     317 * Retrieves the absolute path of the Python executable.
     318 *
     319 * @returns VBox status code.
     320 * @param   hModule             Windows installer module handle.
     321 * @param   ppszPythonExe       Where to store the absolute path of the Python executable.
     322 *                              Must be free'd by the caller.
     323 */
     324static int getPythonExe(MSIHANDLE hModule, char **ppszPythonExe)
     325{
     326    int rc = getPythonPath(hModule, ppszPythonExe);
     327    if (RT_SUCCESS(rc))
     328        rc = RTStrAAppend(ppszPythonExe, "python.exe"); /** @todo Can this change? */
     329
     330    return rc;
     331}
     332
     333/**
     334 * Checks if all dependencies for running the VBox Python API bindings are met.
     335 *
     336 * @returns VBox status code, or error if depedencies are not met.
     337 * @param   hModule             Windows installer module handle.
     338 * @param   pcszPythonExe       Path to Python interpreter image (.exe).
     339 */
     340static int checkPythonDependencies(MSIHANDLE hModule, const char *pcszPythonExe)
     341{
     342    /*
     343     * Check if importing the win32api module works.
     344     * This is a prerequisite for setting up the VBox API.
     345     */
     346    logStringF(hModule, "checkPythonDependencies: Checking for win32api extensions ...");
     347
     348    const char *papszArgs[4] = { pcszPythonExe, "-c", "import win32api", NULL};
     349
     350    int rc = procRun(hModule, pcszPythonExe, papszArgs, RT_ELEMENTS(papszArgs));
     351    if (RT_SUCCESS(rc))
     352    {
     353        logStringF(hModule, "checkPythonDependencies: win32api found\n");
     354    }
     355    else
     356        logStringF(hModule, "checkPythonDependencies: Importing win32api failed with %Rrc\n", rc);
     357
     358    return rc;
    258359}
    259360
     
    272373{
    273374    char *pszPythonPath;
    274     int rc = getPythonPath(hModule, HKEY_LOCAL_MACHINE, &pszPythonPath);
    275     if (RT_FAILURE(rc))
    276         rc = getPythonPath(hModule, HKEY_CURRENT_USER, &pszPythonPath);
    277 
     375    int rc = getPythonPath(hModule, &pszPythonPath);
    278376    if (RT_SUCCESS(rc))
    279377    {
     
    296394        logStringF(hModule, "IsPythonInstalled: Error: No suitable Python installation found (%Rrc), skipping installation.", rc);
    297395
     396    if (RT_FAILURE(rc))
     397        logStringF(hModule, "IsPythonInstalled: Python seems not to be installed (%Rrc); please download + install the Python Core package.", rc);
     398
    298399    VBoxSetMsiProp(hModule, L"VBOX_PYTHON_INSTALLED", RT_SUCCESS(rc) ? L"1" : L"0");
     400
     401    return ERROR_SUCCESS; /* Never return failure. */
     402}
     403
     404/**
     405 * Checks if all dependencies for running the VBox Python API bindings are met.
     406 *
     407 * Called from the MSI installer as custom action.
     408 *
     409 * @returns Always ERROR_SUCCESS.
     410 *          Sets public property VBOX_PYTHON_DEPS_INSTALLED to "0" (false) or "1" (success).
     411 *
     412 * @param   hModule             Windows installer module handle.
     413 */
     414UINT __stdcall ArePythonAPIDepsInstalled(MSIHANDLE hModule)
     415{
     416    char *pszPythonExe;
     417    int rc = getPythonExe(hModule, &pszPythonExe);
     418    if (RT_SUCCESS(rc))
     419    {
     420        rc = checkPythonDependencies(hModule, pszPythonExe);
     421        if (RT_SUCCESS(rc))
     422            logStringF(hModule, "ArePythonAPIDepsInstalled: Dependencies look good.\n");
     423
     424        RTStrFree(pszPythonExe);
     425    }
     426
     427    if (RT_FAILURE(rc))
     428        logStringF(hModule, "ArePythonAPIDepsInstalled: Failed with %Rrc\n", rc);
     429
     430    VBoxSetMsiProp(hModule, L"VBOX_PYTHON_DEPS_INSTALLED", RT_SUCCESS(rc) ? L"1" : L"0");
    299431
    300432    return ERROR_SUCCESS; /* Never return failure. */
     
    315447    logStringF(hModule, "InstallPythonAPI: Checking for installed Python environment(s) ...");
    316448
    317     char *pszPythonPath;
    318     int rc = getPythonPath(hModule, HKEY_LOCAL_MACHINE, &pszPythonPath);
     449    char *pszPythonExe;
     450    int rc = getPythonExe(hModule, &pszPythonExe);
    319451    if (RT_FAILURE(rc))
    320         rc = getPythonPath(hModule, HKEY_CURRENT_USER, &pszPythonPath);
    321 
    322     if (RT_FAILURE(rc))
    323452    {
    324453        VBoxSetMsiProp(hModule, L"VBOX_API_INSTALLED", L"0");
    325 
    326         logStringF(hModule, "InstallPythonAPI: Python seems not to be installed (%Rrc); please download + install the Python Core package.", rc);
    327454        return ERROR_SUCCESS;
    328     }
    329 
    330     logStringF(hModule, "InstallPythonAPI: Python installation found at \"%s\".", pszPythonPath);
    331     logStringF(hModule, "InstallPythonAPI: Checking for win32api extensions ...");
    332 
    333     uint32_t fProcess = 0;
    334 #ifndef DEBUG
    335              fProcess |= RTPROC_FLAGS_HIDDEN;
    336 #endif
    337 
    338     char szPythonPath[RTPATH_MAX] = { 0 };
    339     rc = RTPathAppend(szPythonPath, sizeof(szPythonPath), pszPythonPath);
    340     if (RT_SUCCESS(rc))
    341     {
    342         rc = RTPathAppend(szPythonPath, sizeof(szPythonPath), "python.exe");
    343         if (RT_SUCCESS(rc))
    344         {
    345             /*
    346              * Check if importing the win32api module works.
    347              * This is a prerequisite for setting up the VBox API.
    348              */
    349             RTPROCESS Process;
    350             RT_ZERO(Process);
    351             const char *papszArgs[4] = { szPythonPath, "-c", "import win32api", NULL};
    352             rc = RTProcCreate(szPythonPath, papszArgs, RTENV_DEFAULT, fProcess, &Process);
    353             if (RT_SUCCESS(rc))
    354             {
    355                 RTPROCSTATUS ProcSts;
    356                 rc = procWait(Process, RT_MS_30SEC, &ProcSts);
    357                 if (RT_FAILURE(rc))
    358                     logStringF(hModule, "InstallPythonAPI: Importing the win32api failed with %d (exit reason: %d)\n",
    359                                    ProcSts.iStatus, ProcSts.enmReason);
    360             }
    361         }
    362455    }
    363456
     
    365458     * Set up the VBox API.
    366459     */
     460    /* Get the VBox API setup string. */
     461    char *pszVBoxSDKPath;
     462    rc = VBoxGetMsiPropUtf8(hModule, "CustomActionData", &pszVBoxSDKPath);
    367463    if (RT_SUCCESS(rc))
    368464    {
    369         /* Get the VBox API setup string. */
    370         char *pszVBoxSDKPath;
    371         rc = VBoxGetMsiPropUtf8(hModule, "CustomActionData", &pszVBoxSDKPath);
     465        /* Make sure our current working directory is the VBox installation path. */
     466        rc = RTPathSetCurrent(pszVBoxSDKPath);
    372467        if (RT_SUCCESS(rc))
    373468        {
    374             /* Make sure our current working directory is the VBox installation path. */
    375             rc = RTPathSetCurrent(pszVBoxSDKPath);
     469            /* Set required environment variables. */
     470            rc = RTEnvSet("VBOX_INSTALL_PATH", pszVBoxSDKPath);
    376471            if (RT_SUCCESS(rc))
    377472            {
    378                 /* Set required environment variables. */
    379                 rc = RTEnvSet("VBOX_INSTALL_PATH", pszVBoxSDKPath);
     473                logStringF(hModule, "InstallPythonAPI: Invoking vboxapisetup.py in \"%s\" ...\n", pszVBoxSDKPath);
     474
     475                const char *papszArgs[4] = { pszPythonExe, "vboxapisetup.py", "install", NULL};
     476
     477                rc = procRun(hModule, pszPythonExe, papszArgs, RT_ELEMENTS(papszArgs));
    380478                if (RT_SUCCESS(rc))
    381                 {
    382                     RTPROCSTATUS ProcSts;
    383                     RT_ZERO(ProcSts);
    384 
    385                     logStringF(hModule, "InstallPythonAPI: Invoking vboxapisetup.py in \"%s\" ...\n", pszVBoxSDKPath);
    386 
    387                     RTPROCESS Process;
    388                     RT_ZERO(Process);
    389                     const char *papszArgs[4] = { szPythonPath, "vboxapisetup.py", "install", NULL};
    390                     rc = RTProcCreate(szPythonPath, papszArgs, RTENV_DEFAULT, fProcess, &Process);
    391                     if (RT_SUCCESS(rc))
    392                     {
    393                         rc = procWait(Process, RT_MS_30SEC, &ProcSts);
    394                         if (RT_SUCCESS(rc))
    395                             logStringF(hModule, "InstallPythonAPI: Installation of vboxapisetup.py successful\n");
    396                     }
    397 
    398                     if (RT_FAILURE(rc))
    399                         logStringF(hModule, "InstallPythonAPI: Calling vboxapisetup.py failed with %Rrc (process status: %d, exit reason: %d)\n",
    400                                    rc, ProcSts.iStatus, ProcSts.enmReason);
    401                 }
    402                 else
    403                     logStringF(hModule, "InstallPythonAPI: Could set environment variable VBOX_INSTALL_PATH, rc=%Rrc\n", rc);
     479                    logStringF(hModule, "InstallPythonAPI: Installation of vboxapisetup.py successful\n");
     480
     481                if (RT_FAILURE(rc))
     482                    logStringF(hModule, "InstallPythonAPI: Calling vboxapisetup.py failed with %Rrc\n", rc);
    404483            }
    405484            else
    406                 logStringF(hModule, "InstallPythonAPI: Could set working directory to \"%s\", rc=%Rrc\n", pszVBoxSDKPath, rc);
    407 
    408             RTStrFree(pszVBoxSDKPath);
     485                logStringF(hModule, "InstallPythonAPI: Could set environment variable VBOX_INSTALL_PATH, rc=%Rrc\n", rc);
    409486        }
    410487        else
    411             logStringF(hModule, "InstallPythonAPI: Unable to retrieve VBox installation directory, rc=%Rrc\n", rc);
    412     }
     488            logStringF(hModule, "InstallPythonAPI: Could set working directory to \"%s\", rc=%Rrc\n", pszVBoxSDKPath, rc);
     489
     490        RTStrFree(pszVBoxSDKPath);
     491    }
     492    else
     493        logStringF(hModule, "InstallPythonAPI: Unable to retrieve VBox installation directory, rc=%Rrc\n", rc);
    413494
    414495    /*
     
    419500        logStringF(hModule, "InstallPythonAPI: Validating VBox API ...\n");
    420501
    421         RTPROCSTATUS ProcSts;
    422         RT_ZERO(ProcSts);
    423 
    424         RTPROCESS Process;
    425         RT_ZERO(Process);
    426         const char *papszArgs[4] = { szPythonPath, "-c", "from vboxapi import VirtualBoxManager", NULL};
    427         rc = RTProcCreate(szPythonPath, papszArgs, RTENV_DEFAULT, fProcess, &Process);
     502        const char *papszArgs[4] = { pszPythonExe, "-c", "from vboxapi import VirtualBoxManager", NULL};
     503
     504        rc = procRun(hModule, pszPythonExe, papszArgs, RT_ELEMENTS(papszArgs));
    428505        if (RT_SUCCESS(rc))
    429         {
    430             rc = procWait(Process, RT_MS_30SEC, &ProcSts);
    431             if (RT_SUCCESS(rc))
    432                 logStringF(hModule, "InstallPythonAPI: VBox API looks good.\n");
    433         }
     506            logStringF(hModule, "InstallPythonAPI: VBox API looks good.\n");
    434507
    435508        if (RT_FAILURE(rc))
    436             logStringF(hModule, "InstallPythonAPI: Validating VBox API failed with %Rrc (process status: %d, exit reason: %d)\n",
    437                        rc, ProcSts.iStatus, ProcSts.enmReason);
    438     }
    439 
    440     RTStrFree(pszPythonPath);
     509            logStringF(hModule, "InstallPythonAPI: Validating VBox API failed with %Rrc\n", rc);
     510    }
     511
     512    RTStrFree(pszPythonExe);
    441513
    442514    VBoxSetMsiProp(hModule, L"VBOX_API_INSTALLED", RT_SUCCESS(rc) ? L"1" : L"0");
  • trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def

    r82968 r86782  
    2020    IsSerialCheckNeeded
    2121    CheckSerial
     22    IsPythonInstalled
     23    ArePythonAPIDepsInstalled
    2224    InstallPythonAPI
    2325    InstallBranding
     
    3537    Ndis6CreateHostOnlyInterface
    3638    Ndis6UpdateHostOnlyInterfaces
    37 
  • trunk/src/VBox/Installer/win/NLS/de_DE.wxl

    r82974 r86782  
    141141    <String Id="WarnDisconNetIfacesDlg_Desc">Beim Installieren des [ProductName] Netzwerk-Features wird die Netzwerkverbindung unterbrochen und der Computer somit temporär vom Netzwerk getrennt.</String>
    142142    <String Id="WarnDisconNetIfacesDlg_Question">Jetzt mit der Installation fortfahren?</String>
     143
     144    <!---->
     145
     146    <String Id="WarnPythonDlg_Title">Fehlende Abhängigkeiten</String>
     147    <String Id="WarnPythonDlg_Title2">Python Core / win32api</String>
     148    <String Id="WarnPythonDlg_Desc">Um die [ProductName] Python-Unterstützung zu installieren, werden Python Core als auch das win32api-Paket benötigt.</String>
     149    <String Id="WarnPythonDlg_Desc2">Wenn nun mit der Installation der [ProductName] Python-Unterstützung fortgefahren wird, muss diese später manuell eingerichtet werden. Bitte dazu im SDK-Handbuch für mehr Informationen nachschlagen.</String>
     150    <String Id="WarnPythonDlg_Question">Jetzt mit der Installation fortfahren?</String>
    143151
    144152    <!---->
  • trunk/src/VBox/Installer/win/NLS/el_GR.wxl

    r82974 r86782  
    145145    <String Id="WarnDisconNetIfacesDlg_Desc">Η εγκατάσταση των χαρακτηριστικών δικτύου [ProductName] θα επαναφέρει τη σύνδεση δικτύου σας και θα σας αποσυνδέσει προσωρινά από το δίκτυο.</String>
    146146    <String Id="WarnDisconNetIfacesDlg_Question">Συνέχιση της εγκατάστασης;</String>
     147
     148    <!---->
     149
     150    <String Id="WarnPythonDlg_Title">Missing Dependencies</String>
     151    <String Id="WarnPythonDlg_Title2">Python Core / win32api</String>
     152    <String Id="WarnPythonDlg_Desc">Installing the [ProductName] Python bindings requires the Python Core package and the win32api bindings to be installed first.</String>
     153    <String Id="WarnPythonDlg_Desc2">When continuing the installation of the [ProductName] Python bindings now, those need to be set up manually later. Refert to the [ProductName] SDK manual for more information.</String>
     154    <String Id="WarnPythonDlg_Question">Proceed with installation now?</String>
    147155
    148156    <!---->
  • trunk/src/VBox/Installer/win/NLS/en_US.wxl

    r82974 r86782  
    145145    <String Id="WarnDisconNetIfacesDlg_Desc">Installing the [ProductName] Networking feature will reset your network connection and temporarily disconnect you from the network.</String>
    146146    <String Id="WarnDisconNetIfacesDlg_Question">Proceed with installation now?</String>
     147
     148    <!---->
     149
     150    <String Id="WarnPythonDlg_Title">Missing Dependencies</String>
     151    <String Id="WarnPythonDlg_Title2">Python Core / win32api</String>
     152    <String Id="WarnPythonDlg_Desc">Installing the [ProductName] Python bindings requires the Python Core package and the win32api bindings to be installed first.</String>
     153    <String Id="WarnPythonDlg_Desc2">When continuing the installation of the [ProductName] Python bindings now, those need to be set up manually later. Refert to the [ProductName] SDK manual for more information.</String>
     154    <String Id="WarnPythonDlg_Question">Proceed with installation now?</String>
    147155
    148156    <!---->
  • trunk/src/VBox/Installer/win/NLS/fa_IR.wxl

    r82974 r86782  
    114114    <String Id="WarnDisconNetIfacesDlg_Desc">نصب ویژگی شبکه [ProductName] ارتباط شبکه شما را ریست خواهد کرد و موقتا ارتباط شما قطع خواهد شد.</String>
    115115    <String Id="WarnDisconNetIfacesDlg_Question">حالا با نصب اقدام کند؟</String>
     116    <!---->
     117    <String Id="WarnPythonDlg_Title">Missing Dependencies</String>
     118    <String Id="WarnPythonDlg_Title2">Python Core / win32api</String>
     119    <String Id="WarnPythonDlg_Desc">Installing the [ProductName] Python bindings requires the Python Core package and the win32api bindings to be installed first.</String>
     120    <String Id="WarnPythonDlg_Desc2">When continuing the installation of the [ProductName] Python bindings now, those need to be set up manually later. Refert to the [ProductName] SDK manual for more information.</String>
     121    <String Id="WarnPythonDlg_Question">Proceed with installation now?</String>
    116122    <!---->
    117123    <String Id="DiskCostDlg_SpaceRequired">فضای دیسک موردنیاز برای نصب ویژگی های انتخاب شده.</String>
  • trunk/src/VBox/Installer/win/NLS/fr_FR.wxl

    r82974 r86782  
    140140    <String Id="WarnDisconNetIfacesDlg_Desc">L'installation de la fonctionnalité réseau de [ProductName] réinitialisera votre connection réseau et vous déconnectera temporairement du réseau.</String>
    141141    <String Id="WarnDisconNetIfacesDlg_Question">Désirez-vous poursuivre l'installation maintenant?</String>
     142
     143    <!---->
     144
     145    <String Id="WarnPythonDlg_Title">Missing Dependencies</String>
     146    <String Id="WarnPythonDlg_Title2">Python Core / win32api</String>
     147    <String Id="WarnPythonDlg_Desc">Installing the [ProductName] Python bindings requires the Python Core package and the win32api bindings to be installed first.</String>
     148    <String Id="WarnPythonDlg_Desc2">When continuing the installation of the [ProductName] Python bindings now, those need to be set up manually later. Refert to the [ProductName] SDK manual for more information.</String>
     149    <String Id="WarnPythonDlg_Question">Proceed with installation now?</String>
    142150
    143151    <!---->
  • trunk/src/VBox/Installer/win/NLS/it_IT.wxl

    r82974 r86782  
    114114    <String Id="WarnDisconNetIfacesDlg_Desc">L'installazione delle funzionalità di rete di [ProductName] ripristinerà la connessione di rete causando una disconnessione temporanea dalla rete.</String>
    115115    <String Id="WarnDisconNetIfacesDlg_Question">Vuoi procedere subito con l'installazione?</String>
     116    <!---->
     117    <String Id="WarnPythonDlg_Title">Missing Dependencies</String>
     118    <String Id="WarnPythonDlg_Title2">Python Core / win32api</String>
     119    <String Id="WarnPythonDlg_Desc">Installing the [ProductName] Python bindings requires the Python Core package and the win32api bindings to be installed first.</String>
     120    <String Id="WarnPythonDlg_Desc2">When continuing the installation of the [ProductName] Python bindings now, those need to be set up manually later. Refert to the [ProductName] SDK manual for more information.</String>
     121    <String Id="WarnPythonDlg_Question">Proceed with installation now?</String>
    116122    <!---->
    117123    <String Id="DiskCostDlg_SpaceRequired">Lo spazio su disco richiesto per l'installazione delle funzionalità selezionate.</String>
  • trunk/src/VBox/Installer/win/NLS/tr_TR.wxl

    r82974 r86782  
    3636    <String Id="ButtonText_Exit">Çı&amp;kış</String>
    3737
    38           <String Id="InstallModeCustom">Özel</String>
     38    <String Id="InstallModeCustom">Özel</String>
    3939    <String Id="Setup">Kur</String>
    4040
     
    5656  <String Id="VB_Python">VirtualBox için Python desteği.</String>
    5757
    58         <!---->
    59 
    60         <String Id="NeedAdmin">[ProductName] uygulamasını yüklemek(kaldırmak) için yönetici haklarına sahip olmanız gerekir! Bu kur şimdi iptal edilecek.</String>
     58    <!---->
     59
     60    <String Id="NeedAdmin">[ProductName] uygulamasını yüklemek(kaldırmak) için yönetici haklarına sahip olmanız gerekir! Bu kur şimdi iptal edilecek.</String>
    6161    <String Id="WrongOS">Bu uygulama yalnızca Windows XP veya üzerinde çalışır.</String>
    6262    <String Id="Only32Bit">Bu uygulama yalnızca 32-bit Windows sistemlerinde çalışır. Lütfen [ProductName] 64-bit sürümünü yükleyin!</String>
     
    6565    <String Id="InnotekFound">Bu makinede eski bir innotek VirtualBox kurulumu bulundu. Lütfen önce bu paketi kaldırın ve sonra [ProductName] yükleyin!</String>
    6666
    67         <!---->
    68 
    69         <String Id="CancelDlg_Question">[ProductName] kurulumunu iptal etmek istediğinize emin misiniz?</String>
    70 
    71         <!---->
    72 
    73         <String Id="WelcomeDlg_Header">[ProductName] Kur Sihirbazına Hoş Geldiniz</String>
     67    <!---->
     68
     69    <String Id="CancelDlg_Question">[ProductName] kurulumunu iptal etmek istediğinize emin misiniz?</String>
     70
     71    <!---->
     72
     73    <String Id="WelcomeDlg_Header">[ProductName] Kur Sihirbazına Hoş Geldiniz</String>
    7474    <String Id="WelcomeDlg_Body">Kur Sihirbazı, bilgisayarınıza [ProductName] uygulamasını yükleyecek. Devam etmek için İleri'ye veya Kur Sihirbazından çıkmak için İptal'e tıklayın.</String>
    7575
    76         <!---->
    77 
    78         <String Id="LicenseAgreementDlg_Header">Son Kullanıcı Lisans Sözleşmesi</String>
     76    <!---->
     77
     78    <String Id="LicenseAgreementDlg_Header">Son Kullanıcı Lisans Sözleşmesi</String>
    7979    <String Id="LicenseAgreementDlg_Body">Lütfen aşağıdaki lisans sözleşmesini dikkatlice okuyun.</String>
    8080    <String Id="LicenseAgreementDlg_Accept">Lisans Sözleşmesi içindeki şartları kabul e&amp;diyorum</String>
     
    8383    <!---->
    8484
    85         <String Id="CheckSerialDlg_Header">Seri Numarası</String>
     85    <String Id="CheckSerialDlg_Header">Seri Numarası</String>
    8686    <String Id="CheckSerialDlg_Body">Lütfen aşağıdaki alana seri numaranızı girin. VirtualBox CD kutusu içerisindeki etikette bulacaksınız.</String>
    8787    <String Id="CheckSerialDlg_Footer">Seri numarasını girmeniz bittiğinde, aşağıdaki "Denetle" düğmesine basın".</String>
    8888
    89         <!---->
    90 
    91         <String Id="WrongSerialDlg_Header">Girilen seri numarası geçersiz!</String>
     89    <!---->
     90
     91    <String Id="WrongSerialDlg_Header">Girilen seri numarası geçersiz!</String>
    9292    <String Id="WrongSerialDlg_Desc1">Seri numaranızı tekrar girmek için lütfen geri gidin.</String>
    9393    <String Id="WrongSerialDlg_Desc2">Seri numarasını etiket üzerine basıldığı gibi aynen hecesi hecesine yazılmak zorunda olduğunu aklınızdan çıkarmayın.</String>
    9494
    95         <!---->
    96 
    97         <String Id="WarnSaveStatesDlg_Header">Uyarı:</String>
     95    <!---->
     96
     97    <String Id="WarnSaveStatesDlg_Header">Uyarı:</String>
    9898    <String Id="WarnSaveStatesDlg_Header2">Uyumsuz Kaydedildi Durumları!</String>
    9999    <String Id="WarnSaveStatesDlg_Desc">[ProductName] yükseltildiğinde, zaten varolan makinelerinizden gelen tüm kaydedildi durumları bundan böyle çalışmayacaktır! Kurulumdan sonra, bunlardan el ile vazgeçmek zorundasınız.</String>
    100100    <String Id="WarnSaveStatesDlg_Proceed">Şimdi kuruluma devam edilsin mi?</String>
    101101
    102         <!---->
    103 
    104         <String Id="WarnTAPDevicesDlg_Header">Anamakine Arayüzleri</String>
     102    <!---->
     103
     104    <String Id="WarnTAPDevicesDlg_Header">Anamakine Arayüzleri</String>
    105105    <String Id="WarnTAPDevicesDlg_Desc">Önceki sürümdeki makineleriniz için bazı anamakine arayüzleri kullandıysanız, bu kurulumdan sonra bunları el ile yeniden oluşturmak zorundasınız.</String>
    106106
    107         <!---->
    108 
    109         <String Id="NetCfgLocked">Şurada belirtilen uygulama yüklemeye devam etmeden önce kapatılmalıdır: "[2]"</String>
    110 
    111         <!---->
     107    <!---->
     108
     109    <String Id="NetCfgLocked">Şurada belirtilen uygulama yüklemeye devam etmeden önce kapatılmalıdır: "[2]"</String>
     110
     111    <!---->
    112112
    113113    <String Id="CustomizeDlg_Location">Konum:</String>
     
    120120    <String Id="CustomizeDlg_SelItemPath">CustomizeDlgLocation-CustomizeDlgLocation</String>
    121121
    122         <!---->
    123 
    124         <String Id="Customize2Dlg_Header">Özelleştir</String>
     122    <!---->
     123
     124    <String Id="Customize2Dlg_Header">Özelleştir</String>
    125125    <String Id="Customize2Dlg_Desc">Lütfen aşağıdaki seçeneklerden seçin:</String>
    126126    <String Id="Customize2Dlg_CreateStartMenuEntries">Başlangıç menüsü girişlerini oluştur</String>
     
    129129    <String Id="Customize2Dlg_RegisterFileExtensions">Dosya ilişkilendirmelerini kaydettir</String>
    130130
    131         <!---->
     131    <!---->
    132132
    133133    <String Id="SelectionNetworkTypeDlg_CommonDescription">Lütfen hangi tür ağ sürücülerini kullanacağınızı seçin:</String>
     
    139139    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS6">NDIS6 ağ sürücülerini kullan.</String>
    140140
    141         <!---->
    142 
    143         <String Id="WarnDisconNetIfacesDlg_Title">Uyarı:</String>
     141    <!---->
     142
     143    <String Id="WarnDisconNetIfacesDlg_Title">Uyarı:</String>
    144144    <String Id="WarnDisconNetIfacesDlg_Title2">Ağ Arayüzleri</String>
    145145    <String Id="WarnDisconNetIfacesDlg_Desc">[ProductName] Ağ Oluşturma özelliğini yüklemek ağ bağlantınızı sıfırlayacak ve geçici olarak ağdan bağlantınızı kesecektir.</String>
    146146    <String Id="WarnDisconNetIfacesDlg_Question">Şimdi kuruluma devam edilsin mi?</String>
    147147
    148         <!---->
    149 
    150         <String Id="DiskCostDlg_SpaceRequired">Seçilen özelliklerin kurulumu için gereken disk alanı.</String>
     148    <!---->
     149
     150    <String Id="WarnPythonDlg_Title">Missing Dependencies</String>
     151    <String Id="WarnPythonDlg_Title2">Python Core / win32api</String>
     152    <String Id="WarnPythonDlg_Desc">Installing the [ProductName] Python bindings requires the Python Core package and the win32api bindings to be installed first.</String>
     153    <String Id="WarnPythonDlg_Desc2">When continuing the installation of the [ProductName] Python bindings now, those need to be set up manually later. Refert to the [ProductName] SDK manual for more information.</String>
     154    <String Id="WarnPythonDlg_Question">Proceed with installation now?</String>
     155
     156    <!---->
     157
     158    <String Id="DiskCostDlg_SpaceRequired">Seçilen özelliklerin kurulumu için gereken disk alanı.</String>
    151159    <String Id="DiskCostDlg_NotEnoughSpace">Vurgulanan birimler (eğer varsa) şu anki seçilen özellikler için kullanılabilir yeterli disk alanına sahip değil. Ya vurgulanan birimlerden bazı dosyaları kaldırabilir ya da yerel sürücü(lere)ye daha az özellik yüklemeyi seçebilirsiniz veya farklı hedef sürücü(leri) seçebilirsiniz.</String>
    152160    <String Id="DiskCostDlg_SpaceRequirements">Disk Alanı Gereksinimleri</String>
    153161    <String Id="DiskCostDlg_VolumeList">{120}{70}{70}{70}{70}</String>
    154162
    155         <!---->
    156 
    157         <String Id="BrowseDlg_BrowseDestFolder">Hedef klasöre gözatın</String>
     163    <!---->
     164
     165    <String Id="BrowseDlg_BrowseDestFolder">Hedef klasöre gözatın</String>
    158166    <String Id="BrowseDlg_ChangeCurFolder">Şu anki hedef klasörü değiştirin</String>
    159167    <String Id="BrowseDlg_UpOneLevelTooltip">Bir seviye yukarı</String>
     
    162170    <String Id="BrowseDlg_FolderName">&amp;Klasör adı:</String>
    163171
    164         <!---->
    165 
    166         <String Id="VerifyReadyDlg_ReadyToBegin">Kur Sihirbazı, [InstallMode] kuruluma başlamak için hazır.</String>
     172    <!---->
     173
     174    <String Id="VerifyReadyDlg_ReadyToBegin">Kur Sihirbazı, [InstallMode] kuruluma başlamak için hazır.</String>
    167175    <String Id="VerifyReadyDlg_ClickInstall">Kuruluma başlamak için Yükle'ye tıklayın. Eğer herhangi bir kurulum ayarınızı gözden geçirmek veya değiştirmek istiyorsanız, Geri'ye tıklayın. Sihirbazdan çıkmak için İptal'e tıklayın.</String>
    168176    <String Id="VerifyReadyDlg_ReadyToInstall">Yüklemek için hazır</String>
    169177
    170         <!---->
    171 
    172         <String Id="ExitDlg_ClickFinish">Kur Sihirbazından çıkmak için Bitir düğmesine tıklayın.</String>
     178    <!---->
     179
     180    <String Id="ExitDlg_ClickFinish">Kur Sihirbazından çıkmak için Bitir düğmesine tıklayın.</String>
    173181    <String Id="ExitDlg_InstComplete">[ProductName] kurulumu tamamlandı.</String>
    174182    <String Id="ExitDlg_StartVBox">Kurulumdan sonra [ProductName] uygulamasını başlat</String>
    175183
    176         <!---->
    177 
    178         <String Id="FatalErrorDlg_Header">[ProductName] Kur Sihirbazı zamansız sonlandı</String>
     184    <!---->
     185
     186    <String Id="FatalErrorDlg_Header">[ProductName] Kur Sihirbazı zamansız sonlandı</String>
    179187    <String Id="FatalErrorDlg_Desc">[ProductName] kur bir hata yüzünden zamansız sonlandı. Sisteminiz değiştirilmedi. Bu programı daha sonraki bir zamanda yüklemek için lütfen kurulumu tekrar çalıştırın.</String>
    180188    <String Id="FatalErrorDlg_Footer">Kur Sihirbazından çıkmak için Bitir düğmesine tıklayın.</String>
    181189
    182         <!---->
    183 
    184         <String Id="FilesInUse_Text">Bu kur tarafından güncellenmesi gereken dosyaları aşağıdaki uygulamalar kullanıyor. Bu uygulamaları kapatın ve sonra kuruluma devam etmek için &amp;Yeniden Dene'ye veya çıkmak için İptal'e tıklayın.</String>
     190    <!---->
     191
     192    <String Id="FilesInUse_Text">Bu kur tarafından güncellenmesi gereken dosyaları aşağıdaki uygulamalar kullanıyor. Bu uygulamaları kapatın ve sonra kuruluma devam etmek için &amp;Yeniden Dene'ye veya çıkmak için İptal'e tıklayın.</String>
    185193    <String Id="FilesInUse_Description">Şu anda kullanımda olan bazı dosyaların güncellenmesi gerek.</String>
    186194    <String Id="FilesInUse_Title">Kullanımda olan Dosyalar</String>
    187195
    188         <!---->
    189 
    190         <String Id="UserExitDlg_Header">[ProductName] Kur Sihirbazı yarıda kesildi</String>
     196    <!---->
     197
     198    <String Id="UserExitDlg_Header">[ProductName] Kur Sihirbazı yarıda kesildi</String>
    191199    <String Id="UserExitDlg_Desc">[ProductName] kur yarıda kesildi. Sisteminiz değiştirilmedi. Bu programı daha sonraki bir zamanda yüklemek için lütfen kurulumu tekrar çalıştırın.</String>
    192200    <String Id="UserExitDlg_Footer">Kur Sihirbazından çıkmak için Bitir düğmesine tıklayın.</String>
    193201
    194         <!---->
    195 
    196         <String Id="ProgressDlg_PleaseWait">Kur Sihirbazı, [ProductName] uygulamasını yüklerken lütfen bekleyin. Bu birkaç dakika alabilir.</String>
    197 
    198         <!---->
    199 
    200         <String Id="ResumeDlg_Header">[ProductName] Kur Sihirbazına Devam Ediliyor</String>
     202    <!---->
     203
     204    <String Id="ProgressDlg_PleaseWait">Kur Sihirbazı, [ProductName] uygulamasını yüklerken lütfen bekleyin. Bu birkaç dakika alabilir.</String>
     205
     206    <!---->
     207
     208    <String Id="ResumeDlg_Header">[ProductName] Kur Sihirbazına Devam Ediliyor</String>
    201209    <String Id="ResumeDlg_Desc">Kur Sihirbazı [ProductName] uygulamasının bilgisayarınıza kurulumunu tamamlayacak. Devam etmek için Yükle'ye veya Kur Sihirbazından çıkmak için İptal'e tıklayın.</String>
    202210
    203         <!---->
    204 
    205         <String Id="MaintenanceTypeDlg_Header">Kurulumu Değiştir, Onar veya Kaldır</String>
     211    <!---->
     212
     213    <String Id="MaintenanceTypeDlg_Header">Kurulumu Değiştir, Onar veya Kaldır</String>
    206214    <String Id="MaintenanceTypeDlg_SelOption">Uygulanmasını istediğiniz işlemi seçin.</String>
    207215    <String Id="MaintenanceTypeDlg_Repair">&amp;Onar</String>
     
    216224    <String Id="MaintenanceTypeDlg_RemoveProgress2">kaldırma</String>
    217225
    218         <!---->
    219 
    220         <String Id="MaintenanceWelcomeDlg_Header">[ProductName] Kur Sihirbazına Hoş Geldiniz</String>
     226    <!---->
     227
     228    <String Id="MaintenanceWelcomeDlg_Header">[ProductName] Kur Sihirbazına Hoş Geldiniz</String>
    221229    <String Id="MaintenanceWelcomeDlg_Desc">Kur Sihirbazı şu anki kurulumunuzu onarmanıza veya [ProductName] uygulamasını bilgisayarınızdan kaldırmanıza izin verecektir. Devam etmek için İleri'ye veya Kur Sihirbazından çıkmak için İptal'e tıklayın.</String>
    222230
    223         <!---->
     231    <!---->
    224232
    225233    <String Id="OutOfDiskDlg_InstallationExceeds">Kurulum için gereken disk alanı mevcut disk alanını aşıyor.</String>
     
    227235    <String Id="OutOfDiskDlg_OutOfDiskSpace">Yetersiz Disk Alanı</String>
    228236
    229         <!---->
     237    <!---->
    230238
    231239    <String Id="OutOfRbDiskDlg_InstallationExceeds">Kurulum için gereken disk alanı mevcut disk alanını aşıyor.</String>
     
    234242    <String Id="OutOfRbDiskDlg_Desc">Alternatif olarak, yükleyicinin geriye alma işlevselliğini etkisizleştirmeyi seçebilirsiniz. Bu, herhangi bir şekilde kurulumun yarıda kesilmesiyle yükleyicinin bilgisayarınızın orijinal durumuna geri yüklenmesi için izin verir. Geri almayı etkisizleştirme riskini almak isterseniz Evet'e tıklayın.</String>
    235243
    236         <!---->
    237 
    238         <String Id="VerifyRemoveDlg_Header">[ProductName] Kaldır</String>
     244    <!---->
     245
     246    <String Id="VerifyRemoveDlg_Header">[ProductName] Kaldır</String>
    239247    <String Id="VerifyRemoveDlg_Desc">Programı bilgisayarınızdan kaldırmayı seçmektesiniz.</String>
    240248    <String Id="VerifyRemoveDlg_ClickRemove">[ProductName] uygulamasını bilgisayarınızdan kaldırmak için Kaldır'a tıklayın. Eğer herhangi bir kurulum ayarınızı gözden geçirmek veya değiştirmek istiyorsanız, Geri'ye tıklayın. Sihirbazdan çıkmak için İptal'e tıklayın.</String>
    241249
    242         <!---->
    243 
    244         <String Id="VerifyRepairDlg_Header">[ProductName] Onar</String>
     250    <!---->
     251
     252    <String Id="VerifyRepairDlg_Header">[ProductName] Onar</String>
    245253    <String Id="VerifyRepairDlg_ReadyToBegin">Kur Sihirbazı [ProductName] uygulamasının onarılmasına başlamak için hazır.</String>
    246254    <String Id="VerifyRepairDlg_ClickRepair">[ProductName] kurulumunu onarmak için Onar'a tıklayın. Eğer herhangi bir kurulum ayarınızı gözden geçirmek veya değiştirmek istiyorsanız, Geri'ye tıklayın. Sihirbazdan çıkmak için İptal'e tıklayın.</String>
    247255
    248         <!---->
    249 
    250         <String Id="WaitForCostingDlg_PleaseWait">Yükleyici disk alanı gereksinimlerinizi belirlemeyi tamamlarken lütfen bekleyin.</String>
    251 
    252         <!---->
    253 
    254         <String Id="MsiRMFilesInUse_Text">Bu kur tarafından güncellenmesi gereken dosyaları aşağıdaki uygulamalar kullanıyor. Kur Sihirbazına bunları kapatması ve yeniden başlatmayı denemesi veya daha sonra makineyi yeniden başlatması için izin verebilirsiniz.</String>
     256    <!---->
     257
     258        <String Id="WaitForCostingDlg_PleaseWait">Yükleyici disk alanı gereksinimlerinizi belirlemeyi tamamlarken lütfen bekleyin.</String>
     259
     260    <!---->
     261
     262    <String Id="MsiRMFilesInUse_Text">Bu kur tarafından güncellenmesi gereken dosyaları aşağıdaki uygulamalar kullanıyor. Kur Sihirbazına bunları kapatması ve yeniden başlatmayı denemesi veya daha sonra makineyi yeniden başlatması için izin verebilirsiniz.</String>
    255263    <String Id="MsiRMFilesInUse_Description">Şu anda kullanımda olan bazı dosyaların güncellenmesi gerek.</String>
    256264    <String Id="MsiRMFilesInUse_Title">Kullanımda olan Dosyalar</String>
     
    418426    <String Id="Error1935">[2] derleme bileşeninin kurulumu sırasında bir hata meydana geldi. HRESULT: [3]. {{derleme arayüzü: [4], işlev: [5], derleme adı: [6]}}</String>
    419427
    420         <!-- Own / special errors -->
     428    <!-- Own / special errors -->
    421429    <String Id="Error25001">"[2]" uygulamasının kuruluma devam etmesi için kapatılması gerekiyor.</String>
    422430
     
    548556    <String Id="ProgressTextUnpublishProduct">Ürün bilgisi yayından kaldırılıyor</String>
    549557
    550         <String Id="UITextbytes">bayt</String>
     558    <String Id="UITextbytes">bayt</String>
    551559    <String Id="UITextGB">GB</String>
    552560    <String Id="UITextKB">KB</String>
  • trunk/src/VBox/Installer/win/NLS/zh_CN.wxl

    r82974 r86782  
    145145<String Id="WarnDisconNetIfacesDlg_Desc">安装 [ProductName] 网络功能将重置网络连接并暂时中断网络连接。</String>
    146146<String Id="WarnDisconNetIfacesDlg_Question">立即安装吗?</String>
     147
     148<!---->
     149
     150<String Id="WarnPythonDlg_Title">Missing Dependencies</String>
     151<String Id="WarnPythonDlg_Title2">Python Core / win32api</String>
     152<String Id="WarnPythonDlg_Desc">Installing the [ProductName] Python bindings requires the Python Core package and the win32api bindings to be installed first.</String>
     153<String Id="WarnPythonDlg_Desc2">When continuing the installation of the [ProductName] Python bindings now, those need to be set up manually later. Refert to the [ProductName] SDK manual for more information.</String>
     154<String Id="WarnPythonDlg_Question">Proceed with installation now?</String>
    147155
    148156<!---->
  • trunk/src/VBox/Installer/win/NLS/zh_TW.wxl

    r82974 r86782  
    145145    <String Id="WarnDisconNetIfacesDlg_Desc">安裝 [ProductName] 網路功能將重設您的網路連線並暫時中斷網路連線。</String>
    146146    <String Id="WarnDisconNetIfacesDlg_Question">立即進行安裝嗎?</String>
     147
     148    <!---->
     149
     150    <String Id="WarnPythonDlg_Title">Missing Dependencies</String>
     151    <String Id="WarnPythonDlg_Title2">Python Core / win32api</String>
     152    <String Id="WarnPythonDlg_Desc">Installing the [ProductName] Python bindings requires the Python Core package and the win32api bindings to be installed first.</String>
     153    <String Id="WarnPythonDlg_Desc2">When continuing the installation of the [ProductName] Python bindings now, those need to be set up manually later. Refert to the [ProductName] SDK manual for more information.</String>
     154    <String Id="WarnPythonDlg_Question">Proceed with installation now?</String>
    147155
    148156    <!---->
  • trunk/src/VBox/Installer/win/UserInterface.wxi

    r82970 r86782  
    305305                <Publish Event="NewDialog" Value="VBoxCustomize2Dlg"/>
    306306        <?else ?>
    307                 <Publish Event="NewDialog" Value="VBoxVerifyReadyDlg">1</Publish>
     307                <?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
     308                    <Publish Event="NewDialog" Value="VBoxWarnPythonDlg"><![CDATA[(&VBoxPython=3 AND (VBOX_PYTHON_DEPS_INSTALLED="0"))]]></Publish>
     309                    <Publish Event="NewDialog" Value="VBoxVerifyReadyDlg"><![CDATA[((&VBoxPython<3) OR (VBOX_PYTHON_DEPS_INSTALLED="1"))]]></Publish>
     310                <?else ?>
     311                    <Publish Event="NewDialog" Value="VBoxVerifyReadyDlg">1</Publish>
     312                <?endif?>
     313
    308314        <?endif ?>
    309315                <Subscribe Event="SelectionNoItems" Attribute="Enabled" />
     
    413419            <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17"
    414420                Default="yes" Cancel="yes" Text="!(loc.ButtonText_Next)">
    415             <?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
     421                <!-- Note: The order of publishing the event(s) here is important. -->
     422<?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
     423                <Publish Event="NewDialog" Value="VBoxWarnPythonDlg"><![CDATA[((&VBoxPython=3) AND (VBOX_PYTHON_DEPS_INSTALLED="0"))]]></Publish>
     424<?endif?>
     425<?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
    416426                <Publish Event="NewDialog" Value="VBoxWarnDisconNetIfacesDlg"><![CDATA[(&VBoxNetworkFlt=3)]]></Publish>
    417427                <Publish Event="NewDialog" Value="VBoxVerifyReadyDlg"><![CDATA[(&VBoxNetworkFlt<3)]]></Publish>
    418             <?else ?>
     428<?else ?>
    419429                <Publish Event="NewDialog" Value="VBoxVerifyReadyDlg">1</Publish>
    420             <?endif?>
     430<?endif?>
    421431            </Control>
    422432            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17"
     
    478488            <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Yes)">
    479489                 <Publish Event="NewDialog" Value="VBoxVerifyReadyDlg">1</Publish>
     490            </Control>
     491
     492            <!-- Canceling will bring up a confirmation dialog ('SpawnDialog' attribute) -->
     493            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_No)">
     494                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
     495            </Control>
     496
     497        </Dialog>
     498
     499        <Dialog Id="VBoxWarnPythonDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
     500
     501            <!-- The wizard has a bitmap as background. The source is defined as a property below. -->
     502            <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
     503
     504            <!-- Title text drawn on the background -->
     505            <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
     506                <Text>{\DlgWarnPython}!(loc.WarnPythonDlg_Title)</Text>
     507            </Control>
     508
     509            <Control Id="Title2" Type="Text" X="135" Y="40" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
     510                <Text>{\DlgWarnPython}!(loc.WarnPythonDlg_Title2)</Text>
     511            </Control>
     512
     513            <!-- Text saying what we gonna do -->
     514            <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
     515                <Text>!(loc.WarnPythonDlg_Desc)</Text>
     516            </Control>
     517
     518            <Control Id="Description2" Type="Text" X="135" Y="115" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
     519                <Text>!(loc.WarnPythonDlg_Desc2)</Text>
     520            </Control>
     521
     522            <Control Id="Description3" Type="Text" X="135" Y="160" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
     523                <Text>!(loc.WarnPythonDlg_Question)</Text>
     524            </Control>
     525
     526            <!-- And a line for looking nice... -->
     527            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
     528
     529            <!-- Build number text drawn left bottom -->
     530            <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
     531                <Text>[Version_text] $(var.Property_Version)</Text>
     532            </Control>
     533
     534            <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Yes)">
     535<?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
     536                <Publish Event="NewDialog" Value="VBoxWarnDisconNetIfacesDlg"><![CDATA[(&VBoxNetworkFlt=3)]]></Publish>
     537                <Publish Event="NewDialog" Value="VBoxVerifyReadyDlg"><![CDATA[(&VBoxNetworkFlt<3)]]></Publish>
     538<?else ?>
     539                <Publish Event="NewDialog" Value="VBoxVerifyReadyDlg">1</Publish>
     540<?endif?>
    480541            </Control>
    481542
     
    10111072        <TextStyle Id="DlgInvalidSerial" FaceName="Verdana" Size="13" Bold="yes" Red="255" />
    10121073        <TextStyle Id="DlgWarnDisconNetIfaces" FaceName="Verdana" Size="13" Bold="yes" Red="255" />
     1074        <TextStyle Id="DlgWarnPython" FaceName="Verdana" Size="13" Bold="yes" />
    10131075
    10141076        <!-- The UIText table contains the localized versions of some of the strings used in the user interface.
     
    11761238            <Custom Action="ca_OriginalTargetDir" After="FileCost"><![CDATA[(NOT INSTALLDIR) AND (NOT EXISTINGINSTALLDIR)]]></Custom>
    11771239            <Custom Action="ca_DefaultTargetDir" After="FileCost"><![CDATA[NOT Installed AND (NOT INSTALLDIR) AND EXISTINGINSTALLDIR]]></Custom>
    1178 
     1240<?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
     1241            <Custom Action="ca_IsPythonInstalled" After="FileCost" />
     1242            <Custom Action="ca_ArePythonAPIDepsInstalled" After="ca_IsPythonInstalled" />
     1243<?endif?>
    11791244            <FindRelatedProducts Suppress="no">1</FindRelatedProducts>
    11801245
  • trunk/src/VBox/Installer/win/VBoxMergePythonCA.wxi

    r82970 r86782  
    1717         xmlns:difxapp="http://schemas.microsoft.com/wix/DifxAppExtension">
    1818
     19    <CustomAction Id="ca_IsPythonInstalled" BinaryKey="VBoxInstallHelper" DllEntry="IsPythonInstalled" Execute="immediate" Return="check" Impersonate="no"/>
     20    <CustomAction Id="ca_ArePythonAPIDepsInstalled" BinaryKey="VBoxInstallHelper" DllEntry="ArePythonAPIDepsInstalled" Execute="immediate" Return="check" Impersonate="no"/>
    1921    <CustomAction Id="ca_InstallPythonAPI" BinaryKey="VBoxInstallHelper" DllEntry="InstallPythonAPI" Execute="deferred" Return="check" Impersonate="no"/>
    2022    <CustomAction Id="ca_InstallPythonAPIArgs" Property="ca_InstallPythonAPI" Value="[msm_VBoxPythonFolder]" Execute="immediate"/>
  • trunk/src/VBox/Installer/win/VBoxMergePythonSeq.wxi

    r82970 r86782  
    1717         xmlns:difxapp="http://schemas.microsoft.com/wix/DifxAppExtension">
    1818
     19    <Custom Action="ca_IsPythonInstalled" Before="ca_ArePythonAPIDepsInstalled" >
     20        <![CDATA[1]]>
     21    </Custom>
     22    <Custom Action="ca_ArePythonAPIDepsInstalled" Before="LaunchConditions" >
     23        <![CDATA[1]]>
     24    </Custom>
     25
    1926    <Custom Action="ca_InstallPythonAPIArgs" Before="ca_InstallPythonAPI" >
    2027        <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
  • trunk/src/VBox/Installer/win/VirtualBox.wxs

    r84945 r86782  
    561561
    562562<?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
    563         <Feature Id="VBoxPython" Title="VirtualBox Python 2.x Support" Level="1"
     563        <Feature Id="VBoxPython" Title="VirtualBox Python Support" Level="1"
    564564                 Description="!(loc.VB_Python)"
    565565                 ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand"
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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