VirtualBox

Changeset 37289 in vbox for trunk


Ignore:
Timestamp:
Jun 1, 2011 11:59:23 AM (14 years ago)
Author:
vboxsync
Message:

Windows host installaer/VBoxNetCfg: Major overhaul for supporting Windows Installer XML 3.5, fixed VBoxInstallHelper logging, coding style, added missing installer icons.

Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Config.kmk

    r37287 r37289  
    16681668
    16691669# Windows install tools...
    1670 VBOX_PATH_WIX       ?= $(PATH_DEVTOOLS)/win.x86/wix/v2.0.5805.0
     1670VBOX_PATH_WIX       ?= $(PATH_DEVTOOLS)/win.x86/wix/v3.5.2519.0
    16711671VBOX_PATH_MSITRAN   ?= $(PATH_DEVTOOLS)/win.x86/sdk/200504/Bin/MsiTran.Exe
    16721672VBOX_PATH_MSIDB     ?= $(PATH_DEVTOOLS)/win.x86/sdk/200504/Bin/MsiDb.Exe
  • trunk/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp

    r36487 r37289  
    5050static VOID DoLogging(LPCSTR szString, ...);
    5151#define Log DoLogging
     52#define LogFlow(x) DoLogging x
    5253
    5354#define DbgLog
     
    5758
    5859static HRESULT vboxNetCfgWinINetCfgLock(IN INetCfg *pNetCfg,
    59                           IN LPCWSTR pszwClientDescription,
    60                           IN DWORD cmsTimeout,
    61                           OUT LPWSTR *ppszwClientDescription)
     60                                        IN LPCWSTR pszwClientDescription,
     61                                        IN DWORD cmsTimeout,
     62                                        OUT LPWSTR *ppszwClientDescription)
    6263{
    6364    INetCfgLock *pLock;
    6465    HRESULT hr = pNetCfg->QueryInterface(IID_INetCfgLock, (PVOID*)&pLock);
    65     Assert(hr == S_OK);
    66     if (hr != S_OK)
    67     {
    68         Log(__FUNCTION__ ": QueryInterface failed, hr (0x%x)\n", hr);
     66    if (FAILED(hr))
     67    {
     68        LogFlow(("QueryInterface failed, hr (0x%x)\n", hr));
    6969        return hr;
    7070    }
    7171
    7272    hr = pLock->AcquireWriteLock(cmsTimeout, pszwClientDescription, ppszwClientDescription);
    73     Assert(hr == S_OK || hr == S_FALSE);
    7473    if (hr == S_FALSE)
    7574    {
    76         Log(__FUNCTION__ ": write lock busy\n");
    77     }
    78     else if (hr != S_OK)
    79     {
    80         Log(__FUNCTION__ ": AcquireWriteLock failed hr (0x%x)\n", hr);
     75        LogFlow(("Write lock busy\n"));
     76    }
     77    else if (FAILED(hr))
     78    {
     79        LogFlow(("AcquireWriteLock failed, hr (0x%x)\n", hr));
    8180    }
    8281
     
    8988    INetCfgLock *pLock;
    9089    HRESULT hr = pNetCfg->QueryInterface(IID_INetCfgLock, (PVOID*)&pLock);
    91     Assert(hr == S_OK);
    92     if (hr != S_OK)
    93     {
    94         Log(__FUNCTION__ ": QueryInterface failed, hr (0x%x)\n", hr);
     90    if (FAILED(hr))
     91    {
     92        LogFlow(("QueryInterface failed, hr (0x%x)\n", hr));
    9593        return hr;
    9694    }
    9795
    9896    hr = pLock->ReleaseWriteLock();
    99     Assert(hr == S_OK);
    100     if (hr != S_OK)
    101     {
    102         Log(__FUNCTION__ ": ReleaseWriteLock failed hr (0x%x)\n", hr);
    103     }
     97    if (FAILED(hr))
     98        LogFlow(("ReleaseWriteLock failed, hr (0x%x)\n", hr));
    10499
    105100    pLock->Release();
     
    108103
    109104VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinQueryINetCfg(OUT INetCfg **ppNetCfg,
    110                           IN BOOL fGetWriteLock,
    111                           IN LPCWSTR pszwClientDescription,
    112                           IN DWORD cmsTimeout,
    113                           OUT LPWSTR *ppszwClientDescription)
     105                                                      IN BOOL fGetWriteLock,
     106                                                      IN LPCWSTR pszwClientDescription,
     107                                                      IN DWORD cmsTimeout,
     108                                                      OUT LPWSTR *ppszwClientDescription)
    114109{
    115110    INetCfg *pNetCfg;
    116111    HRESULT hr = CoCreateInstance(CLSID_CNetCfg, NULL, CLSCTX_INPROC_SERVER, IID_INetCfg, (PVOID*)&pNetCfg);
    117     Assert(hr == S_OK);
    118     if (hr != S_OK)
    119     {
    120         Log(__FUNCTION__ ": CoCreateInstance failed, hr (0x%x)\n", hr);
     112    if (FAILED(hr))
     113    {
     114        LogFlow(("CoCreateInstance failed, hr (0x%x)\n", hr));
    121115        return hr;
    122116    }
     
    125119    {
    126120        hr = vboxNetCfgWinINetCfgLock(pNetCfg, pszwClientDescription, cmsTimeout, ppszwClientDescription);
    127         Assert(hr == S_OK || hr == S_FALSE);
    128121        if (hr == S_FALSE)
    129122        {
    130             Log(__FUNCTION__ ": write lock is busy\n", hr);
     123            LogFlow(("Write lock is busy\n", hr));
    131124            hr = NETCFG_E_NO_WRITE_LOCK;
    132125        }
    133126    }
    134127
    135     if (hr == S_OK)
     128    if (SUCCEEDED(hr))
    136129    {
    137130        hr = pNetCfg->Initialize(NULL);
    138         Assert(hr == S_OK);
    139         if (hr == S_OK)
     131        if (SUCCEEDED(hr))
    140132        {
    141133            *ppNetCfg = pNetCfg;
     
    143135        }
    144136        else
    145         {
    146             Log(__FUNCTION__ ": Initialize failed, hr (0x%x)\n", hr);
    147         }
     137            LogFlow(("Initialize failed, hr (0x%x)\n", hr));
    148138    }
    149139
     
    155145{
    156146    HRESULT hr = pNetCfg->Uninitialize();
    157     Assert(hr == S_OK);
    158     if (hr != S_OK)
    159     {
    160         Log(__FUNCTION__ ": Uninitialize failed, hr (0x%x)\n", hr);
     147    if (FAILED(hr))
     148    {
     149        LogFlow(("Uninitialize failed, hr (0x%x)\n", hr));
    161150        return hr;
    162151    }
     
    165154    {
    166155        hr = vboxNetCfgWinINetCfgUnlock(pNetCfg);
    167         Assert(hr == S_OK);
    168         if (hr != S_OK)
    169         {
    170             Log(__FUNCTION__ ": vboxNetCfgWinINetCfgUnlock failed, hr (0x%x)\n", hr);
    171         }
     156        if (FAILED(hr))
     157            LogFlow(("vboxNetCfgWinINetCfgUnlock failed, hr (0x%x)\n", hr));
    172158    }
    173159
     
    176162}
    177163
    178 static HRESULT vboxNetCfgWinGetComponentByGuidEnum(IEnumNetCfgComponent *pEnumNcc, IN const GUID * pGuid, OUT INetCfgComponent ** ppNcc)
    179 {
    180     INetCfgComponent * pNcc;
    181     GUID NccGuid;
    182 
     164static HRESULT vboxNetCfgWinGetComponentByGuidEnum(IEnumNetCfgComponent *pEnumNcc,
     165                                                   IN const GUID *pGuid,
     166                                                   OUT INetCfgComponent **ppNcc)
     167{
    183168    HRESULT hr = pEnumNcc->Reset();
    184     Assert(hr == S_OK);
    185     if (hr != S_OK)
    186     {
    187         Log(__FUNCTION__": Reset failed, hr (0x%x)\n", hr);
     169    if (FAILED(hr))
     170    {
     171        LogFlow(("Reset failed, hr (0x%x)\n", hr));
    188172        return hr;
    189173    }
    190174
     175    INetCfgComponent *pNcc;
    191176    while ((hr = pEnumNcc->Next(1, &pNcc, NULL)) == S_OK)
    192177    {
    193178        ULONG uComponentStatus;
    194179        hr = pNcc->GetDeviceStatus(&uComponentStatus);
    195         if (hr == S_OK)
     180        if (SUCCEEDED(hr))
    196181        {
    197182            if (uComponentStatus == 0)
    198183            {
     184                GUID NccGuid;
    199185                hr = pNcc->GetInstanceGuid(&NccGuid);
    200                 Assert(hr == S_OK);
    201                 if (hr == S_OK)
     186
     187                if (SUCCEEDED(hr))
    202188                {
    203189                    if (NccGuid == *pGuid)
     
    209195                }
    210196                else
    211                 {
    212                     Log(__FUNCTION__": GetInstanceGuid failed, hr (0x%x)\n", hr);
    213                 }
     197                    LogFlow(("GetInstanceGuid failed, hr (0x%x)\n", hr));
    214198            }
    215199        }
     
    217201        pNcc->Release();
    218202    }
    219 
    220     Assert(hr == S_OK || hr == S_FALSE);
    221     return hr;
    222 }
    223 
    224 VBOXNETCFGWIN_DECL(HRESULT)
    225 VBoxNetCfgWinGetComponentByGuid(IN INetCfg *pNc,
    226                                 IN const GUID *pguidClass,
    227                                 IN const GUID * pComponentGuid,
    228                                 OUT INetCfgComponent **ppncc)
     203    return hr;
     204}
     205
     206VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinGetComponentByGuid(IN INetCfg *pNc,
     207                                                            IN const GUID *pguidClass,
     208                                                            IN const GUID * pComponentGuid,
     209                                                            OUT INetCfgComponent **ppncc)
    229210{
    230211    IEnumNetCfgComponent *pEnumNcc;
    231212    HRESULT hr = pNc->EnumComponents(pguidClass, &pEnumNcc);
    232     Assert(hr == S_OK);
    233     if (hr == S_OK)
     213
     214    if (SUCCEEDED(hr))
    234215    {
    235216        hr = vboxNetCfgWinGetComponentByGuidEnum(pEnumNcc, pComponentGuid, ppncc);
    236         Assert(hr == S_OK || hr == S_FALSE);
    237217        if (hr == S_FALSE)
    238218        {
    239             Log(__FUNCTION__": component not found \n");
    240         }
    241         else if (hr != S_OK)
    242         {
    243             Log(__FUNCTION__": vboxNetCfgWinGetComponentByGuidEnum failed, hr (0x%x)\n", hr);
     219            LogFlow(("Component not found\n"));
     220        }
     221        else if (FAILED(hr))
     222        {
     223            LogFlow(("vboxNetCfgWinGetComponentByGuidEnum failed, hr (0x%x)\n", hr));
    244224        }
    245225        pEnumNcc->Release();
    246226    }
    247227    else
    248     {
    249         Log(__FUNCTION__": EnumComponents failed, hr (0x%x)\n", hr);
    250     }
     228        LogFlow(("EnumComponents failed, hr (0x%x)\n", hr));
    251229    return hr;
    252230}
     
    255233{
    256234    HRESULT hr = pNetCfg->QueryNetCfgClass(pguidClass, IID_INetCfgClassSetup, (void**)ppSetup);
    257     Assert(hr == S_OK);
    258     if (hr != S_OK)
    259     {
    260         Log(__FUNCTION__ ": QueryNetCfgClass failed hr (0x%x)\n", hr);
    261     }
     235    if (FAILED(hr))
     236        LogFlow(("QueryNetCfgClass failed, hr (0x%x)\n", hr));
    262237    return hr;
    263238}
    264239
    265240VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinInstallComponent(IN INetCfg *pNetCfg, IN LPCWSTR pszwComponentId, IN const GUID *pguidClass,
    266         OUT INetCfgComponent **ppComponent)
     241                                                          OUT INetCfgComponent **ppComponent)
    267242{
    268243    INetCfgClassSetup *pSetup;
    269244    HRESULT hr = vboxNetCfgWinQueryInstaller(pNetCfg, pguidClass, &pSetup);
    270     Assert(hr == S_OK);
    271     if (hr != S_OK)
    272     {
    273         Log(__FUNCTION__ ": vboxNetCfgWinQueryInstaller failed hr (0x%x)\n", hr);
     245    if (FAILED(hr))
     246    {
     247        LogFlow(("vboxNetCfgWinQueryInstaller failed, hr (0x%x)\n", hr));
    274248        return hr;
    275249    }
    276250
    277251    OBO_TOKEN Token;
    278     memset(&Token, 0, sizeof (Token));
     252    ZeroMemory(&Token, sizeof (Token));
    279253    Token.Type = OBO_USER;
    280254
    281255    hr = pSetup->Install(pszwComponentId, &Token,
    282             0,    /* IN DWORD dwSetupFlags */
    283             0,    /* IN DWORD dwUpgradeFromBuildNo */
    284             NULL, /* IN LPCWSTR pszwAnswerFile */
    285             NULL, /* IN LPCWSTR pszwAnswerSections */
    286             ppComponent);
    287     Assert(hr == S_OK);
    288     if (hr == S_OK)
     256                         0,    /* IN DWORD dwSetupFlags */
     257                         0,    /* IN DWORD dwUpgradeFromBuildNo */
     258                         NULL, /* IN LPCWSTR pszwAnswerFile */
     259                         NULL, /* IN LPCWSTR pszwAnswerSections */
     260                         ppComponent);
     261    if (SUCCEEDED(hr))
    289262    {
    290263        /* ignore the apply failure */
     
    292265        Assert(tmpHr == S_OK);
    293266        if (tmpHr != S_OK)
    294         {
    295             Log(__FUNCTION__ ": Apply failed, hr (0x%x)\n", tmpHr);
    296         }
     267            LogFlow(("Apply failed, hr (0x%x)\n", tmpHr));
    297268    }
    298269    else
    299     {
    300         Log(__FUNCTION__ ": Install failed hr (0x%x)\n", hr);
    301     }
     270        LogFlow(("Install failed, hr (0x%x)\n", hr));
     271
    302272    pSetup->Release();
    303273    return hr;
     
    305275
    306276VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinInstallInfAndComponent(IN INetCfg *pNetCfg, IN LPCWSTR pszwComponentId, IN const GUID *pguidClass,
    307         IN LPCWSTR * apInfPaths, IN UINT cInfPaths,
    308         OUT INetCfgComponent **ppComponent)
     277                                                                IN LPCWSTR * apInfPaths, IN UINT cInfPaths,
     278                                                                OUT INetCfgComponent **ppComponent)
    309279{
    310280    HRESULT hr = S_OK;
    311281    UINT i = 0;
    312282
     283    LogFlow(("Installing %u INF files ...\n", cInfPaths));
     284
    313285    for (; i < cInfPaths; i++)
    314286    {
     287        LogFlow(("Installing INF file \"%ws\" ...\n", apInfPaths[i]));
    315288        hr = VBoxDrvCfgInfInstall(apInfPaths[i]);
    316         Assert(hr == S_OK);
    317         if (hr != S_OK)
    318         {
    319             Log(__FUNCTION__ ": VBoxNetCfgWinInfInstall failed hr (0x%x)\n", hr);
     289        if (FAILED(hr))
     290        {
     291            LogFlow(("VBoxNetCfgWinInfInstall failed, hr (0x%x)\n", hr));
    320292            break;
    321293        }
    322294    }
    323295
    324     if (hr == S_OK)
     296    if (SUCCEEDED(hr))
    325297    {
    326298        hr = VBoxNetCfgWinInstallComponent(pNetCfg, pszwComponentId, pguidClass, ppComponent);
    327         Assert(hr == S_OK);
    328         if (hr != S_OK)
    329         {
    330             Log(__FUNCTION__ ": VBoxNetCfgWinInstallComponent failed hr (0x%x)\n", hr);
    331         }
    332     }
    333 
    334     if (hr != S_OK)
    335     {
    336         for (UINT j = i-1; j != 0; j--)
    337         {
     299        if (FAILED(hr))
     300            LogFlow(("VBoxNetCfgWinInstallComponent failed, hr (0x%x)\n", hr));
     301    }
     302
     303    if (FAILED(hr))
     304    {
     305        for (UINT j = i - 1; j != 0; j--)
    338306            VBoxDrvCfgInfUninstall(apInfPaths[j], 0);
    339         }
    340307    }
    341308
     
    347314    GUID GuidClass;
    348315    HRESULT hr = pComponent->GetClassGuid(&GuidClass);
    349     Assert(hr == S_OK);
    350     if (hr != S_OK)
    351     {
    352         Log(__FUNCTION__ ": GetClassGuid failed hr (0x%x)\n", hr);
     316    if (FAILED(hr))
     317    {
     318        LogFlow(("GetClassGuid failed, hr (0x%x)\n", hr));
    353319        return hr;
    354320    }
    355321
    356     INetCfgClassSetup *pSetup;
     322    INetCfgClassSetup *pSetup = NULL;
    357323    hr = vboxNetCfgWinQueryInstaller(pNetCfg, &GuidClass, &pSetup);
    358     Assert(hr == S_OK);
    359     if (hr != S_OK)
    360     {
    361         Log(__FUNCTION__ ": vboxNetCfgWinQueryInstaller failed hr (0x%x)\n", hr);
     324    if (FAILED(hr))
     325    {
     326        LogFlow(("vboxNetCfgWinQueryInstaller failed, hr (0x%x)\n", hr));
    362327        return hr;
    363328    }
    364329
    365330    OBO_TOKEN Token;
    366     memset(&Token, 0, sizeof (Token));
     331    ZeroMemory(&Token, sizeof(Token));
    367332    Token.Type = OBO_USER;
    368333
    369334    hr = pSetup->DeInstall(pComponent, &Token, NULL /* OUT LPWSTR *pmszwRefs */);
    370     Assert(hr == S_OK);
    371     if (hr == S_OK)
    372     {
    373         HRESULT tmpHr = pNetCfg->Apply();
    374         Assert(tmpHr == S_OK);
    375         if (tmpHr != S_OK)
    376         {
    377             Log(__FUNCTION__ ": Apply failed, hr (0x%x)\n", tmpHr);
    378         }
     335    if (SUCCEEDED(hr))
     336    {
     337        hr = pNetCfg->Apply();
     338        if (FAILED(hr))
     339            LogFlow(("Apply failed, hr (0x%x)\n", hr));
    379340    }
    380341    else
    381     {
    382         Log(__FUNCTION__ ": DeInstall failed hr (0x%x)\n", hr);
    383     }
    384     pSetup->Release();
    385     return hr;
    386 }
    387 
    388 typedef BOOL (*VBOXNETCFGWIN_NETCFGENUM_CALLBACK) (IN INetCfg *pNc, IN INetCfgComponent *pNcc, PVOID pContext);
    389 
    390 static HRESULT vboxNetCfgWinEnumNetCfgComponents(IN INetCfg *pNc,
    391         IN const GUID *pguidClass,
    392         VBOXNETCFGWIN_NETCFGENUM_CALLBACK callback,
    393         PVOID pContext)
     342        LogFlow(("DeInstall failed, hr (0x%x)\n", hr));
     343
     344    if (pSetup)
     345        pSetup->Release();
     346    return hr;
     347}
     348
     349typedef BOOL (*VBOXNETCFGWIN_NETCFGENUM_CALLBACK) (IN INetCfg *pNetCfg, IN INetCfgComponent *pNetCfgComponent, PVOID pContext);
     350
     351static HRESULT vboxNetCfgWinEnumNetCfgComponents(IN INetCfg *pNetCfg,
     352                                                 IN const GUID *pguidClass,
     353                                                 VBOXNETCFGWIN_NETCFGENUM_CALLBACK callback,
     354                                                 PVOID pContext)
    394355{
    395356    IEnumNetCfgComponent *pEnumComponent;
    396     HRESULT hr = pNc->EnumComponents(pguidClass, &pEnumComponent);
    397     bool bBreak = false;
    398     Assert(hr == S_OK);
    399     if (hr == S_OK)
    400     {
    401         INetCfgComponent *pNcc;
     357    HRESULT hr = pNetCfg->EnumComponents(pguidClass, &pEnumComponent);
     358    if (SUCCEEDED(hr))
     359    {
     360        INetCfgComponent *pNetCfgComponent;
    402361        hr = pEnumComponent->Reset();
    403         Assert(hr == S_OK);
    404362        do
    405363        {
    406             hr = pEnumComponent->Next(1, &pNcc, NULL);
    407             Assert(hr == S_OK || hr == S_FALSE);
    408             if (hr == S_OK)
     364            hr = pEnumComponent->Next(1, &pNetCfgComponent, NULL);
     365            if (SUCCEEDED(hr))
    409366            {
    410367//                ULONG uComponentStatus;
    411368//                hr = pNcc->GetDeviceStatus(&uComponentStatus);
    412 //                if (hr == S_OK)
    413                 {
    414                     if (!callback(pNc, pNcc, pContext))
    415                     {
    416                         bBreak = true;
    417                     }
    418                 }
    419                 pNcc->Release();
     369//                if (SUCCEEDED(hr))
     370                BOOL fResult = FALSE;
     371                if (pNetCfgComponent)
     372                {
     373                    if (pContext)
     374                        fResult = callback(pNetCfg, pNetCfgComponent, pContext);
     375                    pNetCfgComponent->Release();
     376                }
     377
     378                if (!fResult)
     379                    break;
    420380            }
    421381            else
    422382            {
    423                 if (hr ==S_FALSE)
     383                if (hr == S_FALSE)
    424384                {
    425385                    hr = S_OK;
    426386                }
    427387                else
    428                 {
    429                     Log(__FUNCTION__": Next failed, hr (0x%x)\n", hr);
    430                 }
     388                    LogFlow(("Next failed, hr (0x%x)\n", hr));
    431389                break;
    432390            }
    433         } while (!bBreak);
    434 
     391        } while (true);
    435392        pEnumComponent->Release();
    436393    }
     
    440397static BOOL vboxNetCfgWinRemoveAllNetDevicesOfIdCallback(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pDev, PVOID pContext)
    441398{
    442     DWORD winEr;
    443399    HRESULT hr = S_OK;
    444400    SP_REMOVEDEVICE_PARAMS rmdParams;
     401
    445402    rmdParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
    446403    rmdParams.ClassInstallHeader.InstallFunction = DIF_REMOVE;
    447404    rmdParams.Scope = DI_REMOVEDEVICE_GLOBAL;
    448405    rmdParams.HwProfile = 0;
     406
    449407    if (SetupDiSetClassInstallParams(hDevInfo,pDev,&rmdParams.ClassInstallHeader,sizeof(rmdParams)))
    450408    {
     
    460418                    {
    461419                        hr = S_FALSE;
    462                         Log(__FUNCTION__": !!!REBOOT REQUIRED!!!\n");
     420                        Log(("!!!REBOOT REQUIRED!!!\n"));
    463421                    }
    464422                }
     
    466424            else
    467425            {
    468                 winEr = GetLastError();
    469                 Log(__FUNCTION__": SetupDiCallClassInstaller failed winErr(%d)\n", winEr);
    470                 hr = HRESULT_FROM_WIN32(winEr);
     426                DWORD dwErr = GetLastError();
     427                LogFlow(("SetupDiCallClassInstaller failed with %ld\n", dwErr));
     428                hr = HRESULT_FROM_WIN32(dwErr);
    471429            }
    472430        }
    473431        else
    474432        {
    475             winEr = GetLastError();
    476             Log(__FUNCTION__": SetupDiSetSelectedDevice failed winErr(%d)\n", winEr);
    477             hr = HRESULT_FROM_WIN32(winEr);
     433            DWORD dwErr = GetLastError();
     434            LogFlow(("SetupDiSetSelectedDevice failed with %ld\n", dwErr));
     435            hr = HRESULT_FROM_WIN32(dwErr);
    478436        }
    479437    }
    480438    else
    481439    {
    482         winEr = GetLastError();
    483         Log(__FUNCTION__": SetupDiSetClassInstallParams failed winErr(%d)\n", winEr);
    484         hr = HRESULT_FROM_WIN32(winEr);
     440        DWORD dwErr = GetLastError();
     441        LogFlow(("SetupDiSetClassInstallParams failed with %ld\n", dwErr));
     442        hr = HRESULT_FROM_WIN32(dwErr);
    485443    }
    486444
     
    528486                if (winEr != ERROR_INSUFFICIENT_BUFFER)
    529487                {
    530                     Log(__FUNCTION__": SetupDiGetDeviceRegistryPropertyW (1) failed winErr(%d)\n", winEr);
     488                    LogFlow(("SetupDiGetDeviceRegistryPropertyW (1) failed winErr(%d)\n", winEr));
    531489                    hr = HRESULT_FROM_WIN32(winEr);
    532490                    break;
     
    534492
    535493                if (pBuffer)
    536                 {
    537494                    free(pBuffer);
    538                 }
    539495
    540496                pBuffer = (PBYTE)malloc(cbRequired);
     
    542498
    543499                if (!SetupDiGetDeviceRegistryPropertyW(hDevInfo,&Dev,
    544                           SPDRP_HARDWAREID, /* IN DWORD Property,*/
    545                           NULL, /*OUT PDWORD PropertyRegDataType, OPTIONAL*/
    546                           pBuffer, /*OUT PBYTE PropertyBuffer,*/
    547                           cbBuffer, /* IN DWORD PropertyBufferSize,*/
    548                           &cbRequired /*OUT PDWORD RequiredSize OPTIONAL*/
    549                         ))
     500                                                       SPDRP_HARDWAREID, /* IN DWORD Property,*/
     501                                                       NULL, /*OUT PDWORD PropertyRegDataType, OPTIONAL*/
     502                                                       pBuffer, /*OUT PBYTE PropertyBuffer,*/
     503                                                       cbBuffer, /* IN DWORD PropertyBufferSize,*/
     504                                                       &cbRequired /*OUT PDWORD RequiredSize OPTIONAL*/
     505                                                       ))
    550506                {
    551507                    winEr = GetLastError();
    552                     Log(__FUNCTION__": SetupDiGetDeviceRegistryPropertyW (2) failed winErr(%d)\n", winEr);
     508                    LogFlow(("SetupDiGetDeviceRegistryPropertyW (2) failed winErr(%d)\n", winEr));
    553509                    hr = HRESULT_FROM_WIN32(winEr);
    554510                    break;
     
    585541    {
    586542        DWORD winEr = GetLastError();
    587         Log(__FUNCTION__": SetupDiGetClassDevsExW failed winErr(%d)\n", winEr);
     543        LogFlow(("SetupDiGetClassDevsExW failed winErr(%d)\n", winEr));
    588544        hr = HRESULT_FROM_WIN32(winEr);
    589545    }
     
    868824        }
    869825        else
    870         {
    871             Log(__FUNCTION__": ExecQuery fail hr (0x%x)\n", hr);
    872         }
     826            LogFlow(("ExecQuery failed (0x%x)\n", hr));
    873827    }
    874828    else
    875829    {
    876830        DWORD winEr = GetLastError();
    877         Log(__FUNCTION__": StringFromGUID2 fail winEr (%d)\n", winEr);
     831        LogFlow(("StringFromGUID2 failed winEr (%d)\n", winEr));
    878832        hr = HRESULT_FROM_WIN32( winEr );
    879833    }
     
    1002956                        {
    1003957                            if (!wcsicmp(pCurMask, pMask))
    1004                             {
    1005958                                *pFound = true;
    1006                             }
    1007959                            break;
    1008960                        }
     
    10761028            }
    10771029            else
    1078             {
    1079                 Log(__FUNCTION__": CoSetProxyBlanket failed hr (0x%x)\n", hr);
    1080             }
     1030                LogFlow(("CoSetProxyBlanket failed, hr (0x%x)\n", hr));
    10811031
    10821032            pSvc->Release();
    10831033        }
    10841034        else
    1085         {
    1086             Log(__FUNCTION__": ConnectServer failed hr (0x%x)\n", hr);
    1087         }
    1088 
     1035            LogFlow(("ConnectServer failed, hr (0x%x)\n", hr));
    10891036        pLoc->Release();
    10901037    }
    10911038    else
    1092     {
    1093         Log(__FUNCTION__": CoCreateInstance failed hr (0x%x)\n", hr);
    1094     }
    1095 
     1039        LogFlow(("CoCreateInstance failed, hr (0x%x)\n", hr));
    10961040    return hr;
    10971041}
     
    11081052    }
    11091053    else
    1110     {
    1111         DWORD winEr = GetLastError();
    1112         Log(__FUNCTION__": Get failed winEr (%d)\n", winEr);
    1113         Assert(0);
    1114         hr = HRESULT_FROM_WIN32(winEr);
    1115     }
     1054        LogFlow(("Get failed, hr (0x%x)\n", hr));
    11161055    return hr;
    11171056}
     
    11391078                        pArgs[i], 0);
    11401079                    if (FAILED(hr))
    1141                     {
    11421080                        break;
    1143                     }
    11441081                }
    11451082            }
     
    11871124    }
    11881125    else
    1189     {
    1190         DWORD dwError = GetLastError();
    1191         Assert(0);
    1192         hr = HRESULT_FROM_WIN32( dwError );
    1193     }
     1126        hr = HRESULT_FROM_WIN32(GetLastError());
    11941127
    11951128    return hr;
     
    12181151    }
    12191152    else
    1220     {
    1221         DWORD dwError = GetLastError();
    1222         Assert(0);
    1223         hr = HRESULT_FROM_WIN32( dwError );
    1224     }
     1153        hr = HRESULT_FROM_WIN32(GetLastError());
    12251154
    12261155    return hr;
     
    13001229    }
    13011230    else
    1302     {
    1303         DWORD winEr = GetLastError();
    1304         Assert(0);
    1305         hr = HRESULT_FROM_WIN32(winEr);
    1306     }
     1231        hr = HRESULT_FROM_WIN32(GetLastError());
    13071232
    13081233    return hr;
     
    13811306                    }
    13821307                }
    1383             }        }
     1308            }
     1309        }
    13841310        SysFreeString(ClassName);
    13851311    }
    13861312    else
    1387     {
    1388         DWORD dwError = GetLastError();
    1389         Assert(0);
    1390         hr = HRESULT_FROM_WIN32( dwError );
    1391     }
     1313        hr = HRESULT_FROM_WIN32(GetLastError());
    13921314
    13931315    return hr;
     
    14581380    }
    14591381    else
    1460     {
    1461         DWORD dwError = GetLastError();
    1462         Assert(0);
    1463         hr = HRESULT_FROM_WIN32( dwError );
    1464     }
     1382        hr = HRESULT_FROM_WIN32(GetLastError());
    14651383
    14661384    return hr;
     
    15021420                                int winEr = varReturnValue.uintVal;
    15031421                                if (winEr == 0)
    1504                                 {
    15051422                                    hr = S_OK;
    1506                                 }
    15071423                                else
    1508                                 {
    15091424                                    hr = HRESULT_FROM_WIN32( winEr );
    1510                                 }
    15111425                            }
    15121426                        }
    15131427                    }
    15141428                    else
    1515                     {
    15161429                        hr = HRESULT_FROM_WIN32( winEr );
    1517                     }
    15181430                }
    15191431            }
     
    15221434    }
    15231435    else
    1524     {
    1525         DWORD dwError = GetLastError();
    1526         Assert(0);
    1527         hr = HRESULT_FROM_WIN32(dwError);
    1528     }
     1436        hr = HRESULT_FROM_WIN32(GetLastError());
    15291437
    15301438    return hr;
     
    15361444    HRESULT hr = pAdapterConfig->Get(L"DHCPEnabled", 0, &vtEnabled, 0, 0);
    15371445    if (SUCCEEDED(hr))
    1538     {
    15391446        *pEnabled = vtEnabled.boolVal;
    1540     }
    15411447    return hr;
    15421448}
     
    15511457        ComPtr <IWbemClassObject> pAdapterConfig;
    15521458        hr = netIfWinFindAdapterClassById(pSvc, pGuid, pAdapterConfig.asOutParam());
    1553         if (hr == S_OK)
     1459        if (SUCCEEDED(hr))
    15541460        {
    15551461            hr = vboxNetCfgWinIsDhcpEnabled(pAdapterConfig, &pSettings->bDhcp);
    15561462            if (SUCCEEDED(hr))
    1557             {
    15581463                hr = netIfWinGetIpSettings(pAdapterConfig, &pSettings->ip, &pSettings->mask);
    1559             }
    15601464        }
    15611465    }
     
    15731477            ComPtr <IWbemClassObject> pAdapterConfig;
    15741478            hr = netIfWinFindAdapterClassById(pSvc, pGuid, pAdapterConfig.asOutParam());
    1575             if (hr == S_OK)
     1479            if (SUCCEEDED(hr))
    15761480            {
    15771481                VARIANT vtEnabled;
    15781482                hr = pAdapterConfig->Get(L"DHCPEnabled", 0, &vtEnabled, 0, 0);
    15791483                if (SUCCEEDED(hr))
    1580                 {
    15811484                    *pEnabled = vtEnabled.boolVal;
    1582                 }
    15831485            }
    15841486        }
     
    15961498            ComPtr <IWbemClassObject> pAdapterConfig;
    15971499            hr = netIfWinFindAdapterClassById(pSvc, pGuid, pAdapterConfig.asOutParam());
    1598             if (hr == S_OK)
     1500            if (SUCCEEDED(hr))
    15991501            {
    16001502                BOOL bIsHostOnly;
     
    16491551            ComPtr <IWbemClassObject> pAdapterConfig;
    16501552            hr = netIfWinFindAdapterClassById(pSvc, pGuid, pAdapterConfig.asOutParam());
    1651             if (hr == S_OK)
     1553            if (SUCCEEDED(hr))
    16521554            {
    16531555                BSTR ObjPath;
     
    16971599            ComPtr <IWbemClassObject> pAdapterConfig;
    16981600            hr = netIfWinFindAdapterClassById(pSvc, pGuid, pAdapterConfig.asOutParam());
    1699             if (hr == S_OK)
     1601            if (SUCCEEDED(hr))
    17001602            {
    17011603                BOOL bIsHostOnly;
     
    17381640            ComPtr <IWbemClassObject> pAdapterConfig;
    17391641            hr = netIfWinFindAdapterClassById(pSvc, pGuid, pAdapterConfig.asOutParam());
    1740             if (hr == S_OK)
     1642            if (SUCCEEDED(hr))
    17411643            {
    17421644                BOOL bIsHostOnly;
     
    19021804    }
    19031805    else
    1904     {
    1905         Log(__FUNCTION__": GetAdaptersAddresses err (%d)\n", dwRc);
    1906     }
    1907     free(pAddresses);
     1806        LogFlow(("GetAdaptersAddresses err (%d)\n", dwRc));
     1807
     1808    if (pAddresses)
     1809        free(pAddresses);
    19081810
    19091811    if (dwRc != NO_ERROR)
     
    19271829    if (hr == S_OK)
    19281830    {
    1929         Log("NetFlt Is Installed currently\n");
     1831        Log("NetFlt is installed currently, uninstalling ...\n");
    19301832
    19311833        hr = VBoxNetCfgWinUninstallComponent(pNc, pNcc);
     
    19351837    else if (hr == S_FALSE)
    19361838    {
    1937         Log("NetFlt Is Not Installed currently\n");
     1839        Log("NetFlt is not installed currently\n");
    19381840        hr = S_OK;
    19391841    }
    19401842    else
    19411843    {
    1942         Log("vboxNetCfgWinNetFltUninstall: FindComponent for NetFlt failed, hr (0x%x)\n", hr);
     1844        LogFlow(("FindComponent failed, hr (0x%x)\n", hr));
    19431845        hr = S_OK;
    19441846    }
     
    19501852}
    19511853
    1952 VBOXNETCFGWIN_DECL(HRESULT)
    1953 VBoxNetCfgWinNetFltUninstall(IN INetCfg *pNc)
     1854VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinNetFltUninstall(IN INetCfg *pNc)
    19541855{
    19551856    return vboxNetCfgWinNetFltUninstall(pNc, 0);
    19561857}
    19571858
    1958 VBOXNETCFGWIN_DECL(HRESULT)
    1959 VBoxNetCfgWinNetFltInstall(IN INetCfg *pNc, IN LPCWSTR * apInfFullPaths, IN UINT cInfFullPaths)
     1859VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinNetFltInstall(IN INetCfg *pNc,
     1860                                                      IN LPCWSTR * apInfFullPaths, IN UINT cInfFullPaths)
    19601861{
    19611862    HRESULT hr = vboxNetCfgWinNetFltUninstall(pNc, SUOI_FORCEDELETE);
    1962 
    1963     hr = VBoxNetCfgWinInstallInfAndComponent(pNc, VBOXNETCFGWIN_NETFLT_ID,
    1964                                      &GUID_DEVCLASS_NETSERVICE,
    1965                                      apInfFullPaths,
    1966                                      cInfFullPaths,
    1967                                      NULL);
    1968 
     1863    if (SUCCEEDED(hr))
     1864    {
     1865        Log("NetFlt will be installed ...\n");
     1866        hr = VBoxNetCfgWinInstallInfAndComponent(pNc, VBOXNETCFGWIN_NETFLT_ID,
     1867                                                 &GUID_DEVCLASS_NETSERVICE,
     1868                                                 apInfFullPaths,
     1869                                                 cInfFullPaths,
     1870                                                 NULL);
     1871    }
    19691872    return hr;
    19701873}
    19711874
    19721875#define VBOX_CONNECTION_NAME L"VirtualBox Host-Only Network"
    1973 VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinGenHostonlyConnectionName (PCWSTR DevName, WCHAR *pBuf, PULONG pcbBuf)
     1876VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinGenHostonlyConnectionName(PCWSTR DevName, WCHAR *pBuf, PULONG pcbBuf)
    19741877{
    19751878    const WCHAR * pSuffix = wcsrchr( DevName, L'#' );
     
    19991902}
    20001903
    2001 static BOOL vboxNetCfgWinAdjustHostOnlyNetworkInterfacePriority (IN INetCfg *pNc, IN INetCfgComponent *pNcc, PVOID pContext)
    2002 {
    2003     INetCfgComponentBindings *pNccb = NULL;
    2004     IEnumNetCfgBindingPath  *pEnumNccbp;
     1904static BOOL vboxNetCfgWinAdjustHostOnlyNetworkInterfacePriority(IN INetCfg *pNc, IN INetCfgComponent *pNcc, PVOID pContext)
     1905{
     1906    INetCfgComponentBindings *pNetCfgBindings;
    20051907    GUID *pGuid = (GUID*)pContext;
    2006     HRESULT hr;
    2007     bool bFound = false;
    20081908
    20091909    /* Get component's binding. */
    2010     hr = pNcc->QueryInterface(IID_INetCfgComponentBindings, (PVOID*)&pNccb);
    2011     Assert(hr == S_OK);
    2012     if ( hr == S_OK )
     1910    HRESULT hr = pNcc->QueryInterface(IID_INetCfgComponentBindings, (PVOID*)&pNetCfgBindings);
     1911    if (SUCCEEDED(hr))
    20131912    {
    20141913        /* Get binding path enumerator reference. */
    2015         hr = pNccb->EnumBindingPaths(EBP_BELOW, &pEnumNccbp);
    2016         Assert(hr == S_OK);
    2017         if (hr == S_OK)
    2018         {
    2019             INetCfgBindingPath *pNccbp;
    2020             hr = pEnumNccbp->Reset();
    2021             Assert(hr == S_OK);
     1914        IEnumNetCfgBindingPath *pEnumNetCfgBindPath;
     1915        hr = pNetCfgBindings->EnumBindingPaths(EBP_BELOW, &pEnumNetCfgBindPath);
     1916        if (SUCCEEDED(hr))
     1917        {
     1918            bool bFoundIface = false;
     1919            hr = pEnumNetCfgBindPath->Reset();
    20221920            do
    20231921            {
    2024                 hr = pEnumNccbp->Next(1, &pNccbp, NULL);
    2025                 Assert(hr == S_OK || hr == S_FALSE);
     1922                INetCfgBindingPath *pNetCfgBindPath;
     1923                hr = pEnumNetCfgBindPath->Next(1, &pNetCfgBindPath, NULL);
    20261924                if (hr == S_OK)
    20271925                {
    2028 //                   if (pNccbp->IsEnabled() == S_OK)
     1926                    IEnumNetCfgBindingInterface *pEnumNetCfgBindIface;
     1927                    hr = pNetCfgBindPath->EnumBindingInterfaces(&pEnumNetCfgBindIface);
     1928                    if (hr == S_OK)
    20291929                    {
    2030                         IEnumNetCfgBindingInterface *pEnumNcbi;
    2031                         hr = pNccbp->EnumBindingInterfaces(&pEnumNcbi);
    2032                         Assert(hr == S_OK);
    2033                         if (hr == S_OK)
     1930                        pEnumNetCfgBindIface->Reset();
     1931                        do
    20341932                        {
    2035                             INetCfgBindingInterface *pNcbi;
    2036                             hr = pEnumNcbi->Reset();
    2037                             Assert(hr == S_OK);
    2038                             do
     1933                            INetCfgBindingInterface *pNetCfgBindIfce;
     1934                            hr = pEnumNetCfgBindIface->Next(1, &pNetCfgBindIfce, NULL);
     1935                            if (hr == S_OK)
    20391936                            {
    2040                                 hr = pEnumNcbi->Next(1, &pNcbi, NULL);
    2041                                 Assert(hr == S_OK || hr == S_FALSE);
     1937                                INetCfgComponent *pNetCfgCompo;
     1938                                hr = pNetCfgBindIfce->GetLowerComponent(&pNetCfgCompo);
    20421939                                if (hr == S_OK)
    20431940                                {
    2044                                     INetCfgComponent * pNccBoud;
    2045                                     hr = pNcbi->GetLowerComponent(&pNccBoud);
    2046                                     Assert(hr == S_OK);
     1941                                    ULONG uComponentStatus;
     1942                                    hr = pNetCfgCompo->GetDeviceStatus(&uComponentStatus);
    20471943                                    if (hr == S_OK)
    20481944                                    {
    2049                                         ULONG uComponentStatus;
    2050                                         hr = pNccBoud->GetDeviceStatus(&uComponentStatus);
    2051                                         if (hr == S_OK)
     1945                                        GUID guid;
     1946                                        hr = pNetCfgCompo->GetInstanceGuid(&guid);
     1947                                        if (   hr == S_OK
     1948                                            && guid == *pGuid)
    20521949                                        {
    2053 //                                            if (uComponentStatus == 0)
    2054                                             {
    2055                                                 GUID guid;
    2056                                                 hr = pNccBoud->GetInstanceGuid(&guid);
    2057                                                 if (guid == *pGuid)
    2058                                                 {
    2059                                                     hr = pNccb->MoveAfter(pNccbp, NULL);
    2060                                                     Assert(hr == S_OK);
    2061                                                     bFound = true;
    2062                                                 }
    2063                                             }
     1950                                            hr = pNetCfgBindings->MoveAfter(pNetCfgBindPath, NULL);
     1951                                            if (FAILED(hr))
     1952                                                LogFlow(("Unable to move interface, hr (0x%x)\n", hr));
     1953                                            bFoundIface = true;
    20641954                                        }
    2065                                         pNccBoud->Release();
    20661955                                    }
    2067                                     pNcbi->Release();
     1956                                    pNetCfgCompo->Release();
    20681957                                }
    20691958                                else
    2070                                 {
    2071                                     if (hr == S_FALSE)
    2072                                     {
    2073                                         hr = S_OK;
    2074                                     }
    2075                                     else
    2076                                     {
    2077                                         Log(__FUNCTION__": Next failed, hr (0x%x)\n", hr);
    2078                                     }
    2079                                     break;
    2080                                 }
    2081                             } while (!bFound);
    2082                             pEnumNcbi->Release();
    2083                         }
    2084                         else
    2085                         {
    2086                             Log(__FUNCTION__": EnumBindingInterfaces failed, hr (0x%x)\n", hr);
    2087                         }
    2088                     }
    2089 
    2090                     pNccbp->Release();
    2091                 }
    2092                 else
    2093                 {
    2094                     if (hr = S_FALSE)
    2095                     {
    2096                         hr = S_OK;
     1959                                    LogFlow(("GetLowerComponent failed, hr (0x%x)\n", hr));
     1960                                pNetCfgBindIfce->Release();
     1961                            }
     1962                            else
     1963                            {
     1964                                if (hr == S_FALSE) /* No more binding interfaces? */
     1965                                    hr = S_OK;
     1966                                else
     1967                                    LogFlow(("Next binding interface failed, hr (0x%x)\n", hr));
     1968                                break;
     1969                            }
     1970                        } while (!bFoundIface);
     1971                        pEnumNetCfgBindIface->Release();
    20971972                    }
    20981973                    else
    2099                     {
    2100                         Log(__FUNCTION__": Next failed, hr (0x%x)\n", hr);
    2101                     }
     1974                        LogFlow(("EnumBindingInterfaces failed, hr (0x%x)\n", hr));
     1975                    pNetCfgBindPath->Release();
     1976                }
     1977                else
     1978                {
     1979                    if (hr = S_FALSE) /* No more binding paths? */
     1980                        hr = S_OK;
     1981                    else
     1982                        LogFlow(("Next bind path failed, hr (0x%x)\n", hr));
    21021983                    break;
    21031984                }
    2104             } while (!bFound);
    2105 
    2106             pEnumNccbp->Release();
     1985            } while (!bFoundIface);
     1986            pEnumNetCfgBindPath->Release();
    21071987        }
    21081988        else
    2109         {
    2110             Log(__FUNCTION__": EnumBindingPaths failed, hr (0x%x)\n", hr);
    2111         }
    2112 
    2113         pNccb->Release();
     1989            LogFlow(("EnumBindingPaths failed, hr (0x%x)\n", hr));
     1990        pNetCfgBindings->Release();
    21141991    }
    21151992    else
    2116     {
    2117         Log(__FUNCTION__": QueryInterface for IID_INetCfgComponentBindings failed, hr (0x%x)\n", hr);
    2118     }
    2119 
    2120     return true;
     1993        LogFlow(("QueryInterface for IID_INetCfgComponentBindings failed, hr (0x%x)\n", hr));
     1994    return TRUE;
    21211995}
    21221996
     
    22572131        hrc = E_FAIL; \
    22582132        Log strAndArgs; \
    2259         Assert(0); \
    22602133        break; \
    22612134    } else do {} while (0)
    22622135
    2263 
    2264 VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinRemoveHostOnlyNetworkInterface (IN const GUID *pGUID, OUT BSTR *pErrMsg)
     2136VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinRemoveHostOnlyNetworkInterface(IN const GUID *pGUID, OUT BSTR *pErrMsg)
    22652137{
    22662138    HRESULT hrc = S_OK;
     
    24672339}
    24682340
    2469 VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinCreateHostOnlyNetworkInterface (IN LPCWSTR pInfPath, IN bool bIsInfPathFile,
    2470         OUT GUID *pGuid, OUT BSTR *lppszName, OUT BSTR *pErrMsg)
     2341VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinCreateHostOnlyNetworkInterface(IN LPCWSTR pInfPath, IN bool bIsInfPathFile,
     2342                                                                        OUT GUID *pGuid, OUT BSTR *lppszName, OUT BSTR *pErrMsg)
    24712343{
    24722344    HRESULT hrc = S_OK;
     
    24842356    do
    24852357    {
    2486         BOOL ok;
    24872358        GUID netGuid;
    24882359        SP_DRVINFO_DATA DriverInfoData;
     
    25082379
    25092380        /* create an empty device info set associated with the net class GUID */
    2510         hDeviceInfo = SetupDiCreateDeviceInfoList (&netGuid, NULL);
     2381        hDeviceInfo = SetupDiCreateDeviceInfoList(&netGuid, NULL);
    25112382        if (hDeviceInfo == INVALID_HANDLE_VALUE)
    25122383            SetErrBreak (("SetupDiCreateDeviceInfoList failed (0x%08X)",
     
    25142385
    25152386        /* get the class name from GUID */
    2516         ok = SetupDiClassNameFromGuid (&netGuid, className, MAX_PATH, NULL);
    2517         if (!ok)
     2387        BOOL fResult = SetupDiClassNameFromGuid (&netGuid, className, MAX_PATH, NULL);
     2388        if (!fResult)
    25182389            SetErrBreak (("SetupDiClassNameFromGuid failed (0x%08X)",
    25192390                          GetLastError()));
     
    25212392        /* create a device info element and add the new device instance
    25222393         * key to registry */
    2523         ok = SetupDiCreateDeviceInfo (hDeviceInfo, className, &netGuid, NULL, NULL,
     2394        fResult = SetupDiCreateDeviceInfo (hDeviceInfo, className, &netGuid, NULL, NULL,
    25242395                                     DICD_GENERATE_ID, &DeviceInfoData);
    2525         if (!ok)
     2396        if (!fResult)
    25262397            SetErrBreak (("SetupDiCreateDeviceInfo failed (0x%08X)",
    25272398                          GetLastError()));
     
    25292400        /* select the newly created device info to be the currently
    25302401           selected member */
    2531         ok = SetupDiSetSelectedDevice (hDeviceInfo, &DeviceInfoData);
    2532         if (!ok)
     2402        fResult = SetupDiSetSelectedDevice (hDeviceInfo, &DeviceInfoData);
     2403        if (!fResult)
    25332404            SetErrBreak (("SetupDiSetSelectedDevice failed (0x%08X)",
    25342405                          GetLastError()));
     
    25382409            /* get the device install parameters and disable filecopy */
    25392410            DeviceInstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS);
    2540             ok = SetupDiGetDeviceInstallParams (hDeviceInfo, &DeviceInfoData,
     2411            fResult = SetupDiGetDeviceInstallParams (hDeviceInfo, &DeviceInfoData,
    25412412                                                &DeviceInstallParams);
    2542             if (ok)
     2413            if (fResult)
    25432414            {
    25442415                memset(DeviceInstallParams.DriverPath, 0, sizeof(DeviceInstallParams.DriverPath));
     
    25532424                    }
    25542425
    2555                     ok = SetupDiSetDeviceInstallParams (hDeviceInfo, &DeviceInfoData,
    2556                                                         &DeviceInstallParams);
    2557                     if (!ok)
     2426                    fResult = SetupDiSetDeviceInstallParams(hDeviceInfo, &DeviceInfoData,
     2427                                                       &DeviceInstallParams);
     2428                    if (!fResult)
    25582429                    {
    25592430                        DWORD winEr = GetLastError();
    2560                         Log("SetupDiSetDeviceInstallParams: SetupDiSetDeviceInstallParams failed, winEr (%d)\n", winEr);
    2561                         Assert(0);
     2431                        LogFlow(("SetupDiSetDeviceInstallParams failed, winEr (%d)\n", winEr));
    25622432                        break;
    25632433                    }
     
    25652435                else
    25662436                {
    2567                     Log("SetupDiSetDeviceInstallParams: inf path is too long\n");
    2568                     Assert(0);
     2437                    LogFlow(("SetupDiSetDeviceInstallParams faileed: INF path is too long\n"));
    25692438                    break;
    25702439                }
     
    25732442            {
    25742443                DWORD winEr = GetLastError();
    2575                 Assert(0);
    2576                 Log("VBoxNetCfgWinCreateHostOnlyNetworkInterface: SetupDiGetDeviceInstallParams failed, winEr (%d)\n", winEr);
    2577             }
    2578 
     2444                LogFlow(("SetupDiGetDeviceInstallParams failed, winEr (%d)\n", winEr));
     2445            }
    25792446        }
    25802447
    25812448        /* build a list of class drivers */
    2582         ok = SetupDiBuildDriverInfoList (hDeviceInfo, &DeviceInfoData,
    2583                                         SPDIT_CLASSDRIVER);
    2584         if (!ok)
     2449        fResult = SetupDiBuildDriverInfoList (hDeviceInfo, &DeviceInfoData,
     2450                                              SPDIT_CLASSDRIVER);
     2451        if (!fResult)
    25852452            SetErrBreak (("SetupDiBuildDriverInfoList failed (0x%08X)",
    25862453                          GetLastError()));
     
    26472514
    26482515        if (!found)
    2649             SetErrBreak (("Could not find Host Interface Networking driver! "
    2650                               "Please reinstall"));
     2516            SetErrBreak(("Could not find Host Interface Networking driver! Please reinstall"));
    26512517
    26522518        /* set the loopback driver to be the currently selected */
    2653         ok = SetupDiSetSelectedDriver (hDeviceInfo, &DeviceInfoData,
     2519        fResult = SetupDiSetSelectedDriver (hDeviceInfo, &DeviceInfoData,
    26542520                                       &DriverInfoData);
    2655         if (!ok)
    2656             SetErrBreak (("SetupDiSetSelectedDriver failed (0x%08X)",
    2657                           GetLastError()));
     2521        if (!fResult)
     2522            SetErrBreak(("SetupDiSetSelectedDriver failed (0x%08X)",
     2523                         GetLastError()));
    26582524
    26592525        /* register the phantom device to prepare for install */
    2660         ok = SetupDiCallClassInstaller (DIF_REGISTERDEVICE, hDeviceInfo,
    2661                                         &DeviceInfoData);
    2662         if (!ok)
     2526        fResult = SetupDiCallClassInstaller (DIF_REGISTERDEVICE, hDeviceInfo,
     2527                                             &DeviceInfoData);
     2528        if (!fResult)
    26632529        {
    26642530            DWORD err = GetLastError();
     
    26712537
    26722538        /* ask the installer if we can install the device */
    2673         ok = SetupDiCallClassInstaller (DIF_ALLOW_INSTALL, hDeviceInfo,
    2674                                         &DeviceInfoData);
    2675         if (!ok)
     2539        fResult = SetupDiCallClassInstaller (DIF_ALLOW_INSTALL, hDeviceInfo,
     2540                                             &DeviceInfoData);
     2541        if (!fResult)
    26762542        {
    26772543            if (GetLastError() != ERROR_DI_DO_DEFAULT)
     
    26832549        /* get the device install parameters and disable filecopy */
    26842550        DeviceInstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS);
    2685         ok = SetupDiGetDeviceInstallParams (hDeviceInfo, &DeviceInfoData,
    2686                                             &DeviceInstallParams);
    2687         if (ok)
     2551        fResult = SetupDiGetDeviceInstallParams (hDeviceInfo, &DeviceInfoData,
     2552                                                 &DeviceInstallParams);
     2553        if (fResult)
    26882554        {
    26892555            pQueueCallbackContext = SetupInitDefaultQueueCallback(NULL);
     
    26922558                DeviceInstallParams.InstallMsgHandlerContext = pQueueCallbackContext;
    26932559                DeviceInstallParams.InstallMsgHandler = (PSP_FILE_CALLBACK)vboxNetCfgWinPspFileCallback;
    2694                 ok = SetupDiSetDeviceInstallParams (hDeviceInfo, &DeviceInfoData,
     2560                fResult = SetupDiSetDeviceInstallParams (hDeviceInfo, &DeviceInfoData,
    26952561                                                    &DeviceInstallParams);
    2696                 if (!ok)
     2562                if (!fResult)
    26972563                {
    26982564                    DWORD winEr = GetLastError();
    2699                     Assert(0);
    2700                     Log("SetupDiSetDeviceInstallParams: SetupDiSetDeviceInstallParams failed, winEr (%d)\n", winEr);
    2701                 }
    2702                 Assert(ok);
     2565                    LogFlow(("SetupDiSetDeviceInstallParams failed, winEr (%d)\n", winEr));
     2566                }
     2567                Assert(fResult);
    27032568            }
    27042569            else
    27052570            {
    27062571                DWORD winEr = GetLastError();
    2707                 Assert(0);
    2708                 Log("VBoxNetCfgWinCreateHostOnlyNetworkInterface: SetupInitDefaultQueueCallback failed, winEr (%d)\n", winEr);
     2572                LogFlow(("SetupInitDefaultQueueCallback failed, winEr (%d)\n", winEr));
    27092573            }
    27102574        }
     
    27122576        {
    27132577            DWORD winEr = GetLastError();
    2714             Assert(0);
    2715             Log("VBoxNetCfgWinCreateHostOnlyNetworkInterface: SetupDiGetDeviceInstallParams failed, winEr (%d)\n", winEr);
     2578            LogFlow(("SetupDiGetDeviceInstallParams failed, winEr (%d)\n", winEr));
    27162579        }
    27172580
    27182581        /* install the files first */
    2719         ok = SetupDiCallClassInstaller (DIF_INSTALLDEVICEFILES, hDeviceInfo,
     2582        fResult = SetupDiCallClassInstaller (DIF_INSTALLDEVICEFILES, hDeviceInfo,
    27202583                                        &DeviceInfoData);
    2721         if (!ok)
     2584        if (!fResult)
    27222585            SetErrBreak (("SetupDiCallClassInstaller (DIF_INSTALLDEVICEFILES) failed (0x%08X)",
    27232586                          GetLastError()));
    2724 
    27252587        /* get the device install parameters and disable filecopy */
    27262588        DeviceInstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS);
    2727         ok = SetupDiGetDeviceInstallParams (hDeviceInfo, &DeviceInfoData,
     2589        fResult = SetupDiGetDeviceInstallParams (hDeviceInfo, &DeviceInfoData,
    27282590                                            &DeviceInstallParams);
    2729         if (ok)
     2591        if (fResult)
    27302592        {
    27312593            DeviceInstallParams.Flags |= DI_NOFILECOPY;
    2732             ok = SetupDiSetDeviceInstallParams (hDeviceInfo, &DeviceInfoData,
    2733                                                 &DeviceInstallParams);
    2734             if (!ok)
     2594            fResult = SetupDiSetDeviceInstallParams(hDeviceInfo, &DeviceInfoData,
     2595                                                    &DeviceInstallParams);
     2596            if (!fResult)
    27352597                SetErrBreak (("SetupDiSetDeviceInstallParams failed (0x%08X)",
    27362598                              GetLastError()));
     
    27402602         * Register any device-specific co-installers for this device,
    27412603         */
    2742 
    2743         ok = SetupDiCallClassInstaller (DIF_REGISTER_COINSTALLERS,
    2744                                         hDeviceInfo,
    2745                                         &DeviceInfoData);
    2746         if (!ok)
     2604        fResult = SetupDiCallClassInstaller(DIF_REGISTER_COINSTALLERS,
     2605                                            hDeviceInfo,
     2606                                            &DeviceInfoData);
     2607        if (!fResult)
    27472608            SetErrBreak (("SetupDiCallClassInstaller (DIF_REGISTER_COINSTALLERS) failed (0x%08X)",
    27482609                          GetLastError()));
     
    27522613         * and then do the real install
    27532614         */
    2754         ok = SetupDiCallClassInstaller (DIF_INSTALLINTERFACES,
    2755                                         hDeviceInfo,
    2756                                         &DeviceInfoData);
    2757         if (!ok)
     2615        fResult = SetupDiCallClassInstaller(DIF_INSTALLINTERFACES,
     2616                                            hDeviceInfo,
     2617                                            &DeviceInfoData);
     2618        if (!fResult)
    27582619            SetErrBreak (("SetupDiCallClassInstaller (DIF_INSTALLINTERFACES) failed (0x%08X)",
    27592620                          GetLastError()));
    27602621
    2761         ok = SetupDiCallClassInstaller (DIF_INSTALLDEVICE,
    2762                                         hDeviceInfo,
    2763                                         &DeviceInfoData);
    2764         if (!ok)
     2622        fResult = SetupDiCallClassInstaller(DIF_INSTALLDEVICE,
     2623                                            hDeviceInfo,
     2624                                            &DeviceInfoData);
     2625        if (!fResult)
    27652626            SetErrBreak (("SetupDiCallClassInstaller (DIF_INSTALLDEVICE) failed (0x%08X)",
    27662627                          GetLastError()));
    27672628
    27682629        /* Figure out NetCfgInstanceId */
    2769         hkey = SetupDiOpenDevRegKey (hDeviceInfo,
    2770                                      &DeviceInfoData,
    2771                                      DICS_FLAG_GLOBAL,
    2772                                      0,
    2773                                      DIREG_DRV,
    2774                                      KEY_READ);
     2630        hkey = SetupDiOpenDevRegKey(hDeviceInfo,
     2631                                    &DeviceInfoData,
     2632                                    DICS_FLAG_GLOBAL,
     2633                                    0,
     2634                                    DIREG_DRV,
     2635                                    KEY_READ);
    27752636        if (hkey == INVALID_HANDLE_VALUE)
    27762637            SetErrBreak (("SetupDiOpenDevRegKey failed (0x%08X)",
     
    27852646
    27862647        if (!SetupDiGetDeviceRegistryPropertyW(hDeviceInfo, &DeviceInfoData,
    2787                 SPDRP_FRIENDLYNAME , /* IN DWORD Property,*/
    2788                   NULL, /*OUT PDWORD PropertyRegDataType, OPTIONAL*/
    2789                   (PBYTE)DevName, /*OUT PBYTE PropertyBuffer,*/
    2790                   sizeof(DevName), /* IN DWORD PropertyBufferSize,*/
    2791                   NULL /*OUT PDWORD RequiredSize OPTIONAL*/
    2792                 ))
     2648                                               SPDRP_FRIENDLYNAME , /* IN DWORD Property,*/
     2649                                               NULL, /*OUT PDWORD PropertyRegDataType, OPTIONAL*/
     2650                                               (PBYTE)DevName, /*OUT PBYTE PropertyBuffer,*/
     2651                                               sizeof(DevName), /* IN DWORD PropertyBufferSize,*/
     2652                                               NULL /*OUT PDWORD RequiredSize OPTIONAL*/))
    27932653        {
    27942654            int err = GetLastError();
     
    28192679     */
    28202680    if (pQueueCallbackContext)
    2821     {
    28222681        SetupTermDefaultQueueCallback(pQueueCallbackContext);
    2823     }
    28242682
    28252683    if (hDeviceInfo != INVALID_HANDLE_VALUE)
     
    28272685        /* an error has occurred, but the device is registered, we must remove it */
    28282686        if (ret != 0 && registered)
    2829             SetupDiCallClassInstaller (DIF_REMOVE, hDeviceInfo, &DeviceInfoData);
    2830 
    2831         found = SetupDiDeleteDeviceInfo (hDeviceInfo, &DeviceInfoData);
     2687            SetupDiCallClassInstaller(DIF_REMOVE, hDeviceInfo, &DeviceInfoData);
     2688
     2689        found = SetupDiDeleteDeviceInfo(hDeviceInfo, &DeviceInfoData);
    28322690
    28332691        /* destroy the driver info list */
    28342692        if (destroyList)
    2835             SetupDiDestroyDriverInfoList (hDeviceInfo, &DeviceInfoData,
    2836                                           SPDIT_CLASSDRIVER);
     2693            SetupDiDestroyDriverInfoList(hDeviceInfo, &DeviceInfoData,
     2694                                         SPDIT_CLASSDRIVER);
    28372695        /* clean up the device info set */
    28382696        SetupDiDestroyDeviceInfoList (hDeviceInfo);
     
    28452703        ULONG cbName = sizeof(ConnectoinName);
    28462704
    2847         HRESULT hr = VBoxNetCfgWinGenHostonlyConnectionName (DevName, ConnectoinName, &cbName);
     2705        HRESULT hr = VBoxNetCfgWinGenHostonlyConnectionName(DevName, ConnectoinName, &cbName);
     2706        if (SUCCEEDED(hr))
     2707            hr = VBoxNetCfgWinRenameConnection(pWCfgGuidString, ConnectoinName);
     2708
     2709        if (lppszName)
     2710        {
     2711            *lppszName = ::SysAllocString((const OLECHAR *) DevName);
     2712            if (!*lppszName)
     2713            {
     2714                LogFlow(("SysAllocString failed\n"));
     2715                hrc = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
     2716            }
     2717        }
     2718
     2719        if (pGuid)
     2720        {
     2721            hrc = CLSIDFromString(pWCfgGuidString, (LPCLSID)pGuid);
     2722            if (FAILED(hrc))
     2723                LogFlow(("CLSIDFromString failed, hrc (0x%x)\n", hrc));
     2724        }
     2725
     2726        INetCfg *pNetCfg = NULL;
     2727        LPWSTR lpszApp = NULL;
     2728        hr = VBoxNetCfgWinQueryINetCfg(&pNetCfg, TRUE, L"VirtualBox Host-Only Creation",
     2729                                       30 * 1000, /* on Vista we often get 6to4svc.dll holding the lock, wait for 30 sec.  */
     2730                                       /* TODO: special handling for 6to4svc.dll ???, i.e. several retrieves */
     2731                                       &lpszApp);
    28482732        if (hr == S_OK)
    28492733        {
    2850             hr = VBoxNetCfgWinRenameConnection (pWCfgGuidString, ConnectoinName);
    2851         }
    2852 
    2853         if (lppszName)
    2854         {
    2855             *lppszName = ::SysAllocString ((const OLECHAR *) DevName);
    2856             if (!*lppszName)
    2857             {
    2858                 Log("VBoxNetCfgWinCreateHostOnlyNetworkInterface: SysAllocString failed\n");
    2859                 Assert(0);
    2860                 hrc = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
    2861             }
    2862         }
    2863 
    2864         if (pGuid)
    2865         {
    2866             hrc = CLSIDFromString(pWCfgGuidString, (LPCLSID)pGuid);
    2867             if (hrc != S_OK)
    2868             {
    2869                 Log("VBoxNetCfgWinCreateHostOnlyNetworkInterface: CLSIDFromString failed, hrc (0x%x)\n", hrc);
    2870                 Assert(0);
    2871             }
    2872         }
    2873 
    2874         INetCfg *pNc;
    2875         LPWSTR lpszApp = NULL;
    2876 
    2877         hr = VBoxNetCfgWinQueryINetCfg(&pNc, TRUE, L"VirtualBox Host-Only Creation",
    2878                            30000, /* on Vista we often get 6to4svc.dll holding the lock, wait for 30 sec,  */
    2879                                   /* TODO: special handling for 6to4svc.dll ???, i.e. several retrieves */
    2880                            &lpszApp);
    2881         Assert(hr == S_OK);
    2882         if (hr == S_OK)
    2883         {
    2884             hr = vboxNetCfgWinEnumNetCfgComponents(pNc,
    2885                     &GUID_DEVCLASS_NETSERVICE,
    2886                     vboxNetCfgWinAdjustHostOnlyNetworkInterfacePriority,
    2887                     pGuid);
    2888             Assert(hr == S_OK);
    2889 
    2890             hr = vboxNetCfgWinEnumNetCfgComponents(pNc,
    2891                     &GUID_DEVCLASS_NETTRANS,
    2892                     vboxNetCfgWinAdjustHostOnlyNetworkInterfacePriority,
    2893                     pGuid);
    2894             Assert(hr == S_OK);
    2895 
    2896             hr = vboxNetCfgWinEnumNetCfgComponents(pNc,
    2897                     &GUID_DEVCLASS_NETCLIENT,
    2898                     vboxNetCfgWinAdjustHostOnlyNetworkInterfacePriority,
    2899                     pGuid);
    2900             Assert(hr == S_OK);
    2901 
    2902             if (hr == S_OK)
    2903             {
    2904                 hr = pNc->Apply();
    2905                 Assert(hr == S_OK);
    2906             }
    2907 
    2908             VBoxNetCfgWinReleaseINetCfg(pNc, TRUE);
     2734            hr = vboxNetCfgWinEnumNetCfgComponents(pNetCfg,
     2735                                                   &GUID_DEVCLASS_NETSERVICE,
     2736                                                   vboxNetCfgWinAdjustHostOnlyNetworkInterfacePriority,
     2737                                                   pGuid);
     2738            if (SUCCEEDED(hr))
     2739            {
     2740                hr = vboxNetCfgWinEnumNetCfgComponents(pNetCfg,
     2741                                                       &GUID_DEVCLASS_NETTRANS,
     2742                                                       vboxNetCfgWinAdjustHostOnlyNetworkInterfacePriority,
     2743                                                       pGuid);
     2744                if (SUCCEEDED(hr))
     2745                    hr = vboxNetCfgWinEnumNetCfgComponents(pNetCfg,
     2746                                                           &GUID_DEVCLASS_NETCLIENT,
     2747                                                           vboxNetCfgWinAdjustHostOnlyNetworkInterfacePriority,
     2748                                                           pGuid);
     2749            }
     2750
     2751            if (SUCCEEDED(hr))
     2752            {
     2753                hr = pNetCfg->Apply();
     2754            }
     2755            else
     2756                LogFlow(("Enumeration failed, hr 0x%x\n", hr));
     2757            VBoxNetCfgWinReleaseINetCfg(pNetCfg, TRUE);
    29092758        }
    29102759        else if (hr == NETCFG_E_NO_WRITE_LOCK && lpszApp)
    29112760        {
    2912             Log("VBoxNetCfgWinCreateHostOnlyNetworkInterface: app %S is holding the lock, failed\n", lpszApp);
     2761            LogFlow(("Application %ws is holding the lock, failed\n", lpszApp));
    29132762            CoTaskMemFree(lpszApp);
    29142763        }
    29152764        else
    2916         {
    2917             Log("VBoxNetCfgWinCreateHostOnlyNetworkInterface: VBoxNetCfgWinQueryINetCfg failed, hr 0x%x\n", hr);
    2918         }
    2919     }
    2920 
     2765            LogFlow(("VBoxNetCfgWinQueryINetCfg failed, hr 0x%x\n", hr));
     2766    }
    29212767    return hrc;
    29222768}
    29232769
    29242770#undef SetErrBreak
     2771
  • trunk/src/VBox/Installer/win/InstallHelper/VBoxCommon.cpp

    r32112 r37289  
    5252        uiRet = MsiGetProperty(a_hModule, a_pszName, a_pValue, &dwBuffer);
    5353    }
    54 
    5554    return uiRet;
    5655}
  • trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp

    r36487 r37289  
    55
    66/*
    7  * Copyright (C) 2008-2010 Oracle Corporation
     7 * Copyright (C) 2008-2011 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    6161}
    6262
    63 void LogString(MSIHANDLE hInstall, TCHAR* szString, ...)
     63static void LogString(MSIHANDLE hInstall, LPCSTR szString, ...)
    6464{
    6565    PMSIHANDLE newHandle = ::MsiCreateRecord(2);
    6666
    67     TCHAR szBuffer[1024] = {0};
     67    char szBuffer[1024] = {0};
    6868    va_list pArgList;
    6969    va_start(pArgList, szString);
    70     _vsntprintf(szBuffer, sizeof(szBuffer) / sizeof(TCHAR), szString, pArgList);
     70    _vsnprintf(szBuffer, sizeof(szBuffer) / sizeof(char), szString, pArgList);
    7171    va_end(pArgList);
    7272
    73     MsiRecordSetString(newHandle, 0, szBuffer);
     73    MsiRecordSetStringA(newHandle, 0, szBuffer);
    7474    MsiProcessMessage(hInstall, INSTALLMESSAGE(INSTALLMESSAGE_INFO), newHandle);
    7575    MsiCloseHandle(newHandle);
     
    9595}
    9696
    97 UINT __stdcall IsSerialCheckNeeded(MSIHANDLE a_hModule)
     97UINT __stdcall IsSerialCheckNeeded(MSIHANDLE hModule)
    9898{
    9999#ifndef VBOX_OSE
    100     /*BOOL bRet =*/ serialCheckNeeded(a_hModule);
     100    /*BOOL bRet =*/ serialCheckNeeded(hModule);
    101101#endif
    102102    return ERROR_SUCCESS;
    103103}
    104104
    105 UINT __stdcall CheckSerial(MSIHANDLE a_hModule)
     105UINT __stdcall CheckSerial(MSIHANDLE hModule)
    106106{
    107107#ifndef VBOX_OSE
    108     /*BOOL bRet =*/ serialIsValid(a_hModule);
     108    /*BOOL bRet =*/ serialIsValid(hModule);
    109109#endif
    110110    return ERROR_SUCCESS;
     
    126126    ::ZeroMemory(&pi, sizeof(pi));
    127127
    128     LogString(hModule, TEXT("Executing command line: %s %s (Working Dir: %s)"), szAppName, szCmdLine, szWorkDir == NULL ? L"Current" : szWorkDir);
     128    LogStringW(hModule, TEXT("Executing command line: %s %s (Working Dir: %s)"),
     129               szAppName, szCmdLine, szWorkDir == NULL ? L"Current" : szWorkDir);
    129130
    130131    ::SetLastError(0);
     
    141142    {
    142143        rc = ::GetLastError();
    143         LogString(hModule, TEXT("Executing command line: CreateProcess() failed! Error: %ld"), rc);
     144        LogStringW(hModule, TEXT("Executing command line: CreateProcess() failed! Error: %ld"), rc);
    144145        return rc;
    145146    }
     
    149150    {
    150151        rc = ::GetLastError();
    151         LogString(hModule, TEXT("Executing command line: WaitForSingleObject() failed! Error: %ld"), rc);
     152        LogStringW(hModule, TEXT("Executing command line: WaitForSingleObject() failed! Error: %ld"), rc);
    152153    }
    153154    else
     
    156157        {
    157158            rc = ::GetLastError();
    158             LogString(hModule, TEXT("Executing command line: GetExitCodeProcess() failed! Error: %ld"), rc);
     159            LogStringW(hModule, TEXT("Executing command line: GetExitCodeProcess() failed! Error: %ld"), rc);
    159160        }
    160161    }
     
    164165    ::CloseHandle(pi.hThread);
    165166
    166     LogString(hModule, TEXT("Executing command returned: %ld (exit code %ld)"), rc, *dwExitCode);
     167    LogStringW(hModule, TEXT("Executing command returned: %ld (exit code %ld)"), rc, *dwExitCode);
    167168    return rc;
    168169}
     
    170171UINT __stdcall InstallPythonAPI(MSIHANDLE hModule)
    171172{
    172     LogString(hModule, TEXT("InstallPythonAPI: Checking for installed Python environment ..."));
     173    LogStringW(hModule, TEXT("InstallPythonAPI: Checking for installed Python environment ..."));
    173174
    174175    HKEY hkPythonCore = NULL;
    175     BOOL bInstalled = FALSE;
     176    BOOL bFound = FALSE;
    176177    LONG rc = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Python\\PythonCore", 0, KEY_READ, &hkPythonCore);
    177178    if (rc != ERROR_SUCCESS)
    178179    {
    179         LogString(hModule, TEXT("InstallPythonAPI: No environment seems to be installed."));
     180        LogStringW(hModule, TEXT("InstallPythonAPI: Python seems not to be installed."));
    180181        return ERROR_SUCCESS;
    181182    }
     
    203204
    204205        rc = ::RegQueryValueEx(hkPythonInstPath, L"", NULL, &dwKeyType, (LPBYTE)szVal, &dwLen);
    205         if(rc == ERROR_SUCCESS)
    206             LogString(hModule, TEXT("InstallPythonAPI: Path \"%s\" detected."), szVal);
     206        if (rc == ERROR_SUCCESS)
     207            LogStringW(hModule, TEXT("InstallPythonAPI: Path \"%s\" detected."), szVal);
    207208
    208209        ::RegCloseKey(hkPythonInstPath);
     
    217218    {
    218219        /* Cool, check for installed Win32 extensions. */
    219         LogString(hModule, TEXT("InstallPythonAPI: Python installed. Checking for Win32 extensions ..."));
     220        LogStringW(hModule, TEXT("InstallPythonAPI: Python installed. Checking for Win32 extensions ..."));
    220221        _stprintf_s(szExec, sizeof(szExec) / sizeof(TCHAR), L"%s\\python.exe", szVal);
    221222        _stprintf_s(szCmdLine, sizeof(szCmdLine) / sizeof(TCHAR), L"%s\\python.exe -c \"import win32api\"", szVal);
     
    225226        {
    226227            /* Did we get the correct error level (=0)? */
    227             LogString(hModule, TEXT("InstallPythonAPI: Win32 extensions installed."));
    228             bInstalled = TRUE;
    229         }
    230         else LogString(hModule, TEXT("InstallPythonAPI: Win32 extensions not found."));
    231     }
    232 
    233     if (bInstalled) /* Is Python and all required stuff installed? */
     228            LogStringW(hModule, TEXT("InstallPythonAPI: Win32 extensions installed."));
     229            bFound = TRUE;
     230        }
     231        else LogStringW(hModule, TEXT("InstallPythonAPI: Win32 extensions not found."));
     232    }
     233
     234    BOOL bInstalled = FALSE;
     235    if (bFound) /* Is Python and all required stuff installed? */
    234236    {
    235237        /* Get the VBoxAPI setup string. */
     
    246248        if (!SetEnvironmentVariable(L"VBOX_INSTALL_PATH", szVBoxAPISetupPath))
    247249        {
    248             LogString(hModule, TEXT("InstallPythonAPI: Cannot set environment variable VBOX_INSTALL_PATH!"));
    249             return FALSE;
     250            LogStringW(hModule, TEXT("InstallPythonAPI: Could set environment variable VBOX_INSTALL_PATH!"));
    250251        }
    251252        else
     
    255256            {
    256257                /* All done! */
    257                 LogString(hModule, TEXT("InstallPythonAPI: VBoxAPI for Python successfully installed."));
    258                 return ERROR_SUCCESS;
     258                LogStringW(hModule, TEXT("InstallPythonAPI: VBoxAPI for Python successfully installed."));
     259                bInstalled = TRUE;
    259260            }
    260             else LogString(hModule, TEXT("InstallPythonAPI: Error while installing VBoxAPI: %ld"), dwExitCode);
    261         }
    262     }
    263 
    264     LogString(hModule, TEXT("InstallPythonAPI: VBoxAPI not installed."));
     261            else
     262                LogStringW(hModule, TEXT("InstallPythonAPI: Error while installing VBox API: %ld"), dwExitCode);
     263        }
     264    }
     265
     266    VBoxSetProperty(hModule, L"PYTHON_INSTALLED", bInstalled ? L"1" : L"0");
     267
     268    if (!bInstalled)
     269        LogStringW(hModule, TEXT("InstallPythonAPI: VBox API not installed."));
    265270    return ERROR_SUCCESS; /* Do not fail here. */
    266271}
     
    295300                               (DWORD)wcslen(szValue));
    296301            if (rc != ERROR_SUCCESS)
    297                 LogString(hModule, TEXT("InstallBranding: Could not write value %s! Error %ld"), pszValue, rc);
     302                LogStringW(hModule, TEXT("InstallBranding: Could not write value %s! Error %ld"), pszValue, rc);
    298303            RegCloseKey (hkBranding);
    299304        }
     
    323328               FOF_NOERRORUI;
    324329
    325     LogString(hModule, TEXT("CopyDir: DestDir=%s, SourceDir=%s"),
     330    LogStringW(hModule, TEXT("CopyDir: DestDir=%s, SourceDir=%s"),
    326331              szDest, szSource);
    327332    int r = SHFileOperation(&s);
    328333    if (r != 0)
    329334    {
    330         LogString(hModule, TEXT("CopyDir: Copy operation returned status 0x%x"), r);
     335        LogStringW(hModule, TEXT("CopyDir: Copy operation returned status 0x%x"), r);
    331336        rc = ERROR_GEN_FAILURE;
    332337    }
     
    352357               FOF_NOERRORUI;
    353358
    354     LogString(hModule, TEXT("RemoveDir: DestDir=%s"), szDest);
     359    LogStringW(hModule, TEXT("RemoveDir: DestDir=%s"), szDest);
    355360    int r = SHFileOperation(&s);
    356361    if (r != 0)
    357362    {
    358         LogString(hModule, TEXT("RemoveDir: Remove operation returned status 0x%x"), r);
     363        LogStringW(hModule, TEXT("RemoveDir: Remove operation returned status 0x%x"), r);
    359364        rc = ERROR_GEN_FAILURE;
    360365    }
     
    383388               FOF_NOERRORUI;
    384389
    385     LogString(hModule, TEXT("RenameDir: DestDir=%s, SourceDir=%s"),
     390    LogStringW(hModule, TEXT("RenameDir: DestDir=%s, SourceDir=%s"),
    386391              szDest, szSource);
    387392    int r = SHFileOperation(&s);
    388393    if (r != 0)
    389394    {
    390         LogString(hModule, TEXT("RenameDir: Rename operation returned status 0x%x"), r);
     395        LogStringW(hModule, TEXT("RenameDir: Rename operation returned status 0x%x"), r);
    391396        rc = ERROR_GEN_FAILURE;
    392397    }
     
    399404{
    400405    UINT rc;
    401     LogString(hModule, TEXT("UninstallBranding: Handling branding file ..."));
     406    LogStringW(hModule, TEXT("UninstallBranding: Handling branding file ..."));
    402407
    403408    TCHAR szPathTargetDir[_MAX_PATH];
     
    418423    }
    419424
    420     LogString(hModule, TEXT("UninstallBranding: Handling done."));
     425    LogStringW(hModule, TEXT("UninstallBranding: Handling done."));
    421426    return ERROR_SUCCESS; /* Do not fail here. */
    422427}
     
    425430{
    426431    UINT rc;
    427     LogString(hModule, TEXT("InstallBranding: Handling branding file ..."));
     432    LogStringW(hModule, TEXT("InstallBranding: Handling branding file ..."));
    428433
    429434    TCHAR szPathMSI[_MAX_PATH];
     
    434439
    435440    rc = VBoxGetProperty(hModule, L"SOURCEDIR", szPathMSI, sizeof(szPathMSI));
    436     rc = VBoxGetProperty(hModule, L"INSTALLDIR", szPathTargetDir, sizeof(szPathTargetDir));
    437441    if (rc == ERROR_SUCCESS)
    438442    {
    439         /** @todo Check for trailing slash after %s. */
    440         _stprintf_s(szPathDest, sizeof(szPathDest) / sizeof(TCHAR), L"%s", szPathTargetDir);
    441         _stprintf_s(szPathSource, sizeof(szPathSource) / sizeof(TCHAR), L"%s.custom", szPathMSI);
    442         rc = CopyDir(hModule, szPathDest, szPathSource);
     443        rc = VBoxGetProperty(hModule, L"INSTALLDIR", szPathTargetDir, sizeof(szPathTargetDir));
    443444        if (rc == ERROR_SUCCESS)
    444445        {
    445             _stprintf_s(szPathDest, sizeof(szPathDest) / sizeof(TCHAR), L"%scustom", szPathTargetDir);
    446             _stprintf_s(szPathSource, sizeof(szPathSource) / sizeof(TCHAR), L"%s.custom", szPathTargetDir);
    447             rc = RenameDir(hModule, szPathDest, szPathSource);
    448         }
    449     }
    450 
    451     LogString(hModule, TEXT("InstallBranding: Handling done."));
     446            /** @todo Check for trailing slash after %s. */
     447            _stprintf_s(szPathDest, sizeof(szPathDest) / sizeof(TCHAR), L"%s", szPathTargetDir);
     448            _stprintf_s(szPathSource, sizeof(szPathSource) / sizeof(TCHAR), L"%s.custom", szPathMSI);
     449            rc = CopyDir(hModule, szPathDest, szPathSource);
     450            if (rc == ERROR_SUCCESS)
     451            {
     452                _stprintf_s(szPathDest, sizeof(szPathDest) / sizeof(TCHAR), L"%scustom", szPathTargetDir);
     453                _stprintf_s(szPathSource, sizeof(szPathSource) / sizeof(TCHAR), L"%s.custom", szPathTargetDir);
     454                rc = RenameDir(hModule, szPathDest, szPathSource);
     455            }
     456        }
     457    }
     458
     459    LogStringW(hModule, TEXT("InstallBranding: Handling done."));
    452460    return ERROR_SUCCESS; /* Do not fail here. */
    453461}
     
    464472
    465473static MSIHANDLE g_hCurrentModule = NULL;
    466 static VOID winNetCfgLogger(LPCWSTR szString)
    467 {
    468     Assert(g_hCurrentModule);
    469     if(g_hCurrentModule)
    470     {
    471         LogStringW(g_hCurrentModule, szString);
    472     }
    473 }
    474 
    475 static VOID inintWinNetCfgLogger(MSIHANDLE hModule)
    476 {
    477     Assert(!g_hCurrentModule);
     474
     475static VOID netCfgLoggerCallback(LPCSTR szString)
     476{
     477    if (g_hCurrentModule)
     478        LogString(g_hCurrentModule, szString);
     479}
     480
     481static VOID netCfgLoggerDisable()
     482{
     483    if (g_hCurrentModule)
     484    {
     485        VBoxNetCfgWinSetLogging((LOG_ROUTINE)NULL);
     486        g_hCurrentModule = NULL;
     487    }
     488}
     489
     490static VOID netCfgLoggerEnable(MSIHANDLE hModule)
     491{
    478492    Assert(hModule);
    479493
     494    if (g_hCurrentModule)
     495        netCfgLoggerDisable();
     496
    480497    g_hCurrentModule = hModule;
    481498
    482     VBoxNetCfgWinSetLogging((LOG_ROUTINE)winNetCfgLogger);
    483 }
    484 
    485 static VOID finiWinNetCfgLogger()
    486 {
    487     Assert(g_hCurrentModule);
    488 
    489     VBoxNetCfgWinSetLogging((LOG_ROUTINE)NULL);
    490 
    491     g_hCurrentModule = NULL;
    492 }
    493 
    494 static UINT Hresult2Error(MSIHANDLE hModule, HRESULT hr)
    495 {
    496     switch(hr)
     499    VBoxNetCfgWinSetLogging((LOG_ROUTINE)netCfgLoggerCallback);
     500}
     501
     502static UINT ErrorConvertFromHResult(MSIHANDLE hModule, HRESULT hr)
     503{
     504    UINT uRet;
     505    switch (hr)
    497506    {
    498507        case S_OK:
    499             return ERROR_SUCCESS;
     508            uRet = ERROR_SUCCESS;
     509            break;
     510
    500511        case NETCFG_S_REBOOT:
    501             LogString(hModule, TEXT("Reboot required, setting REBOOT property to Force"));
    502             if(MsiSetProperty(hModule, TEXT("REBOOT"), TEXT("Force")) != ERROR_SUCCESS)
    503             {
    504                 LogString(hModule, TEXT("Failed to set REBOOT property"));
    505                 return ERROR_GEN_FAILURE;
    506             }
    507             return ERROR_SUCCESS;
     512        {
     513            LogStringW(hModule, TEXT("Reboot required, setting REBOOT property to Force"));
     514            HRESULT hr2 = MsiSetProperty(hModule, TEXT("REBOOT"), TEXT("Force"));
     515            if (hr2 != ERROR_SUCCESS)
     516                LogStringW(hModule, TEXT("Failed to set REBOOT property, error = 0x%x"), hr2);
     517            uRet = ERROR_SUCCESS; /* Never fail here. */
     518            break;
     519        }
     520
    508521        default:
    509             LogString(hModule, TEXT("converting hresult (0x%x) to ERROR_GEN_FAILURE"), hr);
    510             return ERROR_GEN_FAILURE;
    511     }
     522            LogStringW(hModule, TEXT("Converting unhandled HRESULT (0x%x) to ERROR_GEN_FAILURE"), hr);
     523            uRet = ERROR_GEN_FAILURE;
     524    }
     525    return uRet;
    512526}
    513527
     
    515529{
    516530    MSIHANDLE hRecord = MsiCreateRecord(2);
    517     Assert(hRecord);
    518     if(hRecord)
    519     {
    520         do
    521         {
    522             UINT r = MsiRecordSetInteger(hRecord, 1, 25001);
    523             Assert(r == ERROR_SUCCESS);
    524             if(r != ERROR_SUCCESS)
    525             {
    526                 LogString(hModule, TEXT("createNetCfgLockedMsgRecord: MsiRecordSetInteger failed, r (0x%x)"), r);
    527                 MsiCloseHandle(hRecord);
    528                 hRecord = NULL;
    529                 break;
    530             }
    531         }while(0);
     531    if (hRecord)
     532    {
     533        UINT uErr = MsiRecordSetInteger(hRecord, 1, 25001);
     534        if (uErr != ERROR_SUCCESS)
     535        {
     536            LogStringW(hModule, TEXT("createNetCfgLockedMsgRecord: MsiRecordSetInteger failed, error = 0x%x"), uErr);
     537            MsiCloseHandle(hRecord);
     538            hRecord = NULL;
     539        }
    532540    }
    533541    else
    534     {
    535         LogString(hModule, TEXT("createNetCfgLockedMsgRecord: failed to create a record"));
    536     }
     542        LogStringW(hModule, TEXT("createNetCfgLockedMsgRecord: Failed to create a record"));
    537543
    538544    return hRecord;
     
    542548{
    543549    MSIHANDLE hMsg = NULL;
    544     UINT r = ERROR_GEN_FAILURE;
     550    UINT uErr = ERROR_GEN_FAILURE;
    545551    int MsgResult;
    546552    int cRetries = 0;
     
    550556        LPWSTR lpszLockedBy;
    551557        HRESULT hr = VBoxNetCfgWinQueryINetCfg(ppnc, bWrite, VBOX_NETCFG_APP_NAME, 10000, &lpszLockedBy);
    552         if(hr != NETCFG_E_NO_WRITE_LOCK)
    553         {
    554             Assert(hr == S_OK);
    555             if(hr != S_OK)
    556             {
    557                 LogString(hModule, TEXT("doNetCfgInit: VBoxNetCfgWinQueryINetCfg failed, hr (0x%x)"), hr);
    558             }
    559             r = Hresult2Error(hModule, hr);
     558        if (hr != NETCFG_E_NO_WRITE_LOCK)
     559        {
     560            if (FAILED(hr))
     561                LogStringW(hModule, TEXT("doNetCfgInit: VBoxNetCfgWinQueryINetCfg failed, error = 0x%x"), hr);
     562            uErr = ErrorConvertFromHResult(hModule, hr);
    560563            break;
    561564        }
     
    563566        /* hr == NETCFG_E_NO_WRITE_LOCK */
    564567
    565         Assert(lpszLockedBy);
    566         if(!lpszLockedBy)
    567         {
    568             LogString(hModule, TEXT("doNetCfgInit: lpszLockedBy == NULL, breaking"));
     568        if (!lpszLockedBy)
     569        {
     570            LogStringW(hModule, TEXT("doNetCfgInit: lpszLockedBy == NULL, breaking"));
    569571            break;
    570572        }
     
    576578         * dialog is opened, it would be better to post a notification to the user as soon as possible
    577579         * rather than waiting for a longer period of time before displaying it */
    578         if(cRetries < VBOX_NETCFG_MAX_RETRIES
    579                 && !wcscmp(lpszLockedBy, L"6to4svc.dll"))
     580        if (   cRetries < VBOX_NETCFG_MAX_RETRIES
     581            && !wcscmp(lpszLockedBy, L"6to4svc.dll"))
    580582        {
    581583            cRetries++;
    582             LogString(hModule, TEXT("doNetCfgInit: lpszLockedBy is 6to4svc.dll, retrying %d out of %d"), cRetries, VBOX_NETCFG_MAX_RETRIES);
     584            LogStringW(hModule, TEXT("doNetCfgInit: lpszLockedBy is 6to4svc.dll, retrying %d out of %d"), cRetries, VBOX_NETCFG_MAX_RETRIES);
    583585            MsgResult = IDRETRY;
    584586        }
    585587        else
    586588        {
    587             if(!hMsg)
     589            if (!hMsg)
    588590            {
    589591                hMsg = createNetCfgLockedMsgRecord(hModule);
    590                 if(!hMsg)
     592                if (!hMsg)
    591593                {
    592                     LogString(hModule, TEXT("doNetCfgInit: failed to create a message record, breaking"));
     594                    LogStringW(hModule, TEXT("doNetCfgInit: Failed to create a message record, breaking"));
    593595                    CoTaskMemFree(lpszLockedBy);
    594596                    break;
     
    598600            UINT rTmp = MsiRecordSetStringW(hMsg, 2, lpszLockedBy);
    599601            Assert(rTmp == ERROR_SUCCESS);
    600             if(rTmp != ERROR_SUCCESS)
     602            if (rTmp != ERROR_SUCCESS)
    601603            {
    602                 LogString(hModule, TEXT("doNetCfgInit: MsiRecordSetStringW failed, r (0x%x)"), rTmp);
     604                LogStringW(hModule, TEXT("doNetCfgInit: MsiRecordSetStringW failed, error = 0x%x"), rTmp);
    603605                CoTaskMemFree(lpszLockedBy);
    604606                break;
     
    607609            MsgResult = MsiProcessMessage(hModule, (INSTALLMESSAGE)(INSTALLMESSAGE_USER | MB_RETRYCANCEL), hMsg);
    608610            Assert(MsgResult == IDRETRY || MsgResult == IDCANCEL);
    609             LogString(hModule, TEXT("doNetCfgInit: MsiProcessMessage returned (0x%x)"), MsgResult);
     611            LogStringW(hModule, TEXT("doNetCfgInit: MsiProcessMessage returned (0x%x)"), MsgResult);
    610612        }
    611613        CoTaskMemFree(lpszLockedBy);
    612614    } while(MsgResult == IDRETRY);
    613615
    614     if(hMsg)
    615     {
     616    if (hMsg)
    616617        MsiCloseHandle(hMsg);
    617     }
    618 
    619     return r;
    620 }
    621 
    622 static UINT vboxNetFltQueryInfArray(MSIHANDLE hModule, OUT LPWSTR *apInfFullPaths, PUINT pcInfs, DWORD cSize)
    623 {
    624     UINT r;
    625     Assert(*pcInfs >= 2);
    626     if(*pcInfs >= 2)
     618
     619    return uErr;
     620}
     621
     622static UINT vboxNetFltQueryInfArray(MSIHANDLE hModule, OUT LPWSTR *apInfFullPaths, PUINT pcInfs, DWORD dwSize)
     623{
     624    UINT uErr;
     625    if (*pcInfs >= 2)
    627626    {
    628627        *pcInfs = 2;
    629         r = MsiGetPropertyW(hModule, L"CustomActionData", apInfFullPaths[0], &cSize);
    630         Assert(r == ERROR_SUCCESS);
    631         if(r == ERROR_SUCCESS)
    632         {
     628
     629        DWORD dwBuf = dwSize;
     630        uErr = MsiGetPropertyW(hModule, L"CustomActionData", apInfFullPaths[0], &dwBuf);
     631        if (   uErr == ERROR_SUCCESS
     632            && dwBuf)
     633        {
     634            /** @todo r=andy Avoid wcscpy and wcsncat, can cause buffer overruns! */
    633635            wcscpy(apInfFullPaths[1], apInfFullPaths[0]);
    634636
    635637            wcsncat(apInfFullPaths[0], NETFLT_PT_INF_REL_PATH, sizeof(NETFLT_PT_INF_REL_PATH));
     638            LogStringW(hModule, TEXT("vboxNetFltQueryInfArray: INF 1: %s"), apInfFullPaths[0]);
     639
    636640            wcsncat(apInfFullPaths[1], NETFLT_MP_INF_REL_PATH, sizeof(NETFLT_MP_INF_REL_PATH));
     641            LogStringW(hModule, TEXT("vboxNetFltQueryInfArray: INF 2: %s"), apInfFullPaths[1]);
    637642        }
    638643        else
    639644        {
    640             LogString(hModule, TEXT("vboxNetFltQueryInfArray: MsiGetPropertyW failes, r (%d)"), r);
     645            if (uErr != ERROR_SUCCESS)
     646                LogStringW(hModule, TEXT("vboxNetFltQueryInfArray: MsiGetPropertyW failed, error = 0x%x"), uErr);
     647            else
     648                LogStringW(hModule, TEXT("vboxNetFltQueryInfArray: Empty installation directory"));
    641649        }
    642650    }
    643651    else
    644652    {
    645         r = ERROR_GEN_FAILURE;
    646         LogString(hModule, TEXT("vboxNetFltQueryInfArray: buffer array size is < 2 : (%d)"), *pcInfs);
    647         *pcInfs = 2;
    648     }
    649 
    650     return r;
     653        uErr = ERROR_BUFFER_OVERFLOW;
     654        LogStringW(hModule, TEXT("vboxNetFltQueryInfArray: Buffer array size is < 2 (%u)"), *pcInfs);
     655    }
     656
     657    return uErr;
    651658}
    652659
     
    656663{
    657664#ifdef VBOX_WITH_NETFLT
    658     INetCfg *pnc;
    659     UINT r;
    660 
    661     inintWinNetCfgLogger(hModule);
     665    INetCfg *pNetCfg;
     666    UINT uErr;
     667
     668    netCfgLoggerEnable(hModule);
    662669
    663670    BOOL bOldIntMode = SetupSetNonInteractiveMode(FALSE);
     
    665672    __try
    666673    {
    667         LogString(hModule, TEXT("Uninstalling NetFlt"));
    668 
    669         r = doNetCfgInit(hModule, &pnc, TRUE);
    670         Assert(r == ERROR_SUCCESS);
    671         if(r == ERROR_SUCCESS)
    672         {
    673             HRESULT hr = VBoxNetCfgWinNetFltUninstall(pnc);
    674             Assert(hr == S_OK);
    675             if(hr != S_OK)
    676             {
    677                 LogString(hModule, TEXT("UninstallNetFlt: VBoxNetCfgWinUninstallComponent failed, hr (0x%x)"), hr);
    678             }
    679 
    680             r = Hresult2Error(hModule, hr);
    681 
    682             VBoxNetCfgWinReleaseINetCfg(pnc, TRUE);
    683 
    684             /* Never fail the uninstall */
    685             r = ERROR_SUCCESS;
     674        LogStringW(hModule, TEXT("Uninstalling NetFlt"));
     675
     676        uErr = doNetCfgInit(hModule, &pNetCfg, TRUE);
     677        if (uErr == ERROR_SUCCESS)
     678        {
     679            HRESULT hr = VBoxNetCfgWinNetFltUninstall(pNetCfg);
     680            if (hr != S_OK)
     681                LogStringW(hModule, TEXT("UninstallNetFlt: VBoxNetCfgWinUninstallComponent failed, error = 0x%x"), hr);
     682
     683            uErr = ErrorConvertFromHResult(hModule, hr);
     684
     685            VBoxNetCfgWinReleaseINetCfg(pNetCfg, TRUE);
     686
     687            LogStringW(hModule, TEXT("Uninstalling NetFlt done, error = 0x%x"), uErr);
     688
     689            /* Never fail on uninstall. */
     690            uErr = ERROR_SUCCESS;
    686691        }
    687692        else
    688         {
    689             LogString(hModule, TEXT("UninstallNetFlt: doNetCfgInit failed, r (0x%x)"), r);
    690         }
    691 
    692         LogString(hModule, TEXT("Uninstalling NetFlt done, r (0x%x)"), r);
     693            LogStringW(hModule, TEXT("UninstallNetFlt: doNetCfgInit failed, error = 0x%x"), uErr);
    693694    }
    694695    __finally
    695696    {
    696         if(bOldIntMode)
    697         {
    698             /* the prev mode != FALSE, i.e. non-interactive */
     697        if (bOldIntMode)
     698        {
     699            /* The prev mode != FALSE, i.e. non-interactive. */
    699700            SetupSetNonInteractiveMode(bOldIntMode);
    700701        }
    701         finiWinNetCfgLogger();
    702     }
    703 
     702        netCfgLoggerDisable();
     703    }
     704#endif /* VBOX_WITH_NETFLT */
     705
     706    /* Never fail the install even if we did not succeed. */
    704707    return ERROR_SUCCESS;
    705 #else /* not defined VBOX_WITH_NETFLT */
    706     return ERROR_SUCCESS;
    707 #endif /* VBOX_WITH_NETFLT */
    708708}
    709709
     
    711711{
    712712#ifdef VBOX_WITH_NETFLT
    713     UINT r;
    714     INetCfg *pnc;
    715 
    716     inintWinNetCfgLogger(hModule);
     713    UINT uErr;
     714    INetCfg *pNetCfg;
     715
     716    netCfgLoggerEnable(hModule);
    717717
    718718    BOOL bOldIntMode = SetupSetNonInteractiveMode(FALSE);
     
    721721    {
    722722
    723         LogString(hModule, TEXT("Installing NetFlt"));
    724 
    725         r = doNetCfgInit(hModule, &pnc, TRUE);
    726         Assert(r == ERROR_SUCCESS);
    727         if(r == ERROR_SUCCESS)
     723        LogStringW(hModule, TEXT("Installing NetFlt"));
     724
     725        uErr = doNetCfgInit(hModule, &pNetCfg, TRUE);
     726        if (uErr == ERROR_SUCCESS)
    728727        {
    729728            WCHAR PtInf[MAX_PATH];
     
    732731            LPWSTR aInfs[] = {PtInf, MpInf};
    733732            UINT cInfs = 2;
    734 
    735             r = vboxNetFltQueryInfArray(hModule, aInfs, &cInfs, sz);
    736             Assert(r == ERROR_SUCCESS);
    737             Assert(cInfs == 2);
    738             if(r == ERROR_SUCCESS)
     733            uErr = vboxNetFltQueryInfArray(hModule, aInfs, &cInfs, sz);
     734            if (uErr == ERROR_SUCCESS)
    739735            {
    740     //            HRESULT hr = VBoxNetCfgWinInstallSpecifiedComponent (
    741     //                                                        pnc,
    742     //                                                        (LPCWSTR*)aInfs,
    743     //                                                        cInfs,
    744     //                                                        NETFLT_ID,
    745     //                                                        &GUID_DEVCLASS_NETSERVICE,
    746     //                                                        true);
    747                 HRESULT hr = VBoxNetCfgWinNetFltInstall(pnc, (LPCWSTR*)aInfs, cInfs);
    748                 Assert(hr == S_OK);
    749                 if(hr != S_OK)
    750                 {
    751                     LogString(hModule, TEXT("InstallNetFlt: VBoxNetCfgWinInstallSpecifiedComponent failed, hr (0x%x)"), hr);
    752                 }
    753 
    754                 r = Hresult2Error(hModule, hr);
     736                HRESULT hr = VBoxNetCfgWinNetFltInstall(pNetCfg, (LPCWSTR*)aInfs, cInfs);
     737                if (FAILED(hr))
     738                    LogStringW(hModule, TEXT("InstallNetFlt: VBoxNetCfgWinNetFltInstall failed, error = 0x%x"), hr);
     739
     740                uErr = ErrorConvertFromHResult(hModule, hr);
    755741            }
    756742            else
    757             {
    758                 LogString(hModule, TEXT("InstallNetFlt: vboxNetFltQueryInfArray failed, r (0x%x)"), r);
    759             }
    760 
    761             VBoxNetCfgWinReleaseINetCfg(pnc, TRUE);
    762 
    763             /* Never fail the uninstall */
    764             r = ERROR_SUCCESS;
     743                LogStringW(hModule, TEXT("InstallNetFlt: vboxNetFltQueryInfArray failed, error = 0x%x"), uErr);
     744
     745            VBoxNetCfgWinReleaseINetCfg(pNetCfg, TRUE);
     746
     747            LogStringW(hModule, TEXT("Installing NetFlt done"));
    765748        }
    766749        else
    767         {
    768             LogString(hModule, TEXT("InstallNetFlt: doNetCfgInit failed, r (0x%x)"), r);
    769         }
    770 
    771         LogString(hModule, TEXT("Installing NetFlt done, r (0x%x)"), r);
     750            LogStringW(hModule, TEXT("InstallNetFlt: doNetCfgInit failed, error = 0x%x"), uErr);
    772751    }
    773752    __finally
    774753    {
    775         if(bOldIntMode)
    776         {
    777             /* the prev mode != FALSE, i.e. non-interactive */
     754        if (bOldIntMode)
     755        {
     756            /* The prev mode != FALSE, i.e. non-interactive. */
    778757            SetupSetNonInteractiveMode(bOldIntMode);
    779758        }
    780         finiWinNetCfgLogger();
    781     }
    782 
     759        netCfgLoggerDisable();
     760    }
     761#endif /* VBOX_WITH_NETFLT */
     762
     763    /* Never fail the install even if we did not succeed. */
    783764    return ERROR_SUCCESS;
    784 #else /* not defined VBOX_WITH_NETFLT */
    785     return ERROR_SUCCESS;
    786 #endif /* VBOX_WITH_NETFLT */
    787765}
    788766
     
    793771    DWORD winEr;
    794772
    795     if(SetupDiGetDeviceRegistryPropertyW(hDevInfo, pDev,
     773    if (SetupDiGetDeviceRegistryPropertyW(hDevInfo, pDev,
    796774            SPDRP_FRIENDLYNAME , /* IN DWORD  Property,*/
    797775              NULL, /*OUT PDWORD  PropertyRegDataType,  OPTIONAL*/
     
    820798            );
    821799            Assert(winEr == ERROR_SUCCESS);
    822             if(winEr == ERROR_SUCCESS)
     800            if (winEr == ERROR_SUCCESS)
    823801            {
    824802                WCHAR ConnectoinName[128];
     
    827805                HRESULT hr = VBoxNetCfgWinGenHostonlyConnectionName (DevName, ConnectoinName, &cbName);
    828806                Assert(hr == S_OK);
    829                 if(hr == S_OK)
     807                if (SUCCEEDED(hr))
    830808                {
    831809                    hr = VBoxNetCfgWinRenameConnection (guid, ConnectoinName);
     
    848826{
    849827#ifdef VBOX_WITH_NETFLT
    850     inintWinNetCfgLogger(hModule);
    851 
    852     BOOL bPrevMode = SetupSetNonInteractiveMode(FALSE);
     828    netCfgLoggerEnable(hModule);
     829
     830    BOOL bSetupModeInteractive = SetupSetNonInteractiveMode(FALSE);
    853831    bool bSetStaticIp = true;
    854832
    855     LogString(hModule, TEXT("Creating Host-Only Interface"));
     833    LogStringW(hModule, TEXT("Creating host-only interface"));
    856834
    857835    HRESULT hr = VBoxNetCfgWinRemoveAllNetDevicesOfId(NETADP_ID);
    858     Assert(hr == S_OK);
    859     if(hr != S_OK)
    860     {
    861         LogString(hModule, TEXT("CreateHostOnlyInterface: VBoxNetCfgWinRemoveAllNetDevicesOfId failed, hr (0x%x)"), hr);
     836    if (FAILED(hr))
     837    {
     838        LogStringW(hModule, TEXT("CreateHostOnlyInterface: VBoxNetCfgWinRemoveAllNetDevicesOfId failed, error = 0x%x"), hr);
    862839        bSetStaticIp = false;
    863840    }
     
    868845    LPCWSTR pInfPath = NULL;
    869846    bool bIsFile = false;
    870     UINT r = MsiGetPropertyW(hModule, L"CustomActionData", MpInf, &cSize);
    871     Assert(r == ERROR_SUCCESS);
    872     if(r == ERROR_SUCCESS)
    873     {
    874         LogString(hModule, TEXT("NetAdpDir property: (%s)"), MpInf);
    875         if(cSize)
    876         {
    877             if(MpInf[cSize-1] != L'\\')
     847    UINT uErr = MsiGetPropertyW(hModule, L"CustomActionData", MpInf, &cSize);
     848    if (uErr == ERROR_SUCCESS)
     849    {
     850        if (cSize)
     851        {
     852            LogStringW(hModule, TEXT("CreateHostOnlyInterface: NetAdpDir property = %s"), MpInf);
     853            if (MpInf[cSize-1] != L'\\')
    878854            {
    879855                MpInf[cSize] = L'\\';
     
    881857                MpInf[cSize] = L'\0';
    882858            }
    883 //          wcscat(MpInf, L"VBoxNetFlt.inf");
     859
     860            /** @todo r=andy Avoid wcscat, can cause buffer overruns! */
    884861            wcscat(MpInf, L"drivers\\network\\netadp\\VBoxNetAdp.inf");
    885862            pInfPath = MpInf;
    886863            bIsFile = true;
    887             LogString(hModule, TEXT("Resulting inf path is: (%s)"), pInfPath);
     864
     865            LogStringW(hModule, TEXT("CreateHostOnlyInterface: Resulting INF path = %s"), pInfPath);
    888866        }
    889867        else
    890         {
    891             LogString(hModule, TEXT("CreateHostOnlyInterface: NetAdpDir property value is empty"));
    892         }
     868            LogStringW(hModule, TEXT("CreateHostOnlyInterface: NetAdpDir property value is empty"));
    893869    }
    894870    else
    895     {
    896         LogString(hModule, TEXT("CreateHostOnlyInterface: failed to get NetAdpDir property, r(%d)"), r);
    897     }
    898 
    899     /* make sure the inf file is installed */
    900     if(!!pInfPath && bIsFile)
    901     {
    902         HRESULT tmpHr = VBoxDrvCfgInfInstall(pInfPath);
    903         Assert(tmpHr == S_OK);
    904     }
    905 
    906     hr = VBoxNetCfgWinCreateHostOnlyNetworkInterface (pInfPath, bIsFile, &guid, NULL, NULL);
    907     Assert(hr == S_OK);
    908     if(hr == S_OK)
    909     {
    910         ULONG ip = inet_addr("192.168.56.1");
    911         ULONG mask = inet_addr("255.255.255.0");
    912 
    913         hr = VBoxNetCfgWinEnableStaticIpConfig(&guid, ip, mask);
    914         Assert(hr == S_OK);
    915         if(hr != S_OK)
    916         {
    917             LogString(hModule, TEXT("CreateHostOnlyInterface: VBoxNetCfgWinEnableStaticIpConfig failed, hr (0x%x)"), hr);
     871        LogStringW(hModule, TEXT("CreateHostOnlyInterface: Failed to get NetAdpDir property, error = 0x%x"), uErr);
     872
     873    /* Make sure the inf file is installed. */
     874    if (!!pInfPath && bIsFile)
     875    {
     876        hr = VBoxDrvCfgInfInstall(pInfPath);
     877        if (FAILED(hr))
     878            LogStringW(hModule, TEXT("CreateHostOnlyInterface: Failed to install INF file, error = 0x%x"), hr);
     879    }
     880
     881    if (SUCCEEDED(hr))
     882    {
     883        hr = VBoxNetCfgWinCreateHostOnlyNetworkInterface(pInfPath, bIsFile, &guid, NULL, NULL);
     884        if (SUCCEEDED(hr))
     885        {
     886            ULONG ip = inet_addr("192.168.56.1");
     887            ULONG mask = inet_addr("255.255.255.0");
     888            hr = VBoxNetCfgWinEnableStaticIpConfig(&guid, ip, mask);
     889            if (FAILED(hr))
     890                LogStringW(hModule, TEXT("CreateHostOnlyInterface: VBoxNetCfgWinEnableStaticIpConfig failed, error = 0x%x"), hr);
     891        }
     892        else
     893            LogStringW(hModule, TEXT("CreateHostOnlyInterface: VBoxNetCfgWinCreateHostOnlyNetworkInterface failed, error = 0x%x"), hr);
     894    }
     895
     896    if (SUCCEEDED(hr))
     897        LogStringW(hModule, TEXT("Creating host-only interface done"));
     898
     899    /* Restore original setup mode. */
     900    if (bSetupModeInteractive)
     901        SetupSetNonInteractiveMode(bSetupModeInteractive);
     902
     903    netCfgLoggerDisable();
     904
     905#endif /* VBOX_WITH_NETFLT */
     906
     907    /* Never fail the install even if we did not succeed. */
     908    return ERROR_SUCCESS;
     909}
     910
     911UINT __stdcall RemoveHostOnlyInterfaces(MSIHANDLE hModule)
     912{
     913#ifdef VBOX_WITH_NETFLT
     914    netCfgLoggerEnable(hModule);
     915
     916    LogStringW(hModule, TEXT("RemoveHostOnlyInterfaces: Removing All Host-Only Interface"));
     917
     918    BOOL bSetupModeInteractive = SetupSetNonInteractiveMode(FALSE);
     919
     920    HRESULT hr = VBoxNetCfgWinRemoveAllNetDevicesOfId(NETADP_ID);
     921    if (SUCCEEDED(hr))
     922    {
     923        hr = VBoxDrvCfgInfUninstallAllSetupDi(&GUID_DEVCLASS_NET, NETADP_ID, L"Net", 0/* could be SUOI_FORCEDELETE */);
     924        if (FAILED(hr))
     925        {
     926            LogStringW(hModule, TEXT("RemoveHostOnlyInterfaces: NetAdp uninstalled successfully, but failed to remove infs\n"));
    918927        }
    919928    }
    920929    else
    921     {
    922         LogString(hModule, TEXT("CreateHostOnlyInterface: VBoxNetCfgWinCreateHostOnlyNetworkInterface failed, hr (0x%x)"), hr);
    923     }
    924 
    925     if(bPrevMode)
    926     {
    927         /* the prev mode != FALSE, i.e. non-interactive */
    928         SetupSetNonInteractiveMode(bPrevMode);
    929     }
    930 
    931     finiWinNetCfgLogger();
    932 
    933     /* never fail the install even if we are not succeeded */
     930        LogStringW(hModule, TEXT("RemoveHostOnlyInterfaces: NetAdp uninstall failed, hr = 0x%x\n"), hr);
     931
     932    /* Restore original setup mode. */
     933    if (bSetupModeInteractive)
     934        SetupSetNonInteractiveMode(bSetupModeInteractive);
     935
     936    netCfgLoggerDisable();
     937#endif /* VBOX_WITH_NETFLT */
     938
     939    /* Never fail the install even if we did not succeed. */
    934940    return ERROR_SUCCESS;
    935 #else /* not defined VBOX_WITH_NETFLT */
    936     return ERROR_SUCCESS;
    937 #endif /* VBOX_WITH_NETFLT */
    938 }
    939 
    940 UINT __stdcall RemoveHostOnlyInterfaces(MSIHANDLE hModule)
    941 {
    942 #ifdef VBOX_WITH_NETFLT
    943     inintWinNetCfgLogger(hModule);
    944 
    945     LogString(hModule, TEXT("Removing All Host-Only Interface"));
    946 
    947     BOOL bPrevMode = SetupSetNonInteractiveMode(FALSE);
    948 
    949     HRESULT hr = VBoxNetCfgWinRemoveAllNetDevicesOfId(NETADP_ID);
    950     if(hr == S_OK)
    951     {
    952         hr = VBoxDrvCfgInfUninstallAllSetupDi(&GUID_DEVCLASS_NET, NETADP_ID, L"Net", 0/* could be SUOI_FORCEDELETE */);
    953         if(hr != S_OK)
    954         {
    955             LogString(hModule, TEXT("NetAdp uninstalled successfully, but failed to remove infs\n"));
    956         }
    957     }
    958     else
    959     {
    960         LogString(hModule, TEXT("NetAdp uninstall failed, hr = 0x%x\n"), hr);
    961     }
    962 
    963     if(bPrevMode)
    964     {
    965         /* the prev mode != FALSE, i.e. non-interactive */
    966         SetupSetNonInteractiveMode(bPrevMode);
    967     }
    968 
    969     finiWinNetCfgLogger();
    970 
    971     return ERROR_SUCCESS;
    972 #else /* not defined VBOX_WITH_NETFLT */
    973     return ERROR_SUCCESS;
    974 #endif /* VBOX_WITH_NETFLT */
    975 }
    976 
    977 static bool IsTAPDevice (const TCHAR *a_pcGUID)
     941}
     942
     943static bool IsTAPDevice(const TCHAR *pcGUID)
    978944{
    979945    HKEY hNetcard;
    980     LONG status;
    981     DWORD len;
     946    bool bIsTapDevice = false;
     947    LONG lStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
     948                                TEXT("SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}"),
     949                                0, KEY_READ, &hNetcard);
     950    if (lStatus != ERROR_SUCCESS)
     951        return false;
     952
    982953    int i = 0;
    983     bool ret = false;
    984 
    985     status = RegOpenKeyEx (HKEY_LOCAL_MACHINE,
    986         TEXT("SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}"),
    987         0, KEY_READ, &hNetcard);
    988 
    989     if (status != ERROR_SUCCESS)
    990         return false;
    991 
    992     while(true)
     954    while (true)
    993955    {
    994956        TCHAR szEnumName[256];
     
    997959        HKEY  hNetCardGUID;
    998960
    999         len = sizeof(szEnumName);
    1000         status = RegEnumKeyEx (hNetcard, i, szEnumName, &len, NULL, NULL, NULL, NULL);
    1001         if (status != ERROR_SUCCESS)
     961        DWORD dwLen = sizeof(szEnumName);
     962        lStatus = RegEnumKeyEx(hNetcard, i, szEnumName, &dwLen, NULL, NULL, NULL, NULL);
     963        if (lStatus != ERROR_SUCCESS)
    1002964            break;
    1003965
    1004         status = RegOpenKeyEx (hNetcard, szEnumName, 0, KEY_READ, &hNetCardGUID);
    1005         if (status == ERROR_SUCCESS)
    1006         {
    1007             len = sizeof (szNetCfgInstanceId);
    1008             status = RegQueryValueEx (hNetCardGUID, TEXT("NetCfgInstanceId"), NULL, &dwKeyType, (LPBYTE)szNetCfgInstanceId, &len);
    1009             if (status == ERROR_SUCCESS && dwKeyType == REG_SZ)
     966        lStatus = RegOpenKeyEx(hNetcard, szEnumName, 0, KEY_READ, &hNetCardGUID);
     967        if (lStatus == ERROR_SUCCESS)
     968        {
     969            dwLen = sizeof(szNetCfgInstanceId);
     970            lStatus = RegQueryValueEx(hNetCardGUID, TEXT("NetCfgInstanceId"), NULL, &dwKeyType, (LPBYTE)szNetCfgInstanceId, &dwLen);
     971            if (   lStatus == ERROR_SUCCESS
     972                && dwKeyType == REG_SZ)
    1010973            {
    1011974                TCHAR szNetProductName[256];
     
    1013976
    1014977                szNetProductName[0] = 0;
    1015                 len = sizeof(szNetProductName);
    1016                 status = RegQueryValueEx (hNetCardGUID, TEXT("ProductName"), NULL, &dwKeyType, (LPBYTE)szNetProductName, &len);
     978                dwLen = sizeof(szNetProductName);
     979                lStatus = RegQueryValueEx(hNetCardGUID, TEXT("ProductName"), NULL, &dwKeyType, (LPBYTE)szNetProductName, &dwLen);
    1017980
    1018981                szNetProviderName[0] = 0;
    1019                 len = sizeof(szNetProviderName);
    1020                 status = RegQueryValueEx (hNetCardGUID, TEXT("ProviderName"), NULL, &dwKeyType, (LPBYTE)szNetProviderName, &len);
    1021 
    1022                 if (   !wcscmp(szNetCfgInstanceId, a_pcGUID)
     982                dwLen = sizeof(szNetProviderName);
     983                lStatus = RegQueryValueEx(hNetCardGUID, TEXT("ProviderName"), NULL, &dwKeyType, (LPBYTE)szNetProviderName, &dwLen);
     984
     985                if (   !wcscmp(szNetCfgInstanceId, pcGUID)
    1023986                    && !wcscmp(szNetProductName, TEXT("VirtualBox TAP Adapter"))
    1024987                    && (   (!wcscmp(szNetProviderName, TEXT("innotek GmbH"))) /* Legacy stuff. */
     
    1028991                   )
    1029992                {
    1030                     ret = true;
     993                    bIsTapDevice = true;
    1031994                    RegCloseKey(hNetCardGUID);
    1032995                    break;
     
    10391002
    10401003    RegCloseKey (hNetcard);
    1041     return ret;
     1004    return bIsTapDevice;
    10421005}
    10431006
     
    10471010    if (1) { \
    10481011        rc = 0; \
    1049         LogString (a_hModule, strAndArgs); \
     1012        LogStringW(hModule, strAndArgs); \
    10501013        break; \
    10511014    } else do {} while (0)
    10521015
    1053 int removeNetworkInterface (MSIHANDLE a_hModule, const TCHAR* pcGUID)
     1016int removeNetworkInterface(MSIHANDLE hModule, const TCHAR* pcGUID)
    10541017{
    10551018    int rc = 1;
     
    10701033                      TEXT("{4D36E972-E325-11CE-BFC1-08002BE10318}\\%s"),
    10711034                      pcGUID);
    1072             LONG status;
    1073             status = RegOpenKeyEx (HKEY_LOCAL_MACHINE, strRegLocation, 0,
     1035            LONG lStatus;
     1036            lStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE, strRegLocation, 0,
    10741037                                   KEY_READ, &hkeyNetwork);
    1075             if ((status != ERROR_SUCCESS) || !hkeyNetwork)
    1076                 SetErrBreak ((TEXT("VBox HostInterfaces: Host interface network was not found in registry (%s)! [1]"), strRegLocation));
    1077 
    1078             status = RegOpenKeyExA (hkeyNetwork, "Connection", 0,
     1038            if ((lStatus != ERROR_SUCCESS) || !hkeyNetwork)
     1039                SetErrBreak((TEXT("VBox HostInterfaces: Host interface network was not found in registry (%s)! [1]"), strRegLocation));
     1040
     1041            lStatus = RegOpenKeyExA(hkeyNetwork, "Connection", 0,
    10791042                                    KEY_READ, &hkeyConnection);
    1080             if ((status != ERROR_SUCCESS) || !hkeyConnection)
    1081                 SetErrBreak ((TEXT("VBox HostInterfaces: Host interface network was not found in registry (%s)! [2]"), strRegLocation));
     1043            if ((lStatus != ERROR_SUCCESS) || !hkeyConnection)
     1044                SetErrBreak((TEXT("VBox HostInterfaces: Host interface network was not found in registry (%s)! [2]"), strRegLocation));
    10821045
    10831046            DWORD len = sizeof (lszPnPInstanceId);
    10841047            DWORD dwKeyType;
    1085             status = RegQueryValueExW (hkeyConnection, L"PnPInstanceID", NULL,
     1048            lStatus = RegQueryValueExW(hkeyConnection, L"PnPInstanceID", NULL,
    10861049                                       &dwKeyType, (LPBYTE) lszPnPInstanceId, &len);
    1087             if ((status != ERROR_SUCCESS) || (dwKeyType != REG_SZ))
    1088                 SetErrBreak ((TEXT("VBox HostInterfaces: Host interface network was not found in registry (%s)! [3]"), strRegLocation));
     1050            if ((lStatus != ERROR_SUCCESS) || (dwKeyType != REG_SZ))
     1051                SetErrBreak((TEXT("VBox HostInterfaces: Host interface network was not found in registry (%s)! [3]"), strRegLocation));
    10891052        }
    10901053        while (0);
    10911054
    10921055        if (hkeyConnection)
    1093             RegCloseKey (hkeyConnection);
     1056            RegCloseKey(hkeyConnection);
    10941057        if (hkeyNetwork)
    1095             RegCloseKey (hkeyNetwork);
     1058            RegCloseKey(hkeyNetwork);
    10961059
    10971060        /*
     
    11011064
    11021065        HDEVINFO hDeviceInfo = INVALID_HANDLE_VALUE;
     1066        BOOL fResult;
    11031067
    11041068        do
    11051069        {
    1106             BOOL ok;
    11071070            DWORD ret = 0;
    11081071            GUID netGuid;
    11091072            SP_DEVINFO_DATA DeviceInfoData;
    11101073            DWORD index = 0;
    1111             BOOL found = FALSE;
    11121074            DWORD size = 0;
    11131075
    11141076            /* initialize the structure size */
    1115             DeviceInfoData.cbSize = sizeof (SP_DEVINFO_DATA);
     1077            DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
    11161078
    11171079            /* copy the net class GUID */
    1118             memcpy (&netGuid, &GUID_DEVCLASS_NET, sizeof (GUID_DEVCLASS_NET));
     1080            memcpy(&netGuid, &GUID_DEVCLASS_NET, sizeof (GUID_DEVCLASS_NET));
    11191081
    11201082            /* return a device info set contains all installed devices of the Net class */
    1121             hDeviceInfo = SetupDiGetClassDevs (&netGuid, NULL, NULL, DIGCF_PRESENT);
    1122 
     1083            hDeviceInfo = SetupDiGetClassDevs(&netGuid, NULL, NULL, DIGCF_PRESENT);
    11231084            if (hDeviceInfo == INVALID_HANDLE_VALUE)
    11241085            {
    1125                 LogString (a_hModule, TEXT("VBox HostInterfaces: SetupDiGetClassDevs failed (0x%08X)!"), GetLastError());
    1126                 SetErrBreak (TEXT("VBox HostInterfaces: Uninstallation failed!"));
     1086                LogStringW(hModule, TEXT("VBox HostInterfaces: SetupDiGetClassDevs failed (0x%08X)!"), GetLastError());
     1087                SetErrBreak(TEXT("VBox HostInterfaces: Uninstallation failed!"));
    11271088            }
     1089
     1090            BOOL fFoundDevice = FALSE;
    11281091
    11291092            /* enumerate the driver info list */
    11301093            while (TRUE)
    11311094            {
    1132                 TCHAR *deviceHwid;
    1133 
    1134                 ok = SetupDiEnumDeviceInfo (hDeviceInfo, index, &DeviceInfoData);
    1135 
    1136                 if (!ok)
     1095                TCHAR *pszDeviceHwid;
     1096
     1097                fResult = SetupDiEnumDeviceInfo(hDeviceInfo, index, &DeviceInfoData);
     1098                if (!fResult)
    11371099                {
    11381100                    if (GetLastError() == ERROR_NO_MORE_ITEMS)
     
    11461108
    11471109                /* try to get the hardware ID registry property */
    1148                 ok = SetupDiGetDeviceRegistryProperty (hDeviceInfo,
    1149                                                        &DeviceInfoData,
    1150                                                        SPDRP_HARDWAREID,
    1151                                                        NULL,
    1152                                                        NULL,
    1153                                                        0,
    1154                                                        &size);
    1155                 if (!ok)
     1110                fResult = SetupDiGetDeviceRegistryProperty(hDeviceInfo,
     1111                                                           &DeviceInfoData,
     1112                                                           SPDRP_HARDWAREID,
     1113                                                           NULL,
     1114                                                           NULL,
     1115                                                           0,
     1116                                                           &size);
     1117                if (!fResult)
    11561118                {
    11571119                    if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
     
    11611123                    }
    11621124
    1163                     deviceHwid = (TCHAR *) malloc (size);
    1164                     ok = SetupDiGetDeviceRegistryProperty (hDeviceInfo,
    1165                                                            &DeviceInfoData,
    1166                                                            SPDRP_HARDWAREID,
    1167                                                            NULL,
    1168                                                            (PBYTE)deviceHwid,
    1169                                                            size,
    1170                                                            NULL);
    1171                     if (!ok)
     1125                    pszDeviceHwid = (TCHAR *)malloc(size);
     1126                    if (pszDeviceHwid)
    11721127                    {
    1173                         free (deviceHwid);
    1174                         deviceHwid = NULL;
    1175                         index++;
    1176                         continue;
     1128                        fResult = SetupDiGetDeviceRegistryProperty(hDeviceInfo,
     1129                                                                   &DeviceInfoData,
     1130                                                                   SPDRP_HARDWAREID,
     1131                                                                   NULL,
     1132                                                                   (PBYTE)pszDeviceHwid,
     1133                                                                   size,
     1134                                                                   NULL);
     1135                        if (!fResult)
     1136                        {
     1137                            free(pszDeviceHwid);
     1138                            pszDeviceHwid = NULL;
     1139                            index++;
     1140                            continue;
     1141                        }
    11771142                    }
    11781143                }
     
    11841149                }
    11851150
    1186                 for (TCHAR *t = deviceHwid;
    1187                      t && *t && t < &deviceHwid[size / sizeof(TCHAR)];
     1151                for (TCHAR *t = pszDeviceHwid;
     1152                     t && *t && t < &pszDeviceHwid[size / sizeof(TCHAR)];
    11881153                     t += _tcslen (t) + 1)
    11891154                {
    1190                     if (!_tcsicmp (VBOX_TAP_HWID, t))
     1155                    if (!_tcsicmp(VBOX_TAP_HWID, t))
    11911156                    {
    11921157                          /* get the device instance ID */
     
    11961161                          {
    11971162                              /* compare to what we determined before */
    1198                               if (wcscmp(devID, lszPnPInstanceId) == 0)
     1163                              if (!wcscmp(devID, lszPnPInstanceId))
    11991164                              {
    1200                                   found = TRUE;
     1165                                  fFoundDevice = TRUE;
    12011166                                  break;
    12021167                              }
     
    12051170                }
    12061171
    1207                 if (deviceHwid)
     1172                if (pszDeviceHwid)
    12081173                {
    1209                     free (deviceHwid);
    1210                     deviceHwid = NULL;
     1174                    free(pszDeviceHwid);
     1175                    pszDeviceHwid = NULL;
    12111176                }
    12121177
    1213                 if (found)
     1178                if (fFoundDevice)
    12141179                    break;
    12151180
     
    12171182            }
    12181183
    1219             if (found == FALSE)
    1220                 SetErrBreak (TEXT("VBox HostInterfaces: Host Interface Network driver not found!"));
    1221 
    1222             ok = SetupDiSetSelectedDevice (hDeviceInfo, &DeviceInfoData);
    1223             if (!ok)
     1184            if (fFoundDevice)
    12241185            {
    1225                 LogString (a_hModule, TEXT("VBox HostInterfaces: SetupDiSetSelectedDevice failed (0x%08X)!"), GetLastError());
    1226                 SetErrBreak (TEXT("VBox HostInterfaces: Uninstallation failed!"));
     1186                fResult = SetupDiSetSelectedDevice(hDeviceInfo, &DeviceInfoData);
     1187                if (!fResult)
     1188                {
     1189                    LogStringW(hModule, TEXT("VBox HostInterfaces: SetupDiSetSelectedDevice failed (0x%08X)!"), GetLastError());
     1190                    SetErrBreak(TEXT("VBox HostInterfaces: Uninstallation failed!"));
     1191                }
     1192
     1193                fResult = SetupDiCallClassInstaller(DIF_REMOVE, hDeviceInfo, &DeviceInfoData);
     1194                if (!fResult)
     1195                {
     1196                    LogStringW(hModule, TEXT("VBox HostInterfaces: SetupDiCallClassInstaller (DIF_REMOVE) failed (0x%08X)!"), GetLastError());
     1197                    SetErrBreak(TEXT("VBox HostInterfaces: Uninstallation failed!"));
     1198                }
    12271199            }
    1228 
    1229             ok = SetupDiCallClassInstaller (DIF_REMOVE, hDeviceInfo, &DeviceInfoData);
    1230             if (!ok)
    1231             {
    1232                 LogString (a_hModule, TEXT("VBox HostInterfaces: SetupDiCallClassInstaller (DIF_REMOVE) failed (0x%08X)!"), GetLastError());
    1233                 SetErrBreak (TEXT("VBox HostInterfaces: Uninstallation failed!"));
    1234             }
     1200            else
     1201                SetErrBreak(TEXT("VBox HostInterfaces: Host interface network device not found!"));
    12351202        }
    12361203        while (0);
     
    12381205        /* clean up the device info set */
    12391206        if (hDeviceInfo != INVALID_HANDLE_VALUE)
    1240             SetupDiDestroyDeviceInfoList (hDeviceInfo);
     1207            SetupDiDestroyDeviceInfoList(hDeviceInfo);
    12411208    }
    12421209    while (0);
     
    12441211}
    12451212
    1246 UINT __stdcall UninstallTAPInstances (MSIHANDLE a_hModule)
     1213UINT __stdcall UninstallTAPInstances(MSIHANDLE hModule)
    12471214{
    12481215    static const TCHAR *NetworkKey = TEXT("SYSTEM\\CurrentControlSet\\Control\\Network\\")
    12491216                                     TEXT("{4D36E972-E325-11CE-BFC1-08002BE10318}");
    12501217    HKEY hCtrlNet;
    1251     LONG status = 0;
    1252     DWORD len = 0;
    1253     LONG cnt = 0;
    1254 
    1255     status = RegOpenKeyEx (HKEY_LOCAL_MACHINE, NetworkKey, 0, KEY_READ, &hCtrlNet);
    1256     if (status == ERROR_SUCCESS)
    1257     {
    1258         LogString(a_hModule, TEXT("VBox HostInterfaces: Enumerating interfaces ..."));
     1218
     1219    LONG lStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE, NetworkKey, 0, KEY_READ, &hCtrlNet);
     1220    if (lStatus == ERROR_SUCCESS)
     1221    {
     1222        LogStringW(hModule, TEXT("VBox HostInterfaces: Enumerating interfaces ..."));
    12591223        for (int i = 0;; ++ i)
    12601224        {
     
    12621226            TCHAR szNetworkConnection [256] = { 0 };
    12631227
    1264             len = sizeof (szNetworkGUID);
    1265             status = RegEnumKeyEx (hCtrlNet, i, szNetworkGUID, &len, NULL, NULL, NULL, NULL);
    1266             if (status != ERROR_SUCCESS)
     1228            DWORD dwLen = (DWORD)sizeof(szNetworkGUID);
     1229            lStatus = RegEnumKeyEx(hCtrlNet, i, szNetworkGUID, &dwLen, NULL, NULL, NULL, NULL);
     1230            if (lStatus != ERROR_SUCCESS)
    12671231            {
    1268                 switch (status)
     1232                switch (lStatus)
    12691233                {
    12701234                case ERROR_NO_MORE_ITEMS:
    1271                     LogString(a_hModule, TEXT("VBox HostInterfaces: No interfaces found."));
     1235                    LogStringW(hModule, TEXT("VBox HostInterfaces: No interfaces found."));
    12721236                    break;
    12731237                default:
    1274                     LogString(a_hModule, TEXT("VBox HostInterfaces: Enumeration failed: %ld"), status);
     1238                    LogStringW(hModule, TEXT("VBox HostInterfaces: Enumeration failed: %ld"), lStatus);
    12751239                    break;
    12761240                };
     
    12801244            if (IsTAPDevice(szNetworkGUID))
    12811245            {
    1282                 LogString(a_hModule, TEXT("VBox HostInterfaces: Removing interface \"%s\" ..."), szNetworkGUID);
    1283                 removeNetworkInterface (a_hModule, szNetworkGUID);
    1284                 status = RegDeleteKey (hCtrlNet, szNetworkGUID);
     1246                LogStringW(hModule, TEXT("VBox HostInterfaces: Removing interface \"%s\" ..."), szNetworkGUID);
     1247                removeNetworkInterface (hModule, szNetworkGUID);
     1248                lStatus = RegDeleteKey (hCtrlNet, szNetworkGUID);
    12851249            }
    12861250        }
    12871251        RegCloseKey (hCtrlNet);
    1288         LogString(a_hModule, TEXT("VBox HostInterfaces: Removing interfaces done."));
     1252        LogStringW(hModule, TEXT("VBox HostInterfaces: Removing interfaces done."));
    12891253    }
    12901254    return ERROR_SUCCESS;
  • trunk/src/VBox/Installer/win/Languages/de_DE.wxl

    r32394 r37289  
    1 <?xml version="1.0" encoding="utf-8"?>
    2 <WixLocalization xmlns="http://schemas.microsoft.com/wix/2003/11/localization" Codepage='1252'>
     1<?xml version="1.0" encoding="utf-8"?>
     2<WixLocalization xmlns="http://schemas.microsoft.com/wix/2003/11/localization" Codepage="1252" Culture="de_DE">
    33
    44    <!--
    55            Language Definition Include for VirtualBox WiX script.
    66
    7             Copyright (C) 2010 Oracle Corporation
     7            Copyright (C) 2011 Oracle Corporation
    88
    99            All rights reserved.
  • trunk/src/VBox/Installer/win/Languages/en_US.wxl

    r32394 r37289  
    11<?xml version="1.0" encoding="utf-8"?>
    2 <WixLocalization xmlns="http://schemas.microsoft.com/wix/2003/11/localization" Codepage='1252'>
     2<WixLocalization xmlns="http://schemas.microsoft.com/wix/2003/11/localization" Codepage="1252" Culture="en_US">
    33
    44    <!--
    55            Language Definition Include for VirtualBox WiX script.
    66
    7             Copyright (C) 2010 Oracle Corporation
     7            Copyright (C) 2011 Oracle Corporation
    88
    99            All rights reserved.
  • trunk/src/VBox/Installer/win/Languages/fr_FR.wxl

    r32394 r37289  
    11<?xml version="1.0" encoding="utf-8"?>
    2 <WixLocalization xmlns="http://schemas.microsoft.com/wix/2003/11/localization" Codepage='1252'>
     2<WixLocalization xmlns="http://schemas.microsoft.com/wix/2003/11/localization" Codepage="1252" Culture="fr_FR">
    33
    44    <!--
  • trunk/src/VBox/Installer/win/Makefile.kmk

    r37016 r37289  
    107107                $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_$(lang).msi) \
    108108        $(VBOX_WIN_INST_OUT_DIR)/Files_Doc.wxi \
    109         $(VBOX_WIN_INST_OUT_DIR)/Files_License.wxi
     109        $(VBOX_WIN_INST_OUT_DIR)/Files_License.wxi \
     110        $(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi
    110111
    111112ifdef VBOX_WITH_COMBINED_PACKAGE
     
    146147endif
    147148
     149#
     150# Surpress/skip the following ICE (internal consistency evaluators):
     151# - ICE64: Checks that new directories in the user profile are removed correctly in roaming scenarios.
     152#          -> We don't want to remove system folders (like "Microsoft/Internet Explorer/Quick Launch").
     153#
     154VBOX_MSI_ICE_IGNORE := \
     155        -ice:64
    148156
    149157#
     
    182190        $$(call MSG_GENERATE,,$$@,$$<)
    183191        $(APPEND) -t $$@ '<?xml version="1.0" encoding="utf-8"?>'
    184         $(APPEND) $$@ '<WixLocalization xmlns="http://schemas.microsoft.com/wix/2003/11/localization" Codepage="1252">'
     192        $(APPEND) $$@ '<WixLocalization xmlns="http://schemas.microsoft.com/wix/2006/localization" Codepage="1252" Culture="$(lang)">'
    185193
    186194        $(REDIRECT) -a+to $$@ -- $(ECHO_EXT) -n '<String Id=\"LicenseText\">'
     
    210218        $(call MSG_GENERATE,,$@,$<)
    211219        $(APPEND) -t $@ '<?xml version="1.0" ?>'
    212         $(APPEND) $@ '<Include>'
     220        $(APPEND) $@ '<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">'
    213221  ifdef VBOX_WITH_DOCS_CHM
    214                 $(APPEND) $@ '  <File Id="VirtualBox.chm" Name="VBox.chm" LongName="VirtualBox.chm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/VirtualBox.chm"></File>'
     222                $(APPEND) $@ '  <File Id="file_VirtualBox.chm" Name="VirtualBox.chm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/VirtualBox.chm"></File>'
    215223                $(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
    216                              '  <File Id="VirtualBox_$(lang).chm" Name="VB_$(lang).chm" LongName="VirtualBox_$(lang).chm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/VirtualBox_$(lang).chm"></File>')
     224                             '  <File Id="file_VirtualBox_$(lang).chm" Name="VirtualBox_$(lang).chm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/VirtualBox_$(lang).chm"></File>')
    217225  endif
    218226        $(APPEND) $@ '</Include>'
     
    221229        $(call MSG_GENERATE,,$@,$<)
    222230        $(APPEND) -t $@ '<?xml version="1.0" ?>'
    223         $(APPEND) $@ '<Include>'
    224         $(APPEND) $@ '  <File Id="UserManual.pdf" Name="Manual.pdf" LongName="UserManual.pdf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/UserManual.pdf">'
    225         $(APPEND) $@ '          <Shortcut Id="startmenuManPDF_en_US" Directory="ProgramMenuDir" Name="M_en_US" LongName="$$(loc.StartMenu_UserManual) (English)" WorkingDirectory="INSTALLDIR"/>'
     231        $(APPEND) $@ '<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">'
     232        $(APPEND) $@ '  <File Id="file_UserManual.pdf" Name="UserManual.pdf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/UserManual.pdf">'
    226233        $(APPEND) $@ '  </File>'
    227234        $(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
    228                      '  <File Id="UserManual_$(lang).pdf" Name="Mn_$(lang).pdf" LongName="UserManual_$(lang).pdf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/UserManual_$(lang).pdf">' \
    229                      '          <Shortcut Id="startmenuManPDF_$(lang)" Directory="ProgramMenuDir" Name="M_$(lang)" LongName="$$(loc.StartMenu_UserManual) ($(VBOX_BRAND_$(lang)_LANG_NAME))" WorkingDirectory="INSTALLDIR"/>' \
     235                     '  <File Id="file_UserManual_$(lang).pdf" Name="UserManual_$(lang).pdf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/UserManual_$(lang).pdf">' \
    230236                     '  </File>')
    231237        $(APPEND) $@ '</Include>'
     
    234240        $(call MSG_GENERATE,,$@,$<)
    235241        $(APPEND) -t $@ '<?xml version="1.0" ?>'
    236         $(APPEND) $@ '<Include>'
    237         $(APPEND) $@ '  <File Id="License_en_US.rtf" Name="Li_en_US.rtf" LongName="License_en_US.rtf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(VBOX_BRAND_LICENSE_RTF)">'
    238         $(APPEND) $@ '          <Shortcut Id="startmenuLicRTF_en_US" Directory="ProgramMenuDir" Name="L_en_US" LongName="$$(loc.StartMenu_License) (English)" WorkingDirectory="INSTALLDIR"/>'
    239         $(APPEND) $@ '  </File>'
     242        $(APPEND) $@ '<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">'
     243        $(APPEND) $@ '  <File Id="file_License_en_US.rtf" Name="License_en_US.rtf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(VBOX_BRAND_LICENSE_RTF)">' \
     244                     '  </File>'
    240245        $(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
    241                      '  <File Id="License_$(lang).rtf" Name="Li_$(lang).rtf" LongName="License_$(lang).rtf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(VBOX_BRAND_$(lang)_LICENSE_RTF)">' \
    242                      '          <Shortcut Id="startmenuLicRTF_$(lang)" Directory="ProgramMenuDir" Name="L_$(lang)" LongName="$$(loc.StartMenu_License) ($(VBOX_BRAND_$(lang)_LANG_NAME))" WorkingDirectory="INSTALLDIR"/>' \
     246                     '  <File Id="file_License_$(lang).rtf" Name="License_$(lang).rtf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(VBOX_BRAND_$(lang)_LICENSE_RTF)"/>' \
    243247                     '  </File>')
    244248        $(APPEND) $@ '</Include>'
    245249
     250$(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi: $(MAKEFILE_CURRENT) | $$(dir $$@)
     251        $(call MSG_GENERATE,,$@,$<)
     252        $(APPEND) -t $@ '<?xml version="1.0" ?>'
     253        $(APPEND) $@ '<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">'
     254        #
     255        # Documentation (PDF/CHM)
     256        #
     257  ifdef VBOX_WITH_DOCS_CHM
     258        $(APPEND) $@ '  <Shortcut Id="sc_StartMenu_ManualCHM_en_US" Directory="dir_StartMenuVBox" Name="!(loc.StartMenu_UserManual) (CHM, English)" Description="!(loc.StartMenu_UserManual)"' \
     259                     '            Target="[INSTALLDIR]VirtualBox.chm" WorkingDirectory="INSTALLDIR" Advertise="no"/>'
     260        $(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
     261                     '  <Shortcut Id="sc_StartMenu_ManualCHM_$(lang)" Directory="dir_StartMenuVBox" Name="$!(loc.StartMenu_UserManual) (CHM, $(VBOX_BRAND_$(lang)_LANG_NAME))"' \
     262                     '            Description="$!(loc.StartMenu_UserManual) ($(VBOX_BRAND_$(lang)_LANG_NAME))" Target="VirtualBox_$(lang).chm" WorkingDirectory="INSTALLDIR"/>')
     263  endif
     264        $(APPEND) $@ '  <Shortcut Id="sc_StartMenu_ManualPDF_en_US" Directory="dir_StartMenuVBox" Name="!(loc.StartMenu_UserManual) (PDF, English)" Description="!(loc.StartMenu_UserManual)"' \
     265                     '            Target="[INSTALLDIR]UserManual.pdf" WorkingDirectory="INSTALLDIR" Advertise="no"/>'
     266        $(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
     267                     '  <Shortcut Id="sc_StartMenu_ManualPDF_$(lang)" Directory="dir_StartMenuVBox" Name="$!(loc.StartMenu_UserManual) (PDF, $(VBOX_BRAND_$(lang)_LANG_NAME))"' \
     268                     '            Description="$!(loc.StartMenu_UserManual) ($(VBOX_BRAND_$(lang)_LANG_NAME))" Target="UserManual_$(lang).pdf" WorkingDirectory="INSTALLDIR"/>')
     269        #
     270        # License(s) (RTF)
     271        #
     272        $(APPEND) $@ '  <Shortcut Id="sc_StartMenu_License_en_US" Directory="dir_StartMenuVBox" Name="!(loc.StartMenu_License) (English)" Description="!(loc.StartMenu_License)"' \
     273                     '            Target="[INSTALLDIR]License_en_US.rtf" WorkingDirectory="INSTALLDIR" Advertise="no"/>'
     274        $(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
     275                     '  <Shortcut Id="sc_StartMenu_License_$(lang)" Directory="dir_StartMenuVBox" Name="$!(loc.StartMenu_License) ($(VBOX_BRAND_$(lang)_LANG_NAME))"' \
     276                     '            Description="$!(loc.StartMenu_License) ($(VBOX_BRAND_$(lang)_LANG_NAME))" Target="License_$(lang).rtf" WorkingDirectory="INSTALLDIR"/>')
     277        $(APPEND) $@ '</Include>'
    246278
    247279#
     
    264296                -loc $(VBOX_WIN_INST_OUT_DIR)/Languages/Language_$(lang).wxl \
    265297                -loc $(VBOX_WIN_INST_OUT_DIR)/Languages/License_$(lang).wxl \
     298                -ext $(VBOX_PATH_WIX)/WixUIExtension.dll \
     299                -ext $(VBOX_PATH_WIX)/WixDifxAppExtension.dll \
     300                $(VBOX_MSI_ICE_IGNORE) \
    266301                -out $$@ \
    267302                $$< \
    268                 $(VBOX_PATH_WIX)/wixca.wixlib \
    269                 $(VBOX_PATH_DIFX)/DIFxApp.wixlib
     303                $(if-expr "$(KBUILD_TARGET_ARCH)" == "x86", \
     304                        $(VBOX_PATH_WIX)/difxapp_x86.wixlib, \
     305                        $(VBOX_PATH_WIX)/difxapp_x64.wixlib)
    270306        $(RM) -f $(VBOX_WIN_INST_OUT_DIR)/Languages/$(lang).mst
    271307        $(call VBOX_SIGN_FILE_FN,$$@)
     
    281317
    282318# Filter out some files depending on build type and compiler.
    283 VBOX_MSI_DEPENDENCIES := $(filter-out wixca.dll, $(VBOX_MSI_DEPENDENCIES))
    284319ifeq ($(KBUILD_TYPE),release)
    285320 VBOX_MSI_DEPENDENCIES := $(filer-out $(PATH_OUT)/bin/VBoxDbg3.dll, $(VBOX_MSI_DEPENDENCIES))
     
    303338        , $(VBOX_MSI_DEPENDENCIES))
    304339endif
     340# TODO: Add filtering out more dependencies here!
     341ifndef VBOX_WITH_QTGUI
     342        $(PATH_OUT)/bin/VirtualBox.exe \
     343        $(PATH_OUT)/bin/VBoxTestOGL.exe \
     344        $(PATH_OUT)/bin/QtCoreVBox4.dll \
     345        $(PATH_OUT)/bin/QtGuiVBox4.dll \
     346        $(PATH_OUT)/bin/QtNetworkVBox4.dll \
     347        $(PATH_OUT)/bin/QtOpenGLVBox4.dll \
     348        $(PATH_OUT)/bin/accessible/qtaccessiblewidgets4.dll \
     349        , $(VBOX_MSI_DEPENDENCIES))
     350endif
     351ifndef VBOX_WITH_PYTHON
     352 VBOX_MSI_DEPENDENCIES := $(filer-out $ \
     353        $(PATH_OUT)/bin/sdk/installer/vboxapisetup.py \
     354        $(PATH_OUT)/bin/sdk/installer/vboxapi/__init__.py \
     355        $(PATH_OUT)/bin/sdk/installer/vboxapi/VirtualBox_constants.py \
     356        , $(VBOX_MSI_DEPENDENCIES))
     357endif
     358ifndef VBOX_WITH_CROGL
     359 VBOX_MSI_DEPENDENCIES := $(filer-out $ \
     360        $(PATH_OUT)/bin/VBoxOGLhostcrutil.dll \
     361        $(PATH_OUT)/bin/VBoxOGLhosterrorspu.dll \
     362        $(PATH_OUT)/bin/VBoxOGLrenderspu.dll \
     363        $(PATH_OUT)/bin/VBoxSharedCrOpenGL.dll \
     364        , $(VBOX_MSI_DEPENDENCIES))
     365endif
     366ifndef VBOX_WITH_SECURELABEL
     367 VBOX_MSI_DEPENDENCIES := $(filer-out $(PATH_OUT)/bin/SDL_ttf.dll, $(VBOX_MSI_DEPENDENCIES))
     368endif
     369ifndef VBOX_WITH_WEBSERVICES
     370 VBOX_MSI_DEPENDENCIES := $(filer-out $(PATH_OUT)/bin/vboxwebsrv.exe, $(VBOX_MSI_DEPENDENCIES))
     371endif
     372
    305373ifneq ($(KBUILD_TARGET_ARCH),amd64)
    306374 VBOX_MSI_DEPENDENCIES := $(filter-out \
     
    384452                -E 'VBOX_USE_VCC80=$(if $(VBOX_USE_VCC80),yes,no)' \
    385453                -- \
    386                 $(VBOX_PATH_WIX)/candle.exe $(filter-out $(VBOX_VERSION_STAMP),$$<) -out $$@
     454                $(VBOX_PATH_WIX)/candle.exe $(filter-out $(VBOX_VERSION_STAMP),$$<) \
     455                        -ext $(VBOX_PATH_WIX)/WixUIExtension.dll \
     456                        -ext $(VBOX_PATH_WIX)/WixDifxAppExtension.dll \
     457                        -out $$@
    387458ifeq ($(lang),en_US)
    388459#
     
    420491        $(APPEND) $@ '<Include>'
    421492        $(APPEND) -n $@ $(foreach lang,$(VBOX_APPROVED_GUI_LANGUAGES), \
    422                      '  <File Id="nlsqt${lang}"  Name="qt_${lang}.qm" LongName="qt_${lang}.qm"         DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" src="$$(env.PATH_OUT)\bin\nls\qt_${lang}.qm"         />' \
    423                      '  <File Id="nlsgui${lang}" Name="vb_${lang}.qm" LongName="VirtualBox_${lang}.qm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" src="$$(env.PATH_OUT)\bin\nls\VirtualBox_${lang}.qm" />')
     493                     '  <File Id="nlsqt${lang}"  Name="qt_${lang}.qm"         DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$$(env.PATH_OUT)\bin\nls\qt_${lang}.qm"         />' \
     494                     '  <File Id="nlsgui${lang}" Name="VirtualBox_${lang}.qm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$$(env.PATH_OUT)\bin\nls\VirtualBox_${lang}.qm" />')
    424495        $(APPEND) $@ '</Include>'
    425496
     
    476547                $(VBOX_WIN_INST_OUT_DIR)/Files_Doc.wxi \
    477548                $(VBOX_WIN_INST_OUT_DIR)/Files_License.wxi \
     549                $(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi \
    478550                $(foreach lang,$(VBOX_INSTALLER_LANGUAGES), $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_$(lang).msi) \
    479551                $(foreach lang,$(VBOX_INSTALLER_ADD_LANGUAGES), $(VBOX_WIN_INST_OUT_DIR)/Languages/$(lang).mst) \
  • trunk/src/VBox/Installer/win/UserInterface.wxi

    r35166 r37289  
    1 <?xml version="1.0" ?>
     1<?xml version="1.0" encoding="UTF-8"?>
    22<!--
    3     User Interface Include for VirtualBox WiX script
    4 
    5     Copyright (C) 2006-2010 Oracle Corporation
     3    User interface include for VirtualBox WiX script.
     4
     5    Copyright (C) 2006-2011 Oracle Corporation
    66
    77    This file is part of VirtualBox Open Source Edition (OSE), as
     
    1414-->
    1515
    16 <Include>
    17 
     16<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">
    1817    <UI>
    19         <Property Id="DefaultUIFont">DlgFont8</Property>
    20         <!--  <Property Id="ErrorDialog">ErrorDlg</Property> -->
    21 
    2218        <!-- This dialog will be shown when the user cancels the installation -->
    23         <Dialog Id="CancelDlg" Width="260" Height="85" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
    24             <Control Id="No" Type="PushButton" X="132" Y="57" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_No)">
     19        <Dialog Id="VBoxCancelDlg" Width="260" Height="85" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
     20            <Control Id="No" Type="PushButton" X="132" Y="57" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_No)">
    2521                <Publish Event="EndDialog" Value="Return">1</Publish>
    2622            </Control>
    27             <Control Id="Yes" Type="PushButton" X="72" Y="57" Width="56" Height="17" Text="$(loc.ButtonText_Yes)">
     23            <Control Id="Yes" Type="PushButton" X="72" Y="57" Width="56" Height="17" Text="!(loc.ButtonText_Yes)">
    2824                <Publish Event="EndDialog" Value="Exit">1</Publish>
    2925            </Control>
    3026            <Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30">
    31                 <Text>$(loc.CancelDlg_Question)</Text>
     27                <Text>!(loc.CancelDlg_Question)</Text>
    3228            </Control>
    3329            <Control Id="Icon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Information icon" FixedSize="yes" IconSize="32" Text="[InfoIcon]" />
     
    3531
    3632        <!-- This is the very first page the user will see -->
    37         <Dialog Id="WelcomeDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
     33        <Dialog Id="VBoxWelcomeDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
    3834            <!-- The wizard has a bitmap as background. The source is defined as a property below. -->
    3935            <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
     
    4137            <!-- Title text drawn on the background -->
    4238            <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
    43                 <Text>{\DlgVerdanaBold13}$(loc.WelcomeDlg_Header)</Text>
     39                <Text>{\DlgVerdanaBold13}!(loc.WelcomeDlg_Header)</Text>
    4440            </Control>
    4541
    4642            <!-- Text saying what we gonna do -->
    4743            <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
    48                 <Text>$(loc.WelcomeDlg_Body)</Text>
     44                <Text>!(loc.WelcomeDlg_Body)</Text>
    4945            </Control>
    5046
     
    5753            </Control>
    5854
    59             <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Next)">
     55            <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Next)">
    6056        <?if $(env.VBOX_WITH_LICENSE_DISPLAY) = "yes" ?>
    6157                <!-- Next dialog is the license agreement -->
    62                 <Publish Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
     58                <Publish Event="NewDialog" Value="VBoxLicenseAgreementDlg">1</Publish>
    6359        <?else ?>
    6460                <!-- Decide which dialog to show next: The serial number dialog (if this is a branded build)
    6561                     or directly proceed to the customization dialog (Vbox not installed yet) -->
    6662                <?if $(env.VBOX_WITH_SERIALNUMBER_INSTALL) = "yes" ?>
    67                     <Publish Event="NewDialog" Value="CheckSerialDlg">1</Publish>
     63                    <Publish Event="NewDialog" Value="VBoxCheckSerialDlg">1</Publish>
    6864                <?else ?>
    69                     <Publish Event="NewDialog" Value="CustomizeDlg"><![CDATA[(PREVIOUSVERSIONSINSTALLED OR NEWERVERSIONDETECTED)]]></Publish>
    70                     <Publish Event="NewDialog" Value="CustomizeDlg"><![CDATA[(NOT PREVIOUSVERSIONSINSTALLED) AND (NOT NEWERVERSIONDETECTED)]]></Publish>
     65                    <Publish Event="NewDialog" Value="VBoxCustomizeDlg"><![CDATA[(PREVIOUSVERSIONSINSTALLED OR NEWERVERSIONDETECTED)]]></Publish>
     66                    <Publish Event="NewDialog" Value="VBoxCustomizeDlg"><![CDATA[(NOT PREVIOUSVERSIONSINSTALLED) AND (NOT NEWERVERSIONDETECTED)]]></Publish>
    7167                <?endif ?>
    7268        <?endif ?>
     
    7470
    7571            <!-- Canceling will bring up a confirmation dialog ('SpawnDialog' attribute) -->
    76             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
    77                 <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
     72            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
     73                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
    7874            </Control>
    7975
    8076            <!-- Uncomment if we need a 'back' button
    81             <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Back)" />
     77            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Back)" />
    8278            -->
    8379        </Dialog>
     
    8581        <!-- The radio button group used for the license agreement page -->
    8682        <RadioButtonGroup Property="IAgree">
    87             <RadioButton Text="{\DlgFont8}$(loc.LicenseAgreementDlg_Accept)" Value="Yes" X="5" Y="0" Width="250" Height="15" />
    88             <RadioButton Text="{\DlgFont8}$(loc.LicenseAgreementDlg_Decline)" Value="No" X="5" Y="20" Width="250" Height="15" />
     83            <RadioButton Text="{\DlgFont8}!(loc.LicenseAgreementDlg_Accept)" Value="Yes" X="5" Y="0" Width="250" Height="15" />
     84            <RadioButton Text="{\DlgFont8}!(loc.LicenseAgreementDlg_Decline)" Value="No" X="5" Y="20" Width="250" Height="15" />
    8985        </RadioButtonGroup>
    9086
    9187        <!-- The dialog page showing the license. The user has to set the appropriate check box to proceed -->
    92         <Dialog Id="LicenseAgreementDlg" Width="370" Height="270" Title="[ProductName] License Agreement" NoMinimize="yes">
     88        <Dialog Id="VBoxLicenseAgreementDlg" Width="370" Height="270" Title="[ProductName] License Agreement" NoMinimize="yes">
    9389            <!-- The bitmap at the top of the dialog. This dialog doesn't have a background -->
    9490            <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
     
    9692            <!-- The font used here is defined below -->
    9793            <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
    98                 <Text>[DlgTitleFont]$(loc.LicenseAgreementDlg_Header)</Text>
     94                <Text>[DlgTitleFont]!(loc.LicenseAgreementDlg_Header)</Text>
    9995            </Control>
    10096
    10197            <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
    102                 <Text>$(loc.LicenseAgreementDlg_Body)</Text>
     98                <Text>!(loc.LicenseAgreementDlg_Body)</Text>
    10399            </Control>
    104100
     
    107103
    108104            <!-- The license text should be a RTF text so we have formatting -->
    109             <Control Id="AgreementText" Type="ScrollableText" X="20" Y="60" Width="330" Height="120" Sunken="yes" TabSkip="no" Text="$(loc.LicenseText)"/>
     105            <Control Id="AgreementText" Type="ScrollableText" X="20" Y="60" Width="330" Height="120" Sunken="yes" TabSkip="no" Text="!(loc.LicenseText)"/>
    110106
    111107            <!-- This radio button group is defined below -->
     
    120116            </Control>
    121117
    122             <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Back)">
    123                 <Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>
    124             </Control>
    125 
    126             <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Next)">
     118            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Back)">
     119                <Publish Event="NewDialog" Value="VBoxWelcomeDlg">1</Publish>
     120            </Control>
     121
     122            <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Next)">
    127123                <!-- 'Next' button is only enabled when 'I agree' radio button is selected -->
    128124                <Condition Action="disable"><![CDATA[IAgree <> "Yes"]]></Condition>
    129125                <Condition Action="enable">IAgree = "Yes"</Condition>
    130                 <Publish Property="InstallMode" Value="$(loc.InstallModeCustom)">1</Publish>
     126                <Publish Property="InstallMode" Value="!(loc.InstallModeCustom)">1</Publish>
    131127
    132128                <!-- Decide which dialog to show next: The serial number dialog (if this is a branded build)
    133129                     or directly proceed to the customization dialog (Vbox not installed yet) -->
    134130            <?if $(env.VBOX_WITH_SERIALNUMBER_INSTALL) = "yes" ?>
    135                 <Publish Event="NewDialog" Value="CheckSerialDlg">1</Publish>
     131                <Publish Event="NewDialog" Value="VBoxCheckSerialDlg">1</Publish>
    136132            <?else ?>
    137                 <Publish Event="NewDialog" Value="CustomizeDlg"><![CDATA[(PREVIOUSVERSIONSINSTALLED OR NEWERVERSIONDETECTED)]]></Publish>
    138                 <Publish Event="NewDialog" Value="CustomizeDlg"><![CDATA[(NOT PREVIOUSVERSIONSINSTALLED) AND (NOT NEWERVERSIONDETECTED)]]></Publish>
     133                <Publish Event="NewDialog" Value="VBoxCustomizeDlg"><![CDATA[(PREVIOUSVERSIONSINSTALLED OR NEWERVERSIONDETECTED)]]></Publish>
     134                <Publish Event="NewDialog" Value="VBoxCustomizeDlg"><![CDATA[(NOT PREVIOUSVERSIONSINSTALLED) AND (NOT NEWERVERSIONDETECTED)]]></Publish>
    139135            <?endif ?>
    140136            </Control>
    141137
    142138            <!-- Canceling will bring up a confirmation dialog ('SpawnDialog' attribute) -->
    143             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
    144                 <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
    145             </Control>
    146         </Dialog>
    147 
    148         <Dialog Id="CheckSerialDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
     139            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
     140                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
     141            </Control>
     142        </Dialog>
     143
     144        <Dialog Id="VBoxCheckSerialDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
    149145            <!-- The wizard has a bitmap as background. The source is defined as a property below. -->
    150146            <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
    151147
    152148            <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
    153                 <Text>{\DlgVerdanaBold13}$(loc.CheckSerialDlg_Header)</Text>
     149                <Text>{\DlgVerdanaBold13}!(loc.CheckSerialDlg_Header)</Text>
    154150            </Control>
    155151
    156152            <!-- Text saying what we gonna do -->
    157153            <Control Id="Description" Type="Text" X="135" Y="50" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
    158                 <Text>$(loc.CheckSerialDlg_Body)</Text>
     154                <Text>!(loc.CheckSerialDlg_Body)</Text>
    159155            </Control>
    160156
     
    176172
    177173            <Control Id="Description3" Type="Text" X="135" Y="120" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
    178                 <Text>$(loc.CheckSerialDlg_Footer)</Text>
     174                <Text>!(loc.CheckSerialDlg_Footer)</Text>
    179175            </Control>
    180176
     
    187183            </Control>
    188184
    189             <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Back)">
     185            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Back)">
    190186        <?if $(env.VBOX_WITH_LICENSE_DISPLAY) = "yes" ?>
    191                 <Publish Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
     187                <Publish Event="NewDialog" Value="VBoxLicenseAgreementDlg">1</Publish>
    192188        <?else ?>
    193                 <Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>
     189                <Publish Event="NewDialog" Value="VBoxWelcomeDlg">1</Publish>
    194190        <?endif ?>
    195191            </Control>
    196             <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Check)">
    197                 <Publish Event="DoAction" Value="CheckSerial">1</Publish>
    198                 <Publish Event="NewDialog" Value="CustomizeDlg"><![CDATA[(PREVIOUSVERSIONSINSTALLED OR NEWERVERSIONDETECTED) AND (SERIALVALID = "1")]]></Publish>
    199                 <Publish Event="NewDialog" Value="CustomizeDlg"><![CDATA[(NOT PREVIOUSVERSIONSINSTALLED) AND (NOT NEWERVERSIONDETECTED) AND (SERIALVALID = "1")]]></Publish>
    200                 <Publish Event="NewDialog" Value="WrongSerialDlg"><![CDATA[SERIALVALID = "0"]]></Publish>
    201             </Control>
    202             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
    203                 <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
    204             </Control>
    205 
    206         </Dialog>
    207 
    208         <Dialog Id="WrongSerialDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
     192            <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Check)">
     193                <Publish Event="DoAction" Value="ca_CheckSerial">1</Publish>
     194                <Publish Event="NewDialog" Value="VBoxCustomizeDlg"><![CDATA[(PREVIOUSVERSIONSINSTALLED OR NEWERVERSIONDETECTED) AND (SERIALVALID = "1")]]></Publish>
     195                <Publish Event="NewDialog" Value="VBoxCustomizeDlg"><![CDATA[(NOT PREVIOUSVERSIONSINSTALLED) AND (NOT NEWERVERSIONDETECTED) AND (SERIALVALID = "1")]]></Publish>
     196                <Publish Event="NewDialog" Value="VBoxWrongSerialDlg"><![CDATA[SERIALVALID = "0"]]></Publish>
     197            </Control>
     198            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
     199                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
     200            </Control>
     201
     202        </Dialog>
     203
     204        <Dialog Id="VBoxWrongSerialDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
    209205
    210206            <!-- The wizard has a bitmap as background. The source is defined as a property below. -->
     
    213209            <!-- Title text drawn on the background -->
    214210            <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
    215                 <Text>{\DlgInvalidSerial}$(loc.WrongSerialDlg_Header)</Text>
     211                <Text>{\DlgInvalidSerial}!(loc.WrongSerialDlg_Header)</Text>
    216212            </Control>
    217213
    218214            <!-- Text saying what we gonna do -->
    219215            <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
    220                 <Text>$(loc.WrongSerialDlg_Desc1)</Text>
     216                <Text>!(loc.WrongSerialDlg_Desc1)</Text>
    221217            </Control>
    222218
    223219            <Control Id="Description2" Type="Text" X="135" Y="95" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
    224                 <Text>$(loc.WrongSerialDlg_Desc2)</Text>
     220                <Text>!(loc.WrongSerialDlg_Desc2)</Text>
    225221            </Control>
    226222
     
    233229            </Control>
    234230
    235             <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Back)">
    236                  <Publish Event="NewDialog" Value="CheckSerialDlg">1</Publish>
     231            <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Back)">
     232                 <Publish Event="NewDialog" Value="VBoxCheckSerialDlg">1</Publish>
    237233            </Control>
    238234
    239235            <!-- Canceling will bring up a confirmation dialog ('SpawnDialog' attribute) -->
    240             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
    241                 <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
     236            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
     237                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
    242238            </Control>
    243239
     
    246242        <!-- Dialog used to set another installation path. This is taken from the tutorial template on the web and can also be
    247243             used for package selection etc. if necessary after some tweaking. -->
    248         <Dialog Id="CustomizeDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
     244        <Dialog Id="VBoxCustomizeDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
    249245            <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
    250246            <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
    251247            <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
    252                 <Text>[DlgTitleFont]$(loc.CustomizeDlg_CustomSetup)</Text>
     248                <Text>[DlgTitleFont]!(loc.CustomizeDlg_CustomSetup)</Text>
    253249            </Control>
    254250            <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
    255                 <Text>$(loc.CustomizeDlg_SelFeatures)</Text>
     251                <Text>!(loc.CustomizeDlg_SelFeatures)</Text>
    256252            </Control>
    257253            <Control Id="Text" Type="Text" X="25" Y="55" Width="320" Height="20">
    258                 <Text>$(loc.CustomizeDlg_IconTree)</Text>
     254                <Text>!(loc.CustomizeDlg_IconTree)</Text>
    259255            </Control>
    260256            <Control Id="Tree" Type="SelectionTree" X="25" Y="85" Width="175" Height="95" Property="_BrowseProperty"
    261257                     Sunken="yes" TabSkip="no" Text="Tree of selections" />
    262             <Control Id="Browse" Type="PushButton" X="304" Y="200" Width="56" Height="17" Text="$(loc.ButtonText_Browse)">
    263                 <Publish Event="SelectionBrowse" Value="BrowseDlg">1</Publish>
     258            <Control Id="Browse" Type="PushButton" X="304" Y="200" Width="56" Height="17" Text="!(loc.ButtonText_Browse)">
     259                <Publish Event="SelectionBrowse" Value="VBoxBrowseDlg">1</Publish>
    264260                <Condition Action="hide">Installed</Condition>
    265261            </Control>
    266262            <Control Id="DiskCost" Type="PushButton" X="111" Y="243" Width="56" Height="17">
    267                 <Text>$(loc.CustomizeDlg_DiskUsage)</Text>
    268                 <Publish Event="SpawnDialog" Value="DiskCostDlg">1</Publish>
     263                <Text>!(loc.CustomizeDlg_DiskUsage)</Text>
     264                <Publish Event="SpawnDialog" Value="VBoxDiskCostDlg">1</Publish>
    269265                <Subscribe Event="SelectionNoItems" Attribute="Enabled" />
    270266            </Control>
    271267            <Control Id="Box" Type="GroupBox" X="210" Y="81" Width="140" Height="98" />
    272268            <Control Id="ItemDescription" Type="Text" X="215" Y="90" Width="131" Height="30">
    273                 <Text>$(loc.CustomizeDlg_SelItemDesc)</Text>
     269                <Text>!(loc.CustomizeDlg_SelItemDesc)</Text>
    274270                <Subscribe Event="SelectionDescription" Attribute="Text" />
    275271            </Control>
    276272            <Control Id="ItemSize" Type="Text" X="215" Y="130" Width="131" Height="45">
    277                 <Text>$(loc.CustomizeDlg_SelItemSize)</Text>
     273                <Text>!(loc.CustomizeDlg_SelItemSize)</Text>
    278274                <Subscribe Event="SelectionSize" Attribute="Text" />
    279275            </Control>
    280276            <Control Id="Location" Type="Text" X="75" Y="200" Width="215" Height="20">
    281                 <Text>$(loc.CustomizeDlg_SelItemPath)</Text>
     277                <Text>!(loc.CustomizeDlg_SelItemPath)</Text>
    282278                <Subscribe Event="SelectionPath" Attribute="Text" />
    283279                <Subscribe Event="SelectionPathOn" Attribute="Visible" />
    284280                <Condition Action="hide">Installed</Condition>
    285281            </Control>
    286             <Control Id="LocationLabel" Type="Text" X="25" Y="200" Width="50" Height="10" Text="$(loc.CustomizeDlg_Location)">
     282            <Control Id="LocationLabel" Type="Text" X="25" Y="200" Width="50" Height="10" Text="!(loc.CustomizeDlg_Location)">
    287283                <Subscribe Event="SelectionPathOn" Attribute="Visible" />
    288284                <Condition Action="hide">Installed</Condition>
    289285            </Control>
    290286
    291             <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Back)">
     287            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Back)">
    292288        <?if $(env.VBOX_WITH_LICENSE_DISPLAY) = "yes" ?>
    293                 <Publish Event="NewDialog" Value="LicenseAgreementDlg"><![CDATA[(NOT CHECKSERIAL) AND (InstallMode = "$(loc.InstallModeCustom)")]]></Publish>
    294                 <Publish Event="NewDialog" Value="CheckSerialDlg"><![CDATA[CHECKSERIAL]]></Publish>
     289                <Publish Event="NewDialog" Value="VBoxLicenseAgreementDlg"><![CDATA[(NOT CHECKSERIAL) AND (InstallMode = "!(loc.InstallModeCustom)")]]></Publish>
     290                <Publish Event="NewDialog" Value="VBoxCheckSerialDlg"><![CDATA[CHECKSERIAL]]></Publish>
    295291        <?else ?>
    296                 <Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>
     292                <Publish Event="NewDialog" Value="VBoxWelcomeDlg">1</Publish>
    297293        <?endif ?>
    298294            </Control>
    299             <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Next)">
    300                 <Publish Event="NewDialog" Value="Customize2Dlg">1</Publish>
     295            <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Next)">
     296                <Publish Event="NewDialog" Value="VBoxCustomize2Dlg">1</Publish>
    301297                <Subscribe Event="SelectionNoItems" Attribute="Enabled" />
    302298            </Control>
    303             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
    304                 <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
    305             </Control>
    306 
    307             <!-- Build number text drawn left bottom -->
    308             <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    309             <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
    310                 <Text>[Version_text] $(var.Property_Version)</Text>
    311             </Control>
    312         </Dialog>
    313 
    314         <Dialog Id="Customize2Dlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
     299            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
     300                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
     301            </Control>
     302
     303            <!-- Build number text drawn left bottom -->
     304            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
     305            <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
     306                <Text>[Version_text] $(var.Property_Version)</Text>
     307            </Control>
     308        </Dialog>
     309
     310        <Dialog Id="VBoxCustomize2Dlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
    315311            <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
    316312            <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
    317313            <Control Id="Title" Type="Text" X="15" Y="6" Width="220" Height="40" Transparent="yes" NoPrefix="yes">
    318                 <Text>[DlgTitleFont]$(loc.CustomizeDlg_CustomSetup)</Text>
     314                <Text>[DlgTitleFont]!(loc.CustomizeDlg_CustomSetup)</Text>
    319315            </Control>
    320316            <Control Id="Description" Type="Text" X="25" Y="23" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
    321                 <Text>$(loc.CustomizeDlg_SelFeatures)</Text>
     317                <Text>!(loc.CustomizeDlg_SelFeatures)</Text>
    322318            </Control>
    323319            <Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="20">
    324                 <Text>$(loc.Customize2Dlg_Desc)</Text>
     320                <Text>!(loc.Customize2Dlg_Desc)</Text>
    325321            </Control>
    326322            <!-- Note the gray background behind the checkboxes. Unfortunately there's no easy way to
     
    333329            <Control Id="DesktopShortcutCheckBox" Type="CheckBox" X="25" Y="95" Width="200" Height="17"
    334330                Property="INSTALLDESKTOPSHORTCUT" CheckBoxValue="1">
    335                 <Text>$(loc.Customize2Dlg_CreateShortcut)</Text>
     331                <Text>!(loc.Customize2Dlg_CreateShortcut)</Text>
    336332            </Control>
    337333            <Control Id="QuicklaunchShortcutCheckBox" Type="CheckBox" X="25" Y="115" Width="200" Height="17"
    338                 Property="INSTALLQUICKLAUNCHSHORTCUT" CheckBoxValue="1">
    339                 <Text>$(loc.Customize2Dlg_CreateQuickLaunch)</Text>
     334                     Property="INSTALLQUICKLAUNCHSHORTCUT" CheckBoxValue="1">
     335                <Text>!(loc.Customize2Dlg_CreateQuickLaunch)</Text>
    340336            </Control>
    341337
    342338            <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17"
    343                 Default="yes" Cancel="yes" Text="$(loc.ButtonText_Next)">
     339                Default="yes" Cancel="yes" Text="!(loc.ButtonText_Next)">
    344340<?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
    345                 <Publish Event="NewDialog" Value="WarnDisconNetIfacesDlg"><![CDATA[(&VBoxNetworkFlt=3) AND NOT(!VBoxNetworkFlt=3)]]></Publish>
    346                 <Publish Event="NewDialog" Value="VerifyReadyDlg"><![CDATA[(&VBoxNetworkFlt<3)]]></Publish>
     341                <Publish Event="NewDialog" Value="VBoxWarnDisconNetIfacesDlg"><![CDATA[(&ft_VBoxNetworkFlt=3) AND NOT(!ft_VBoxNetworkFlt=3)]]></Publish>
     342                <Publish Event="NewDialog" Value="VBoxVerifyReadyDlg"><![CDATA[(&ft_VBoxNetworkFlt<3)]]></Publish>
    347343<?else ?>
    348                 <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
     344                <Publish Event="NewDialog" Value="VBoxVerifyReadyDlg">1</Publish>
    349345<?endif?>
    350346            </Control>
    351347            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17"
    352                 Text="$(loc.ButtonText_Back)">
    353                 <Publish Event="NewDialog" Value="CustomizeDlg">1</Publish>
     348                Text="!(loc.ButtonText_Back)">
     349                <Publish Event="NewDialog" Value="VBoxCustomizeDlg">1</Publish>
    354350            </Control>
    355351            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17"
    356                 Text="$(loc.ButtonText_Cancel)">
    357                 <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
    358             </Control>
    359 
    360             <!-- Build number text drawn left bottom -->
    361             <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    362             <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
    363                 <Text>[Version_text] $(var.Property_Version)</Text>
    364             </Control>
    365         </Dialog>
    366 
    367         <Dialog Id="WarnDisconNetIfacesDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
     352                Text="!(loc.ButtonText_Cancel)">
     353                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
     354            </Control>
     355
     356            <!-- Build number text drawn left bottom -->
     357            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
     358            <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
     359                <Text>[Version_text] $(var.Property_Version)</Text>
     360            </Control>
     361        </Dialog>
     362
     363        <Dialog Id="VBoxWarnDisconNetIfacesDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
    368364
    369365            <!-- The wizard has a bitmap as background. The source is defined as a property below. -->
     
    372368            <!-- Title text drawn on the background -->
    373369            <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
    374                 <Text>{\DlgWarnDisconNetIfaces}$(loc.WarnDisconNetIfacesDlg_Title)</Text>
     370                <Text>{\DlgWarnDisconNetIfaces}!(loc.WarnDisconNetIfacesDlg_Title)</Text>
    375371            </Control>
    376372
    377373            <Control Id="Title2" Type="Text" X="135" Y="40" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
    378                 <Text>{\DlgWarnDisconNetIfaces}$(loc.WarnDisconNetIfacesDlg_Title2)</Text>
     374                <Text>{\DlgWarnDisconNetIfaces}!(loc.WarnDisconNetIfacesDlg_Title2)</Text>
    379375            </Control>
    380376
    381377            <!-- Text saying what we gonna do -->
    382378            <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
    383                 <Text>$(loc.WarnDisconNetIfacesDlg_Desc)</Text>
     379                <Text>!(loc.WarnDisconNetIfacesDlg_Desc)</Text>
    384380            </Control>
    385381
    386382            <Control Id="Description2" Type="Text" X="135" Y="115" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
    387                 <Text>$(loc.WarnDisconNetIfacesDlg_Question)</Text>
     383                <Text>!(loc.WarnDisconNetIfacesDlg_Question)</Text>
    388384            </Control>
    389385
     
    397393
    398394            <!-- Next dialog is the warning dialog for TAP devices -->
    399             <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Yes)">
    400                  <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
     395            <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Yes)">
     396                 <Publish Event="NewDialog" Value="VBoxVerifyReadyDlg">1</Publish>
    401397            </Control>
    402398
    403399            <!-- Canceling will bring up a confirmation dialog ('SpawnDialog' attribute) -->
    404             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_No)">
    405                 <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
    406             </Control>
    407 
    408         </Dialog>
    409 
    410         <Dialog Id="DiskCostDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
    411             <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_OK)">
     400            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_No)">
     401                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
     402            </Control>
     403
     404        </Dialog>
     405
     406        <Dialog Id="VBoxDiskCostDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
     407            <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_OK)">
    412408                <Publish Event="EndDialog" Value="Return">1</Publish>
    413409            </Control>
    414410            <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
    415411            <Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
    416               <Text>$(loc.DiskCostDlg_SpaceRequired)</Text>
     412              <Text>!(loc.DiskCostDlg_SpaceRequired)</Text>
    417413            </Control>
    418414            <Control Id="Text" Type="Text" X="20" Y="53" Width="330" Height="40">
    419                 <Text>$(loc.DiskCostDlg_NotEnoughSpace)</Text>
     415                <Text>!(loc.DiskCostDlg_NotEnoughSpace)</Text>
    420416            </Control>
    421417            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    422418            <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
    423                 <Text>[DlgTitleFont]$(loc.DiskCostDlg_SpaceRequirements)</Text>
     419                <Text>[DlgTitleFont]!(loc.DiskCostDlg_SpaceRequirements)</Text>
    424420            </Control>
    425421            <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
    426422            <Control Id="VolumeList" Type="VolumeCostList" X="20" Y="100" Width="330" Height="120" Sunken="yes" Fixed="yes" Remote="yes">
    427                 <Text>$(loc.DiskCostDlg_VolumeList)</Text>
     423                <Text>!(loc.DiskCostDlg_VolumeList)</Text>
    428424            </Control>
    429425        </Dialog>
    430426
    431427        <!-- Dialog used to change the installation directory -->
    432         <Dialog Id="BrowseDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
     428        <Dialog Id="VBoxBrowseDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
    433429            <Control Id="PathEdit" Type="PathEdit" X="84" Y="202" Width="261" Height="18" Property="_BrowseProperty" Indirect="yes" />
    434             <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_OK)">
     430            <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_OK)">
    435431                <Publish Event="SetTargetPath" Value="[_BrowseProperty]">1</Publish>
    436432                <Publish Event="EndDialog" Value="Return">1</Publish>
    437433            </Control>
    438             <Control Id="Cancel" Type="PushButton" X="240" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
     434            <Control Id="Cancel" Type="PushButton" X="240" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
    439435                <Publish Event="Reset" Value="0">1</Publish>
    440436                <Publish Event="EndDialog" Value="Return">1</Publish>
    441437            </Control>
    442             <Control Id="ComboLabel" Type="Text" X="25" Y="58" Width="44" Height="10" TabSkip="no" Text="$(loc.BrowseDlg_LookIn)" />
     438            <Control Id="ComboLabel" Type="Text" X="25" Y="58" Width="44" Height="10" TabSkip="no" Text="!(loc.BrowseDlg_LookIn)" />
    443439            <Control Id="DirectoryCombo" Type="DirectoryCombo" X="70" Y="55" Width="220" Height="80"
    444440                     Property="_BrowseProperty" Indirect="yes" Fixed="yes" Remote="yes">
    445441                <Subscribe Event="IgnoreChange" Attribute="IgnoreChange" />
    446442            </Control>
    447             <Control Id="Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" ToolTip="$(loc.BrowseDlg_UpOneLevelTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="[FolderUp]">
     443            <Control Id="Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" ToolTip="!(loc.BrowseDlg_UpOneLevelTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="[FolderUp]">
    448444                <Publish Event="DirectoryListUp" Value="0">1</Publish>
    449445            </Control>
    450446            <Control Id="NewFolder" Type="PushButton" X="325" Y="55" Width="19" Height="19"
    451                      ToolTip="$(loc.BrowseDlg_CreateNewFolderTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="[FolderNew]">
     447                     ToolTip="!(loc.BrowseDlg_CreateNewFolderTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="[FolderNew]">
    452448                <Publish Event="DirectoryListNew" Value="0">1</Publish>
    453449            </Control>
    454450            <Control Id="DirectoryList" Type="DirectoryList" X="25" Y="83" Width="320" Height="110"
    455451                     Property="_BrowseProperty" Sunken="yes" Indirect="yes" TabSkip="no" />
    456             <Control Id="PathLabel" Type="Text" X="25" Y="205" Width="59" Height="10" TabSkip="no" Text="$(loc.BrowseDlg_FolderName)" />
     452            <Control Id="PathLabel" Type="Text" X="25" Y="205" Width="59" Height="10" TabSkip="no" Text="!(loc.BrowseDlg_FolderName)" />
    457453            <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
    458454            <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
    459                 <Text>$(loc.BrowseDlg_BrowseDestFolder)</Text>
     455                <Text>!(loc.BrowseDlg_BrowseDestFolder)</Text>
    460456            </Control>
    461457            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    462458            <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
    463                 <Text>[DlgTitleFont]$(loc.BrowseDlg_ChangeCurFolder)</Text>
    464             </Control>
    465             <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
    466         </Dialog>
    467 
    468         <Dialog Id="PrepareDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" Modeless="yes">
    469             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
    470                 <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
     459                <Text>[DlgTitleFont]!(loc.BrowseDlg_ChangeCurFolder)</Text>
     460            </Control>
     461            <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
     462        </Dialog>
     463
     464        <Dialog Id="VBoxPrepareDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" Modeless="yes">
     465            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
     466                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
    471467            </Control>
    472468            <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
    473469        </Dialog>
    474470
    475         <Dialog Id="VerifyReadyDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
     471        <Dialog Id="VBoxVerifyReadyDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
    476472            <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
    477473            <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
    478474            <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
    479                 <Text>[DlgTitleFont]$(loc.VerifyReadyDlg_ReadyToInstall)</Text>
     475                <Text>[DlgTitleFont]!(loc.VerifyReadyDlg_ReadyToInstall)</Text>
    480476            </Control>
    481477            <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
    482                 <Text>$(loc.VerifyReadyDlg_ReadyToBegin)</Text>
     478                <Text>!(loc.VerifyReadyDlg_ReadyToBegin)</Text>
    483479            </Control>
    484480            <Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="80">
    485                 <Text>$(loc.VerifyReadyDlg_ClickInstall)</Text>
    486             </Control>
    487             <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    488             <Control Id="Install" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Install)">
     481                <Text>!(loc.VerifyReadyDlg_ClickInstall)</Text>
     482            </Control>
     483            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
     484            <Control Id="Install" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Install)">
    489485                <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
    490                 <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
     486                <Publish Event="SpawnDialog" Value="VBoxOutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
    491487                <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
    492488                <Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
    493                 <Publish Event="SpawnDialog" Value="OutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
    494             </Control>
    495             <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Back)">
    496                 <Publish Event="NewDialog" Value="Customize2Dlg"><![CDATA[InstallMode = "$(loc.InstallModeCustom)"]]></Publish>
    497             </Control>
    498             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
    499                 <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
     489                <Publish Event="SpawnDialog" Value="VBoxOutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
     490            </Control>
     491            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Back)">
     492                <Publish Event="NewDialog" Value="VBoxCustomize2Dlg"><![CDATA[InstallMode = "!(loc.InstallModeCustom)"]]></Publish>
     493            </Control>
     494            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
     495                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
    500496            </Control>
    501497
     
    507503
    508504        <!-- This dialog is called after successful installation -->
    509         <Dialog Id="ExitDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
    510             <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_Finish)">
    511                 <Publish Event="DoAction" Value="StartVBox"><![CDATA[STARTVBOX]]></Publish>
     505        <Dialog Id="VBoxExitDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
     506            <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_Finish)">
     507                <Publish Event="DoAction" Value="ca_StartVBox"><![CDATA[STARTVBOX]]></Publish>
    512508                <Publish Event="EndDialog" Value="Return">1</Publish>
    513509            </Control>
     
    518514            </Control>
    519515
    520             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Cancel)" />
     516            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Cancel)" />
    521517            <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
    522             <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Back)" />
     518            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Back)" />
    523519            <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
    524                 <Text>$(loc.ExitDlg_ClickFinish)</Text>
     520                <Text>!(loc.ExitDlg_ClickFinish)</Text>
    525521            </Control>
    526522
     
    534530            <Control Id="StartVBoxCheckBox" Type="CheckBox" X="135" Y="115" Width="200" Height="17"
    535531                Property="STARTVBOX" CheckBoxValue="1">
    536                 <Text>$(loc.ExitDlg_StartVBox)</Text>
     532                <Text>!(loc.ExitDlg_StartVBox)</Text>
    537533                <Condition Action="hide">
    538534                    <![CDATA[(InstallMode="Repair") OR (InstallMode="Remove") OR
     
    543539            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    544540            <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
    545                 <Text>{\DlgVerdanaBold13}$(loc.ExitDlg_InstComplete)</Text>
     541                <Text>{\DlgVerdanaBold13}!(loc.ExitDlg_InstComplete)</Text>
    546542            </Control>
    547543        </Dialog>
    548544
    549545        <!-- This dialog is called after an error during installation -->
    550         <Dialog Id="FatalErrorDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
    551             <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_Finish)">
     546        <Dialog Id="VBoxFatalErrorDlg" ErrorDialog="yes" Width="270" Height="150" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
     547            <!-- Do *not* change the control IDs in the dialog! -->
     548            <Control Id="ErrorIcon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Icon" FixedSize="yes" IconSize="32" Text="[ExclamationIcon]" />
     549            <Control Id="ErrorText" Type="Text" X="75" Y="20" Width="155" Height="80" TabSkip="no">
     550                <Text><![CDATA[{&DlgFont8}]]></Text>
     551            </Control>
     552            <Control Id="Y" Type="PushButton" X="20" Y="110" Width="80" Height="18" TabSkip="yes">
     553                <Text><![CDATA[{\DlgFont8}&Yes]]></Text>
     554                <Publish Event="EndDialog" Value="ErrorYes">1</Publish>
     555            </Control>
     556            <Control Id="A" Type="PushButton" X="20" Y="110" Width="80" Height="18" TabSkip="yes">
     557                <Text><![CDATA[{\DlgFont8}&Cancel]]></Text>
     558                <Publish Event="EndDialog" Value="ErrorAbort">1</Publish>
     559            </Control>
     560            <Control Id="C" Type="PushButton" X="20" Y="110" Width="80" Height="18" TabSkip="yes">
     561                <Text><![CDATA[{\DlgFont8}&Cancel]]></Text>
     562                <Publish Event="EndDialog" Value="ErrorCancel">1</Publish>
     563            </Control>
     564            <Control Id="I" Type="PushButton" X="20" Y="110" Width="80" Height="18" TabSkip="yes">
     565                <Text><![CDATA[{\DlgFont8}&Ignore]]></Text>
     566                <Publish Event="EndDialog" Value="ErrorIgnore">1</Publish>
     567            </Control>
     568            <Control Id="N" Type="PushButton" X="20" Y="110" Width="80" Height="18" TabSkip="yes">
     569                <Text><![CDATA[{\DlgFont8}&No]]></Text>
     570                <Publish Event="EndDialog" Value="ErrorNo">1</Publish>
     571            </Control>
     572            <Control Id="O" Type="PushButton" X="20" Y="110" Width="80" Height="18" TabSkip="yes">
     573                <Text><![CDATA[{\DlgFont8}&OK]]></Text>
     574                <Publish Event="EndDialog" Value="ErrorOk">1</Publish>
     575            </Control>
     576            <Control Id="R" Type="PushButton" X="20" Y="110" Width="80" Height="18" TabSkip="yes">
     577                <Text><![CDATA[{\DlgFont8}&Retry]]></Text>
     578                <Publish Event="EndDialog" Value="ErrorRetry">1</Publish>
     579            </Control>
     580        </Dialog>
     581
     582        <Dialog Id="FilesInUse" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" KeepModeless="yes">
     583            <Control Id="Retry" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_Retry)">
     584                <Publish Event="EndDialog" Value="Retry">1</Publish>
     585            </Control>
     586            <Control Id="Ignore" Type="PushButton" X="235" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Ignore)">
     587                <Publish Event="EndDialog" Value="Ignore">1</Publish>
     588            </Control>
     589            <Control Id="Exit" Type="PushButton" X="166" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Exit)">
    552590                <Publish Event="EndDialog" Value="Exit">1</Publish>
    553591            </Control>
    554 
    555             <!-- Build number text drawn left bottom -->
    556             <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
    557                 <Text>[Version_text] $(var.Property_Version)</Text>
    558             </Control>
    559             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Cancel)" />
     592            <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
     593            <Control Id="Text" Type="Text" X="20" Y="55" Width="330" Height="50" Text="!(loc.FilesInUse_Text)" />
     594            <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
     595            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
     596            <Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="!(loc.FilesInUse_Description)" />
     597            <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="[DlgTitleFont]!(loc.FilesInUse_Title)" />
     598            <Control Id="List" Type="ListBox" X="20" Y="107" Width="330" Height="130" Property="FileInUseProcess" Sunken="yes" TabSkip="yes" />
     599        </Dialog>
     600
     601        <!-- This dialog is shown if the user interrupts the installation process -->
     602        <Dialog Id="VBoxUserExitDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
     603            <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_Finish)">
     604                <Publish Event="EndDialog" Value="Exit">1</Publish>
     605            </Control>
     606            <!-- Build number text drawn left bottom -->
     607            <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
     608                <Text>[Version_text] $(var.Property_Version)</Text>
     609            </Control>
     610
     611            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Cancel)" />
    560612            <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
    561             <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Back)" />
     613            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Back)" />
    562614            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    563615            <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
    564                 <Text>{\DlgVerdanaBold13}$(loc.FatalErrorDlg_Header)</Text>
     616                <Text>{\DlgVerdanaBold13}!(loc.UserExitDlg_Header)</Text>
    565617            </Control>
    566618            <Control Id="Description1" Type="Text" X="135" Y="70" Width="220" Height="40" Transparent="yes" NoPrefix="yes">
    567                 <Text>$(loc.FatalErrorDlg_Desc)</Text>
     619                <Text>!(loc.UserExitDlg_Desc)</Text>
    568620            </Control>
    569621            <Control Id="Description2" Type="Text" X="135" Y="115" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
    570                 <Text>$(loc.FatalErrorDlg_Footer)</Text>
    571             </Control>
    572         </Dialog>
    573 
    574         <Dialog Id="FilesInUse" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" KeepModeless="yes">
    575             <Control Id="Retry" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_Retry)">
    576                 <Publish Event="EndDialog" Value="Retry">1</Publish>
    577             </Control>
    578             <Control Id="Ignore" Type="PushButton" X="235" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Ignore)">
    579                 <Publish Event="EndDialog" Value="Ignore">1</Publish>
    580             </Control>
    581             <Control Id="Exit" Type="PushButton" X="166" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Exit)">
    582                 <Publish Event="EndDialog" Value="Exit">1</Publish>
    583             </Control>
    584             <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
    585             <Control Id="Text" Type="Text" X="20" Y="55" Width="330" Height="50" Text="$(loc.FilesInUse_Text)" />
    586             <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
    587             <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    588             <Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="$(loc.FilesInUse_Description)" />
    589             <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="[DlgTitleFont]$(loc.FilesInUse_Title)" />
    590             <Control Id="List" Type="ListBox" X="20" Y="107" Width="330" Height="130" Property="FileInUseProcess" Sunken="yes" TabSkip="yes" />
    591         </Dialog>
    592 
    593         <!-- This dialog is shown if the user interrupts the installation process -->
    594         <Dialog Id="UserExitDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
    595             <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_Finish)">
    596                 <Publish Event="EndDialog" Value="Exit">1</Publish>
    597             </Control>
    598             <!-- Build number text drawn left bottom -->
    599             <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
    600                 <Text>[Version_text] $(var.Property_Version)</Text>
    601             </Control>
    602 
    603             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Cancel)" />
    604             <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
    605             <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Back)" />
    606             <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    607             <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
    608                 <Text>{\DlgVerdanaBold13}$(loc.UserExitDlg_Header)</Text>
    609             </Control>
    610             <Control Id="Description1" Type="Text" X="135" Y="70" Width="220" Height="40" Transparent="yes" NoPrefix="yes">
    611                 <Text>$(loc.UserExitDlg_Desc)</Text>
    612             </Control>
    613             <Control Id="Description2" Type="Text" X="135" Y="115" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
    614                 <Text>$(loc.UserExitDlg_Footer)</Text>
     622                <Text>!(loc.UserExitDlg_Footer)</Text>
    615623            </Control>
    616624        </Dialog>
    617625
    618626        <!-- Progress dialog shown during file copying and other lengthy operations -->
    619         <Dialog Id="ProgressDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" Modeless="yes">
    620             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
    621                 <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
    622             </Control>
    623 
    624             <!-- Build number text drawn left bottom -->
    625             <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
    626                 <Text>[Version_text] $(var.Property_Version)</Text>
    627             </Control>
    628 
    629             <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
    630             <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Back)" />
    631             <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Next)" />
     627        <Dialog Id="VBoxProgressDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" Modeless="yes">
     628            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
     629                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
     630            </Control>
     631
     632            <!-- Build number text drawn left bottom -->
     633            <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
     634                <Text>[Version_text] $(var.Property_Version)</Text>
     635            </Control>
     636
     637            <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
     638            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Back)" />
     639            <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Next)" />
    632640            <Control Id="ActionText" Type="Text" X="70" Y="100" Width="265" Height="10">
    633641                <Subscribe Event="ActionText" Attribute="Text" />
    634642            </Control>
    635643            <Control Id="Text" Type="Text" X="35" Y="65" Width="300" Height="20">
    636                 <Text>$(loc.ProgressDlg_PleaseWait)</Text>
     644                <Text>!(loc.ProgressDlg_PleaseWait)</Text>
    637645            </Control>
    638646            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
     
    647655        </Dialog>
    648656
    649         <Dialog Id="ResumeDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
    650             <Control Id="Install" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[$(loc.ButtonText_Install)]">
    651                 <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
     657        <Dialog Id="VBoxResumeDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
     658            <Control Id="Install" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Install)">
     659                <Publish Event="SpawnWaitDialog" Value="VBoxWaitForCostingDlg">CostingComplete = 1</Publish>
    652660                <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
    653                 <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">
     661                <Publish Event="SpawnDialog" Value="VBoxOutOfRbDiskDlg">
    654662                    <![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]>
    655663                </Publish>
    656664                <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
    657665                <Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
    658                 <Publish Event="SpawnDialog" Value="OutOfDiskDlg">
     666                <Publish Event="SpawnDialog" Value="VBoxOutOfDiskDlg">
    659667                    <![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]>
    660668                </Publish>
     
    662670
    663671            <!-- Build number text drawn left bottom -->
    664             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
    665                 <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
     672            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
     673                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
    666674            </Control>
    667675            <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
    668             <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Back)" />
     676            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Back)" />
    669677            <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
    670                 <Text>{\DlgVerdanaBold13}$(loc.ResumeDlg_Header)</Text>
     678                <Text>{\DlgVerdanaBold13}!(loc.ResumeDlg_Header)</Text>
    671679            </Control>
    672680            <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="30" Transparent="yes" NoPrefix="yes">
    673                 <Text>$(loc.ResumeDlg_Desc)</Text>
     681                <Text>!(loc.ResumeDlg_Desc)</Text>
    674682            </Control>
    675683            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
     
    681689        <!-- This dialog is shown after the welcome page if the user restarts the MSI package on a system where the product is already installed. The user
    682690             may choose to repair the installation or remove it. -->
    683         <Dialog Id="MaintenanceTypeDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
     691        <Dialog Id="VBoxMaintenanceTypeDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
    684692            <Control Id="RepairLabel" Type="Text" X="105" Y="90" Width="100" Height="10" TabSkip="no">
    685                 <Text>[DlgTitleFont]$(loc.MaintenanceTypeDlg_Repair)</Text>
    686             </Control>
    687             <Control Id="RepairButton" Type="PushButton" X="50" Y="90" Width="38" Height="38" ToolTip="$(loc.MaintenanceTypeDlg_RepairTooltip)"
     693                <Text>[DlgTitleFont]!(loc.MaintenanceTypeDlg_Repair)</Text>
     694            </Control>
     695            <Control Id="RepairButton" Type="PushButton" X="50" Y="90" Width="38" Height="38" ToolTip="!(loc.MaintenanceTypeDlg_RepairTooltip)"
    688696                     Icon="yes" FixedSize="yes" IconSize="32" Text="[RepairIcon]">
    689697                <Publish Property="InstallMode" Value="Repair">1</Publish>
    690                 <Publish Property="Progress1" Value="$(loc.MaintenanceTypeDlg_RepairProgress1)">1</Publish>
    691                 <Publish Property="Progress2" Value="$(loc.MaintenanceTypeDlg_RepairProgress2)">1</Publish>
    692                 <Publish Event="NewDialog" Value="VerifyRepairDlg">1</Publish>
     698                <Publish Property="Progress1" Value="!(loc.MaintenanceTypeDlg_RepairProgress1)">1</Publish>
     699                <Publish Property="Progress2" Value="!(loc.MaintenanceTypeDlg_RepairProgress2)">1</Publish>
     700                <Publish Event="NewDialog" Value="VBoxVerifyRepairDlg">1</Publish>
    693701            </Control>
    694702            <Control Id="RemoveLabel" Type="Text" X="105" Y="163" Width="100" Height="10" TabSkip="no">
    695                 <Text>[DlgTitleFont]$(loc.MaintenanceTypeDlg_Remove)</Text>
    696             </Control>
    697             <Control Id="RemoveButton" Type="PushButton" X="50" Y="163" Width="38" Height="38" ToolTip="$(loc.MaintenanceTypeDlg_RemoveTooltip)"
     703                <Text>[DlgTitleFont]!(loc.MaintenanceTypeDlg_Remove)</Text>
     704            </Control>
     705            <Control Id="RemoveButton" Type="PushButton" X="50" Y="163" Width="38" Height="38" ToolTip="!(loc.MaintenanceTypeDlg_RemoveTooltip)"
    698706                     Icon="yes" FixedSize="yes" IconSize="32" Text="[RemoveIcon]">
    699707                <Publish Property="InstallMode" Value="Remove">1</Publish>
    700                 <Publish Property="Progress1" Value="$(loc.MaintenanceTypeDlg_RemoveProgress1)">1</Publish>
    701                 <Publish Property="Progress2" Value="$(loc.MaintenanceTypeDlg_RemoveProgress2)">1</Publish>
    702                 <Publish Event="NewDialog" Value="VerifyRemoveDlg">1</Publish>
    703             </Control>
    704 
    705             <!-- Build number text drawn left bottom -->
    706             <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
    707                 <Text>[Version_text] $(var.Property_Version)</Text>
    708             </Control>
    709 
    710             <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Back)">
    711                 <Publish Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
    712             </Control>
    713             <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Next)" />
    714             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
    715                 <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
     708                <Publish Property="Progress1" Value="!(loc.MaintenanceTypeDlg_RemoveProgress1)">1</Publish>
     709                <Publish Property="Progress2" Value="!(loc.MaintenanceTypeDlg_RemoveProgress2)">1</Publish>
     710                <Publish Event="NewDialog" Value="VBoxVerifyRemoveDlg">1</Publish>
     711            </Control>
     712
     713            <!-- Build number text drawn left bottom -->
     714            <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
     715                <Text>[Version_text] $(var.Property_Version)</Text>
     716            </Control>
     717
     718            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Back)">
     719                <Publish Event="NewDialog" Value="VBoxMaintenanceWelcomeDlg">1</Publish>
     720            </Control>
     721            <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Next)" />
     722            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
     723                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
    716724            </Control>
    717725            <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
    718726            <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
    719                 <Text>$(loc.MaintenanceTypeDlg_SelOption)</Text>
     727                <Text>!(loc.MaintenanceTypeDlg_SelOption)</Text>
    720728            </Control>
    721729            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    722730            <Control Id="Title" Type="Text" X="15" Y="6" Width="240" Height="15" Transparent="yes" NoPrefix="yes">
    723                 <Text>[DlgTitleFont]$(loc.MaintenanceTypeDlg_Header)</Text>
     731                <Text>[DlgTitleFont]!(loc.MaintenanceTypeDlg_Header)</Text>
    724732            </Control>
    725733            <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
    726734            <Control Id="RemoveText" Type="Text" X="105" Y="176" Width="230" Height="20">
    727                 <Text>$(loc.MaintenanceTypeDlg_RemoveText)</Text>
     735                <Text>!(loc.MaintenanceTypeDlg_RemoveText)</Text>
    728736            </Control>
    729737            <Control Id="RepairText" Type="Text" X="105" Y="102" Width="230" Height="30">
    730                 <Text>$(loc.MaintenanceTypeDlg_RepairText)</Text>
     738                <Text>!(loc.MaintenanceTypeDlg_RepairText)</Text>
    731739            </Control>
    732740        </Dialog>
     
    734742        <!-- This dialog is shown if the app is installed and the installation package is started again. It's the welcome
    735743             screen for maintenance -->
    736         <Dialog Id="MaintenanceWelcomeDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
     744        <Dialog Id="VBoxMaintenanceWelcomeDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
    737745            <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
    738                 <Text>{\DlgVerdanaBold13}$(loc.MaintenanceWelcomeDlg_Header)</Text>
    739             </Control>
    740 
    741             <!-- Build number text drawn left bottom -->
    742             <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
    743                 <Text>[Version_text] $(var.Property_Version)</Text>
    744             </Control>
    745 
    746             <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Next)">
    747                 <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
    748                 <Publish Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
    749             </Control>
    750             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
    751                 <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
     746                <Text>{\DlgVerdanaBold13}!(loc.MaintenanceWelcomeDlg_Header)</Text>
     747            </Control>
     748
     749            <!-- Build number text drawn left bottom -->
     750            <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
     751                <Text>[Version_text] $(var.Property_Version)</Text>
     752            </Control>
     753
     754            <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Next)">
     755                <Publish Event="SpawnWaitDialog" Value="VBoxWaitForCostingDlg">CostingComplete = 1</Publish>
     756                <Publish Event="NewDialog" Value="VBoxMaintenanceTypeDlg">1</Publish>
     757            </Control>
     758            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
     759                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
    752760            </Control>
    753761            <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
    754             <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Back)" />
     762            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Back)" />
    755763            <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
    756                 <Text>$(loc.MaintenanceWelcomeDlg_Desc)</Text>
     764                <Text>!(loc.MaintenanceWelcomeDlg_Desc)</Text>
    757765            </Control>
    758766            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
     
    760768
    761769        <!-- Out of disk error dialog -->
    762         <Dialog Id="OutOfDiskDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
    763 
    764             <!-- Build number text drawn left bottom -->
    765             <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
    766                 <Text>[Version_text] $(var.Property_Version)</Text>
    767             </Control>
    768 
    769             <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_OK)">
     770        <Dialog Id="VBoxOutOfDiskDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
     771
     772            <!-- Build number text drawn left bottom -->
     773            <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
     774                <Text>[Version_text] $(var.Property_Version)</Text>
     775            </Control>
     776
     777            <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_OK)">
    770778                <Publish Event="EndDialog" Value="Return">1</Publish>
    771779            </Control>
    772780            <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
    773781            <Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
    774                 <Text>$(loc.OutOfDiskDlg_InstallationExceeds)</Text>
     782                <Text>!(loc.OutOfDiskDlg_InstallationExceeds)</Text>
    775783            </Control>
    776784            <Control Id="Text" Type="Text" X="20" Y="53" Width="330" Height="40">
    777                 <Text>$(loc.OutOfDiskDlg_NotEnoughDiskSpace)</Text>
     785                <Text>!(loc.OutOfDiskDlg_NotEnoughDiskSpace)</Text>
    778786            </Control>
    779787            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    780788            <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
    781                 <Text>[DlgTitleFont]$(loc.OutOfDiskDlg_OutOfDiskSpace)</Text>
     789                <Text>[DlgTitleFont]!(loc.OutOfDiskDlg_OutOfDiskSpace)</Text>
    782790            </Control>
    783791            <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
     
    787795        </Dialog>
    788796
    789         <Dialog Id="OutOfRbDiskDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
    790             <Control Id="No" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_No)">
     797        <Dialog Id="VBoxOutOfRbDiskDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
     798            <Control Id="No" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_No)">
    791799                <Publish Event="EndDialog" Value="Return">1</Publish>
    792800            </Control>
    793             <Control Id="Yes" Type="PushButton" X="240" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Yes)">
     801            <Control Id="Yes" Type="PushButton" X="240" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Yes)">
    794802                <Publish Event="EnableRollback" Value="False">1</Publish>
    795803                <Publish Event="EndDialog" Value="Return">1</Publish>
     
    797805            <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
    798806            <Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
    799                 <Text>$(loc.OutOfRbDiskDlg_InstallationExceeds)</Text>
     807                <Text>!(loc.OutOfRbDiskDlg_InstallationExceeds)</Text>
    800808            </Control>
    801809            <Control Id="Text" Type="Text" X="20" Y="53" Width="330" Height="40">
    802                 <Text>$(loc.OutOfRbDiskDlg_NotEnoughDiskSpace)</Text>
     810                <Text>!(loc.OutOfRbDiskDlg_NotEnoughDiskSpace)</Text>
    803811            </Control>
    804812            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    805813            <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
    806                 <Text>[DlgTitleFont]$(loc.OutOfRbDiskDlg_OutOfDiskSpace)</Text>
     814                <Text>[DlgTitleFont]!(loc.OutOfRbDiskDlg_OutOfDiskSpace)</Text>
    807815            </Control>
    808816            <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
     
    811819            </Control>
    812820            <Control Id="Text2" Type="Text" X="20" Y="94" Width="330" Height="40">
    813                 <Text>$(loc.OutOfRbDiskDlg_Desc)</Text>
    814             </Control>
    815         </Dialog>
    816 
    817         <Dialog Id="VerifyRemoveDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
    818 
    819             <!-- Build number text drawn left bottom -->
    820             <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
    821                 <Text>[Version_text] $(var.Property_Version)</Text>
    822             </Control>
    823 
    824             <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Back)">
    825                 <Publish Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
    826             </Control>
    827             <Control Id="Remove" Type="PushButton" X="236" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Remove)">
     821                <Text>!(loc.OutOfRbDiskDlg_Desc)</Text>
     822            </Control>
     823        </Dialog>
     824
     825        <Dialog Id="VBoxVerifyRemoveDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
     826
     827            <!-- Build number text drawn left bottom -->
     828            <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
     829                <Text>[Version_text] $(var.Property_Version)</Text>
     830            </Control>
     831
     832            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Back)">
     833                <Publish Event="NewDialog" Value="VBoxMaintenanceTypeDlg">1</Publish>
     834            </Control>
     835            <Control Id="Remove" Type="PushButton" X="236" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Remove)">
    828836                <Publish Event="Remove" Value="All"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
    829837                <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
    830                 <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
     838                <Publish Event="SpawnDialog" Value="VBoxOutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
    831839                <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
    832840                <Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
    833                 <Publish Event="SpawnDialog" Value="OutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
    834             </Control>
    835             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
    836                 <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
     841                <Publish Event="SpawnDialog" Value="VBoxOutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
     842            </Control>
     843            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
     844                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
    837845            </Control>
    838846            <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
    839847            <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
    840                 <Text>$(loc.VerifyRemoveDlg_Desc)</Text>
     848                <Text>!(loc.VerifyRemoveDlg_Desc)</Text>
    841849            </Control>
    842850            <Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="30">
    843                 <Text>$(loc.VerifyRemoveDlg_ClickRemove)</Text>
     851                <Text>!(loc.VerifyRemoveDlg_ClickRemove)</Text>
    844852            </Control>
    845853            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    846854            <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
    847                 <Text>[DlgTitleFont]$(loc.VerifyRemoveDlg_Header)</Text>
    848             </Control>
    849             <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
    850         </Dialog>
    851 
    852         <Dialog Id="VerifyRepairDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
    853             <Control Id="Repair" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Repair)">
     855                <Text>[DlgTitleFont]!(loc.VerifyRemoveDlg_Header)</Text>
     856            </Control>
     857            <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
     858        </Dialog>
     859
     860        <Dialog Id="VBoxVerifyRepairDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
     861            <Control Id="Repair" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Repair)">
    854862                <Publish Event="ReinstallMode" Value="ecmus"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
    855863                <Publish Event="Reinstall" Value="All"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
    856864                <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
    857                 <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
     865                <Publish Event="SpawnDialog" Value="VBoxOutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
    858866                <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
    859867                <Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
    860                 <Publish Event="SpawnDialog" Value="OutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
    861             </Control>
    862 
    863             <!-- Build number text drawn left bottom -->
    864             <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
    865                 <Text>[Version_text] $(var.Property_Version)</Text>
    866             </Control>
    867 
    868             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
    869                 <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
    870             </Control>
    871             <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
    872             <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Back)">
    873                 <Publish Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
     868                <Publish Event="SpawnDialog" Value="VBoxOutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
     869            </Control>
     870
     871            <!-- Build number text drawn left bottom -->
     872            <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
     873                <Text>[Version_text] $(var.Property_Version)</Text>
     874            </Control>
     875
     876            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
     877                <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
     878            </Control>
     879            <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
     880            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Back)">
     881                <Publish Event="NewDialog" Value="VBoxMaintenanceTypeDlg">1</Publish>
    874882            </Control>
    875883            <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
    876                 <Text>$(loc.VerifyRepairDlg_ReadyToBegin)</Text>
     884                <Text>!(loc.VerifyRepairDlg_ReadyToBegin)</Text>
    877885            </Control>
    878886            <Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="30">
    879                 <Text>$(loc.VerifyRepairDlg_ClickRepair)</Text>
     887                <Text>!(loc.VerifyRepairDlg_ClickRepair)</Text>
    880888            </Control>
    881889            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    882890            <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
    883                 <Text>[DlgTitleFont]$(loc.VerifyRepairDlg_Header)</Text>
    884             </Control>
    885             <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
    886         </Dialog>
    887 
    888         <Dialog Id="WaitForCostingDlg" Width="260" Height="85" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
     891                <Text>[DlgTitleFont]!(loc.VerifyRepairDlg_Header)</Text>
     892            </Control>
     893            <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
     894        </Dialog>
     895
     896        <Dialog Id="VBoxWaitForCostingDlg" Width="260" Height="85" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
    889897            <Control Id="Return" Type="PushButton" X="102" Y="57" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Return]">
    890898                <Publish Event="EndDialog" Value="Exit">1</Publish>
    891899            </Control>
    892900            <Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30">
    893                 <Text>$(loc.WaitForCostingDlg_PleaseWait)</Text>
     901                <Text>!(loc.WaitForCostingDlg_PleaseWait)</Text>
    894902            </Control>
    895903            <Control Id="Icon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Exclamation icon" FixedSize="yes" IconSize="32" Text="[ExclamationIcon]" />
    896904        </Dialog>
    897905
    898         <!-- Dialogs used by the .MSI internally. -->
    899         <Dialog Id="MsiRMFilesInUse" Width="370" Height="270" Title="[ProductName] $(loc.Setup) Test" KeepModeless="yes">
    900             <Control Id="OK" Type="PushButton" X="240" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_OK)">
    901                 <Publish Event="EndDialog" Value="Return">1</Publish>
    902                 <Publish Event="RMShutdownAndRestart" Value="0">WixUIRMOption~="UseRM"</Publish>
    903             </Control>
    904             <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
    905                 <Publish Event="EndDialog" Value="Exit">1</Publish>
    906             </Control>
    907             <Control Id="ShutdownOption" Type="RadioButtonGroup" X="26" Y="190" Width="305" Height="45" Property="WixUIRMOption">
    908                 <RadioButtonGroup Property="WixUIRMOption">
    909                     <RadioButton Value="UseRM" X="0" Y="0" Width="295" Height="16" Text="$(loc.MsiRMFilesInUse_UseRM)" />
    910                     <RadioButton Value="DontUseRM" X="0" Y="20" Width="295" Height="16" Text="$(loc.MsiRMFilesInUse_DontUseRM)" />
    911                 </RadioButtonGroup>
    912             </Control>
    913             <Control Id="List" Type="ListBox" X="20" Y="100" Width="330" Height="100" Property="FileInUseProcess" Sunken="yes" TabSkip="yes" />
    914             <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
    915             <Control Id="Text" Type="Text" X="20" Y="55" Width="330" Height="45" Text="$(loc.MsiRMFilesInUse_Text)" />
    916             <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
    917             <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    918             <Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="$(loc.MsiRMFilesInUse_Description)" />
    919             <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="$(loc.MsiRMFilesInUse_Title)" />
    920         </Dialog>
     906        <!-- Dialog property table. -->
     907        <Property Id="ErrorDialog" Value="VBoxFatalErrorDlg"/>
    921908
    922909        <!-- Define some textstyles used for formatting dialog items. -->
     910        <Property Id="DefaultUIFont">DlgFont8</Property>
    923911        <TextStyle Id="DlgFont8" FaceName="Tahoma" Size="8" />
    924912        <TextStyle Id="DlgFontBold8" FaceName="Tahoma" Size="8" Bold="yes" />
     
    929917        <!-- The UIText table contains the localized versions of some of the strings used in the user interface.
    930918               These strings are not part of any other table. The UIText table is for strings that have no logical place in any other table. -->
    931         <ProgressText Action="CostFinalize">$(loc.ProgressTextCostFinalize)</ProgressText>
    932         <ProgressText Action="CostInitialize">$(loc.ProgressTextCostInitialize)</ProgressText>
    933         <ProgressText Action="FileCost">$(loc.ProgressTextFileCost)</ProgressText>
    934         <ProgressText Action="InstallValidate">$(loc.ProgressTextInstallValidate)</ProgressText>
    935         <ProgressText Action="InstallFiles" Template="File: [1],  Directory: [9],  Size: [6]">$(loc.ProgressTextInstallFiles)</ProgressText>
    936         <ProgressText Action="InstallAdminPackage" Template="File: [1], Directory: [9], Size: [6]">$(loc.ProgressTextInstallAdminPackage)</ProgressText>
    937         <ProgressText Action="CreateShortcuts" Template="Shortcut: [1]">$(loc.ProgressTextCreateShortcuts)</ProgressText>
    938         <ProgressText Action="PublishComponents" Template="Component ID: [1], Qualifier: [2]">$(loc.ProgressTextPublishComponents)</ProgressText>
    939         <ProgressText Action="PublishFeatures" Template="Feature: [1]">$(loc.ProgressTextPublishFeatures)</ProgressText>
    940         <ProgressText Action="PublishProduct">$(loc.ProgressTextPublishProduct)</ProgressText>
    941         <ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">$(loc.ProgressTextRegisterClassInfo)</ProgressText>
    942         <ProgressText Action="RegisterExtensionInfo" Template="Extension: [1]">$(loc.ProgressTextRegisterExtensionInfo)</ProgressText>
    943         <ProgressText Action="RegisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">$(loc.ProgressTextRegisterMIMEInfo)</ProgressText>
    944         <ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">$(loc.ProgressTextRegisterProgIdInfo)</ProgressText>
    945         <ProgressText Action="AllocateRegistrySpace" Template="Free space: [1]">$(loc.ProgressTextAllocateRegistrySpace)</ProgressText>
    946         <ProgressText Action="AppSearch" Template="Property: [1], Signature: [2]">$(loc.ProgressTextAppSearch)</ProgressText>
    947         <ProgressText Action="BindImage" Template="File: [1]">$(loc.ProgressTextBindImage)</ProgressText>
    948         <ProgressText Action="CCPSearch">$(loc.ProgressTextCCPSearch)</ProgressText>
    949         <ProgressText Action="CreateFolders" Template="Folder: [1]">$(loc.ProgressTextCreateFolders)</ProgressText>
    950         <ProgressText Action="DeleteServices" Template="Service: [1]">$(loc.ProgressTextDeleteServices)</ProgressText>
    951         <ProgressText Action="DuplicateFiles" Template="File: [1],  Directory: [9],  Size: [6]">$(loc.ProgressTextDuplicateFiles)</ProgressText>
    952         <ProgressText Action="FindRelatedProducts" Template="Found application: [1]">$(loc.ProgressTextFindRelatedProducts)</ProgressText>
    953         <ProgressText Action="InstallODBC">$(loc.ProgressTextInstallODBC)</ProgressText>
    954         <ProgressText Action="InstallServices" Template="Service: [2]">$(loc.ProgressTextInstallServices)</ProgressText>
    955         <ProgressText Action="LaunchConditions">$(loc.ProgressTextLaunchConditions)</ProgressText>
    956         <ProgressText Action="MigrateFeatureStates" Template="Application: [1]">$(loc.ProgressTextMigrateFeatureStates)</ProgressText>
    957         <ProgressText Action="MoveFiles" Template="File: [1],  Directory: [9],  Size: [6]">$(loc.ProgressTextMoveFiles)</ProgressText>
    958         <ProgressText Action="PatchFiles" Template="File: [1],  Directory: [2],  Size: [3]">$(loc.ProgressTextPatchFiles)</ProgressText>
    959         <ProgressText Action="ProcessComponents">$(loc.ProgressTextProcessComponents)</ProgressText>
    960         <ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">$(loc.ProgressTextRegisterComPlus)</ProgressText>
    961         <ProgressText Action="RegisterFonts" Template="Font: [1]">$(loc.ProgressTextRegisterFonts)</ProgressText>
    962         <ProgressText Action="RegisterProduct" Template="[1]">$(loc.ProgressTextRegisterProduct)</ProgressText>
    963         <ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">$(loc.ProgressTextRegisterTypeLibraries)</ProgressText>
    964         <ProgressText Action="RegisterUser" Template="[1]">$(loc.ProgressTextRegisterUser)</ProgressText>
    965         <ProgressText Action="RemoveDuplicateFiles" Template="File: [1], Directory: [9]">$(loc.ProgressTextRemoveDuplicateFiles)</ProgressText>
    966         <ProgressText Action="RemoveEnvironmentStrings" Template="Name: [1], Value: [2], Action [3]">$(loc.ProgressTextRemoveEnvironmentStrings)</ProgressText>
    967         <ProgressText Action="RemoveExistingProducts" Template="Application: [1], Command line: [2]">$(loc.ProgressTextRemoveExistingProducts)</ProgressText>
    968         <ProgressText Action="RemoveFiles" Template="File: [1], Directory: [9]">$(loc.ProgressTextRemoveFiles)</ProgressText>
    969         <ProgressText Action="RemoveFolders" Template="Folder: [1]">$(loc.ProgressTextRemoveFolders)</ProgressText>
    970         <ProgressText Action="RemoveIniValues" Template="File: [1],  Section: [2],  Key: [3], Value: [4]">$(loc.ProgressTextRemoveIniValues)</ProgressText>
    971         <ProgressText Action="RemoveODBC">$(loc.ProgressTextRemoveODBC)</ProgressText>
    972         <ProgressText Action="RemoveRegistryValues" Template="Key: [1], Name: [2]">$(loc.ProgressTextRemoveRegistryValues)</ProgressText>
    973         <ProgressText Action="RemoveShortcuts" Template="Shortcut: [1]">$(loc.ProgressTextRemoveShortcuts)</ProgressText>
    974         <ProgressText Action="RMCCPSearch">$(loc.ProgressTextRMCCPSearch)</ProgressText>
    975         <ProgressText Action="SelfRegModules" Template="File: [1], Folder: [2]">$(loc.ProgressTextSelfRegModules)</ProgressText>
    976         <ProgressText Action="SelfUnregModules" Template="File: [1], Folder: [2]">$(loc.ProgressTextSelfUnregModules)</ProgressText>
    977         <ProgressText Action="SetODBCFolders">$(loc.ProgressTextSetODBCFolders)</ProgressText>
    978         <ProgressText Action="StartServices" Template="Service: [1]">$(loc.ProgressTextStartServices)</ProgressText>
    979         <ProgressText Action="StopServices" Template="Service: [1]">$(loc.ProgressTextStopServices)</ProgressText>
    980         <ProgressText Action="UnpublishComponents" Template="Component ID: [1], Qualifier: [2]">$(loc.ProgressTextUnpublishComponents)</ProgressText>
    981         <ProgressText Action="UnpublishFeatures" Template="Feature: [1]">$(loc.ProgressTextUnpublishFeatures)</ProgressText>
    982         <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">$(loc.ProgressTextUnregisterClassInfo)</ProgressText>
    983         <ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">$(loc.ProgressTextUnregisterComPlus)</ProgressText>
    984         <ProgressText Action="UnregisterExtensionInfo" Template="Extension: [1]">$(loc.ProgressTextUnregisterExtensionInfo)</ProgressText>
    985         <ProgressText Action="UnregisterFonts" Template="Font: [1]">$(loc.ProgressTextUnregisterFonts)</ProgressText>
    986         <ProgressText Action="UnregisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">$(loc.ProgressTextUnregisterMIMEInfo)</ProgressText>
    987         <ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">$(loc.ProgressTextUnregisterProgIdInfo)</ProgressText>
    988         <ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">$(loc.ProgressTextUnregisterTypeLibraries)</ProgressText>
    989         <ProgressText Action="WriteEnvironmentStrings" Template="Name: [1], Value: [2], Action [3]">$(loc.ProgressTextWriteEnvironmentStrings)</ProgressText>
    990         <ProgressText Action="WriteIniValues" Template="File: [1],  Section: [2],  Key: [3], Value: [4]">$(loc.ProgressTextWriteIniValues)</ProgressText>
    991         <ProgressText Action="WriteRegistryValues" Template="Key: [1], Name: [2], Value: [3]">$(loc.ProgressTextWriteRegistryValues)</ProgressText>
    992         <ProgressText Action="Advertise">$(loc.ProgressTextAdvertise)</ProgressText>
    993         <ProgressText Action="GenerateScript" Template="[1]">$(loc.ProgressTextGenerateScript)</ProgressText>
    994         <ProgressText Action="InstallSFPCatalogFile" Template="File: [1],  Dependencies: [2]">$(loc.ProgressTextInstallSFPCatalogFile)</ProgressText>
    995         <ProgressText Action="MsiPublishAssemblies" Template="Application Context:[1], Assembly Name:[2]">$(loc.ProgressTextMsiPublishAssemblies)</ProgressText>
    996         <ProgressText Action="MsiUnpublishAssemblies" Template="Application Context:[1], Assembly Name:[2]">$(loc.ProgressTextMsiUnpublishAssemblies)</ProgressText>
    997         <ProgressText Action="Rollback" Template="[1]">$(loc.ProgressTextRollback)</ProgressText>
    998         <ProgressText Action="RollbackCleanup" Template="File: [1]">$(loc.ProgressTextRollbackCleanup)</ProgressText>
    999         <ProgressText Action="UnmoveFiles" Template="File: [1], Directory: [9]">$(loc.ProgressTextUnmoveFiles)</ProgressText>
    1000         <ProgressText Action="UnpublishProduct">$(loc.ProgressTextUnpublishProduct)</ProgressText>
    1001 
    1002         <UIText Id="bytes">$(loc.UITextbytes)</UIText>
    1003         <UIText Id="GB">$(loc.UITextGB)</UIText>
    1004         <UIText Id="KB">$(loc.UITextKB)</UIText>
    1005         <UIText Id="MB">$(loc.UITextMB)</UIText>
     919        <ProgressText Action="CostFinalize">!(loc.ProgressTextCostFinalize)</ProgressText>
     920        <ProgressText Action="CostInitialize">!(loc.ProgressTextCostInitialize)</ProgressText>
     921        <ProgressText Action="FileCost">!(loc.ProgressTextFileCost)</ProgressText>
     922        <ProgressText Action="InstallValidate">!(loc.ProgressTextInstallValidate)</ProgressText>
     923        <ProgressText Action="InstallFiles" Template="File: [1],  Directory: [9],  Size: [6]">!(loc.ProgressTextInstallFiles)</ProgressText>
     924        <ProgressText Action="InstallAdminPackage" Template="File: [1], Directory: [9], Size: [6]">!(loc.ProgressTextInstallAdminPackage)</ProgressText>
     925        <ProgressText Action="CreateShortcuts" Template="Shortcut: [1]">!(loc.ProgressTextCreateShortcuts)</ProgressText>
     926        <ProgressText Action="PublishComponents" Template="Component ID: [1], Qualifier: [2]">!(loc.ProgressTextPublishComponents)</ProgressText>
     927        <ProgressText Action="PublishFeatures" Template="Feature: [1]">!(loc.ProgressTextPublishFeatures)</ProgressText>
     928        <ProgressText Action="PublishProduct">!(loc.ProgressTextPublishProduct)</ProgressText>
     929        <ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">!(loc.ProgressTextRegisterClassInfo)</ProgressText>
     930        <ProgressText Action="RegisterExtensionInfo" Template="Extension: [1]">!(loc.ProgressTextRegisterExtensionInfo)</ProgressText>
     931        <ProgressText Action="RegisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">!(loc.ProgressTextRegisterMIMEInfo)</ProgressText>
     932        <ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">!(loc.ProgressTextRegisterProgIdInfo)</ProgressText>
     933        <ProgressText Action="AllocateRegistrySpace" Template="Free space: [1]">!(loc.ProgressTextAllocateRegistrySpace)</ProgressText>
     934        <ProgressText Action="AppSearch" Template="Property: [1], Signature: [2]">!(loc.ProgressTextAppSearch)</ProgressText>
     935        <ProgressText Action="BindImage" Template="File: [1]">!(loc.ProgressTextBindImage)</ProgressText>
     936        <ProgressText Action="CCPSearch">!(loc.ProgressTextCCPSearch)</ProgressText>
     937        <ProgressText Action="CreateFolders" Template="Folder: [1]">!(loc.ProgressTextCreateFolders)</ProgressText>
     938        <ProgressText Action="DeleteServices" Template="Service: [1]">!(loc.ProgressTextDeleteServices)</ProgressText>
     939        <ProgressText Action="DuplicateFiles" Template="File: [1],  Directory: [9],  Size: [6]">!(loc.ProgressTextDuplicateFiles)</ProgressText>
     940        <ProgressText Action="FindRelatedProducts" Template="Found application: [1]">!(loc.ProgressTextFindRelatedProducts)</ProgressText>
     941        <ProgressText Action="InstallODBC">!(loc.ProgressTextInstallODBC)</ProgressText>
     942        <ProgressText Action="InstallServices" Template="Service: [2]">!(loc.ProgressTextInstallServices)</ProgressText>
     943        <ProgressText Action="LaunchConditions">!(loc.ProgressTextLaunchConditions)</ProgressText>
     944        <ProgressText Action="MigrateFeatureStates" Template="Application: [1]">!(loc.ProgressTextMigrateFeatureStates)</ProgressText>
     945        <ProgressText Action="MoveFiles" Template="File: [1],  Directory: [9],  Size: [6]">!(loc.ProgressTextMoveFiles)</ProgressText>
     946        <ProgressText Action="PatchFiles" Template="File: [1],  Directory: [2],  Size: [3]">!(loc.ProgressTextPatchFiles)</ProgressText>
     947        <ProgressText Action="ProcessComponents">!(loc.ProgressTextProcessComponents)</ProgressText>
     948        <ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">!(loc.ProgressTextRegisterComPlus)</ProgressText>
     949        <ProgressText Action="RegisterFonts" Template="Font: [1]">!(loc.ProgressTextRegisterFonts)</ProgressText>
     950        <ProgressText Action="RegisterProduct" Template="[1]">!(loc.ProgressTextRegisterProduct)</ProgressText>
     951        <ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">!(loc.ProgressTextRegisterTypeLibraries)</ProgressText>
     952        <ProgressText Action="RegisterUser" Template="[1]">!(loc.ProgressTextRegisterUser)</ProgressText>
     953        <ProgressText Action="RemoveDuplicateFiles" Template="File: [1], Directory: [9]">!(loc.ProgressTextRemoveDuplicateFiles)</ProgressText>
     954        <ProgressText Action="RemoveEnvironmentStrings" Template="Name: [1], Value: [2], Action [3]">!(loc.ProgressTextRemoveEnvironmentStrings)</ProgressText>
     955        <ProgressText Action="RemoveExistingProducts" Template="Application: [1], Command line: [2]">!(loc.ProgressTextRemoveExistingProducts)</ProgressText>
     956        <ProgressText Action="RemoveFiles" Template="File: [1], Directory: [9]">!(loc.ProgressTextRemoveFiles)</ProgressText>
     957        <ProgressText Action="RemoveFolders" Template="Folder: [1]">!(loc.ProgressTextRemoveFolders)</ProgressText>
     958        <ProgressText Action="RemoveIniValues" Template="File: [1],  Section: [2],  Key: [3], Value: [4]">!(loc.ProgressTextRemoveIniValues)</ProgressText>
     959        <ProgressText Action="RemoveODBC">!(loc.ProgressTextRemoveODBC)</ProgressText>
     960        <ProgressText Action="RemoveRegistryValues" Template="Key: [1], Name: [2]">!(loc.ProgressTextRemoveRegistryValues)</ProgressText>
     961        <ProgressText Action="RemoveShortcuts" Template="Shortcut: [1]">!(loc.ProgressTextRemoveShortcuts)</ProgressText>
     962        <ProgressText Action="RMCCPSearch">!(loc.ProgressTextRMCCPSearch)</ProgressText>
     963        <ProgressText Action="SelfRegModules" Template="File: [1], Folder: [2]">!(loc.ProgressTextSelfRegModules)</ProgressText>
     964        <ProgressText Action="SelfUnregModules" Template="File: [1], Folder: [2]">!(loc.ProgressTextSelfUnregModules)</ProgressText>
     965        <ProgressText Action="SetODBCFolders">!(loc.ProgressTextSetODBCFolders)</ProgressText>
     966        <ProgressText Action="StartServices" Template="Service: [1]">!(loc.ProgressTextStartServices)</ProgressText>
     967        <ProgressText Action="StopServices" Template="Service: [1]">!(loc.ProgressTextStopServices)</ProgressText>
     968        <ProgressText Action="UnpublishComponents" Template="Component ID: [1], Qualifier: [2]">!(loc.ProgressTextUnpublishComponents)</ProgressText>
     969        <ProgressText Action="UnpublishFeatures" Template="Feature: [1]">!(loc.ProgressTextUnpublishFeatures)</ProgressText>
     970        <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">!(loc.ProgressTextUnregisterClassInfo)</ProgressText>
     971        <ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">!(loc.ProgressTextUnregisterComPlus)</ProgressText>
     972        <ProgressText Action="UnregisterExtensionInfo" Template="Extension: [1]">!(loc.ProgressTextUnregisterExtensionInfo)</ProgressText>
     973        <ProgressText Action="UnregisterFonts" Template="Font: [1]">!(loc.ProgressTextUnregisterFonts)</ProgressText>
     974        <ProgressText Action="UnregisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">!(loc.ProgressTextUnregisterMIMEInfo)</ProgressText>
     975        <ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">!(loc.ProgressTextUnregisterProgIdInfo)</ProgressText>
     976        <ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">!(loc.ProgressTextUnregisterTypeLibraries)</ProgressText>
     977        <ProgressText Action="WriteEnvironmentStrings" Template="Name: [1], Value: [2], Action [3]">!(loc.ProgressTextWriteEnvironmentStrings)</ProgressText>
     978        <ProgressText Action="WriteIniValues" Template="File: [1],  Section: [2],  Key: [3], Value: [4]">!(loc.ProgressTextWriteIniValues)</ProgressText>
     979        <ProgressText Action="WriteRegistryValues" Template="Key: [1], Name: [2], Value: [3]">!(loc.ProgressTextWriteRegistryValues)</ProgressText>
     980        <ProgressText Action="Advertise">!(loc.ProgressTextAdvertise)</ProgressText>
     981        <ProgressText Action="GenerateScript" Template="[1]">!(loc.ProgressTextGenerateScript)</ProgressText>
     982        <ProgressText Action="InstallSFPCatalogFile" Template="File: [1],  Dependencies: [2]">!(loc.ProgressTextInstallSFPCatalogFile)</ProgressText>
     983        <ProgressText Action="MsiPublishAssemblies" Template="Application Context:[1], Assembly Name:[2]">!(loc.ProgressTextMsiPublishAssemblies)</ProgressText>
     984        <ProgressText Action="MsiUnpublishAssemblies" Template="Application Context:[1], Assembly Name:[2]">!(loc.ProgressTextMsiUnpublishAssemblies)</ProgressText>
     985        <ProgressText Action="Rollback" Template="[1]">!(loc.ProgressTextRollback)</ProgressText>
     986        <ProgressText Action="RollbackCleanup" Template="File: [1]">!(loc.ProgressTextRollbackCleanup)</ProgressText>
     987        <ProgressText Action="UnmoveFiles" Template="File: [1], Directory: [9]">!(loc.ProgressTextUnmoveFiles)</ProgressText>
     988        <ProgressText Action="UnpublishProduct">!(loc.ProgressTextUnpublishProduct)</ProgressText>
     989
     990        <UIText Id="bytes">!(loc.UITextbytes)</UIText>
     991        <UIText Id="GB">!(loc.UITextGB)</UIText>
     992        <UIText Id="KB">!(loc.UITextKB)</UIText>
     993        <UIText Id="MB">!(loc.UITextMB)</UIText>
    1006994        <UIText Id="AbsentPath"><![CDATA[-]]></UIText>
    1007         <UIText Id="MenuAbsent">$(loc.UITextMenuAbsent)</UIText>
    1008         <UIText Id="MenuAdvertise">$(loc.UITextMenuAdvertise)</UIText>
    1009         <UIText Id="MenuAllCD">$(loc.UITextMenuAllCD)</UIText>
    1010         <UIText Id="MenuAllLocal">$(loc.UITextMenuAllLocal)</UIText>
    1011         <UIText Id="MenuAllNetwork">$(loc.UITextMenuAllNetwork)</UIText>
    1012         <UIText Id="MenuCD">$(loc.UITextMenuCD)</UIText>
    1013         <UIText Id="MenuLocal">$(loc.UITextMenuLocal)</UIText>
    1014         <UIText Id="MenuNetwork">$(loc.UITextMenuNetwork)</UIText>
    1015         <UIText Id="ScriptInProgress">$(loc.UITextScriptInProgress)</UIText>
    1016         <UIText Id="SelAbsentAbsent">$(loc.UITextSelAbsentAbsent)</UIText>
    1017         <UIText Id="SelAbsentAdvertise">$(loc.UITextSelAbsentAdvertise)</UIText>
    1018         <UIText Id="SelAbsentCD">$(loc.UITextSelAbsentCD)</UIText>
    1019         <UIText Id="SelAbsentLocal">$(loc.UITextSelAbsentLocal)</UIText>
    1020         <UIText Id="SelAbsentNetwork">$(loc.UITextSelAbsentNetwork)</UIText>
    1021         <UIText Id="SelAdvertiseAbsent">$(loc.UITextSelAdvertiseAbsent)</UIText>
    1022         <UIText Id="SelAdvertiseAdvertise">$(loc.UITextSelAdvertiseAdvertise)</UIText>
    1023         <UIText Id="SelAdvertiseCD">$(loc.UITextSelAdvertiseCD)</UIText>
    1024         <UIText Id="SelAdvertiseLocal">$(loc.UITextSelAdvertiseLocal)</UIText>
    1025         <UIText Id="SelAdvertiseNetwork">$(loc.UITextSelAdvertiseNetwork)</UIText>
    1026         <UIText Id="SelCDAbsent">$(loc.UITextSelCDAbsent)</UIText>
    1027         <UIText Id="SelCDAdvertise">$(loc.UITextSelCDAdvertise)</UIText>
    1028         <UIText Id="SelCDCD">$(loc.UITextSelCDCD)</UIText>
    1029         <UIText Id="SelCDLocal">$(loc.UITextSelCDLocal)</UIText>
    1030         <UIText Id="SelChildCostNeg">$(loc.UITextSelChildCostNeg)</UIText>
    1031         <UIText Id="SelChildCostPos">$(loc.UITextSelChildCostPos)</UIText>
    1032         <UIText Id="SelCostPending">$(loc.UITextSelCostPending)</UIText>
    1033         <UIText Id="SelLocalAbsent">$(loc.UITextSelLocalAbsent)</UIText>
    1034         <UIText Id="SelLocalAdvertise">$(loc.UITextSelLocalAdvertise)</UIText>
    1035         <UIText Id="SelLocalCD">$(loc.UITextSelLocalCD)</UIText>
    1036         <UIText Id="SelLocalLocal">$(loc.UITextSelLocalLocal)</UIText>
    1037         <UIText Id="SelLocalNetwork">$(loc.UITextSelLocalNetwork)</UIText>
    1038         <UIText Id="SelNetworkAbsent">$(loc.UITextSelNetworkAbsent)</UIText>
    1039         <UIText Id="SelNetworkAdvertise">$(loc.UITextSelNetworkAdvertise)</UIText>
    1040         <UIText Id="SelNetworkLocal">$(loc.UITextSelNetworkLocal)</UIText>
    1041         <UIText Id="SelNetworkNetwork">$(loc.UITextSelNetworkNetwork)</UIText>
    1042         <UIText Id="SelParentCostNegNeg">$(loc.UITextSelParentCostNegNeg)</UIText>
    1043         <UIText Id="SelParentCostNegPos">$(loc.UITextSelParentCostNegPos)</UIText>
    1044         <UIText Id="SelParentCostPosNeg">$(loc.UITextSelParentCostPosNeg)</UIText>
    1045         <UIText Id="SelParentCostPosPos">$(loc.UITextSelParentCostPosPos)</UIText>
    1046         <UIText Id="TimeRemaining">$(loc.UITextTimeRemaining)</UIText>
    1047         <UIText Id="VolumeCostAvailable">$(loc.UITextVolumeCostAvailable)</UIText>
    1048         <UIText Id="VolumeCostDifference">$(loc.UITextVolumeCostDifference)</UIText>
    1049         <UIText Id="VolumeCostRequired">$(loc.UITextVolumeCostRequired)</UIText>
    1050         <UIText Id="VolumeCostSize">$(loc.UITextVolumeCostSize)</UIText>
    1051         <UIText Id="VolumeCostVolume">$(loc.UITextVolumeCostVolume)</UIText>
     995        <UIText Id="MenuAbsent">!(loc.UITextMenuAbsent)</UIText>
     996        <UIText Id="MenuAdvertise">!(loc.UITextMenuAdvertise)</UIText>
     997        <UIText Id="MenuAllCD">!(loc.UITextMenuAllCD)</UIText>
     998        <UIText Id="MenuAllLocal">!(loc.UITextMenuAllLocal)</UIText>
     999        <UIText Id="MenuAllNetwork">!(loc.UITextMenuAllNetwork)</UIText>
     1000        <UIText Id="MenuCD">!(loc.UITextMenuCD)</UIText>
     1001        <UIText Id="MenuLocal">!(loc.UITextMenuLocal)</UIText>
     1002        <UIText Id="MenuNetwork">!(loc.UITextMenuNetwork)</UIText>
     1003        <UIText Id="ScriptInProgress">!(loc.UITextScriptInProgress)</UIText>
     1004        <UIText Id="SelAbsentAbsent">!(loc.UITextSelAbsentAbsent)</UIText>
     1005        <UIText Id="SelAbsentAdvertise">!(loc.UITextSelAbsentAdvertise)</UIText>
     1006        <UIText Id="SelAbsentCD">!(loc.UITextSelAbsentCD)</UIText>
     1007        <UIText Id="SelAbsentLocal">!(loc.UITextSelAbsentLocal)</UIText>
     1008        <UIText Id="SelAbsentNetwork">!(loc.UITextSelAbsentNetwork)</UIText>
     1009        <UIText Id="SelAdvertiseAbsent">!(loc.UITextSelAdvertiseAbsent)</UIText>
     1010        <UIText Id="SelAdvertiseAdvertise">!(loc.UITextSelAdvertiseAdvertise)</UIText>
     1011        <UIText Id="SelAdvertiseCD">!(loc.UITextSelAdvertiseCD)</UIText>
     1012        <UIText Id="SelAdvertiseLocal">!(loc.UITextSelAdvertiseLocal)</UIText>
     1013        <UIText Id="SelAdvertiseNetwork">!(loc.UITextSelAdvertiseNetwork)</UIText>
     1014        <UIText Id="SelCDAbsent">!(loc.UITextSelCDAbsent)</UIText>
     1015        <UIText Id="SelCDAdvertise">!(loc.UITextSelCDAdvertise)</UIText>
     1016        <UIText Id="SelCDCD">!(loc.UITextSelCDCD)</UIText>
     1017        <UIText Id="SelCDLocal">!(loc.UITextSelCDLocal)</UIText>
     1018        <UIText Id="SelChildCostNeg">!(loc.UITextSelChildCostNeg)</UIText>
     1019        <UIText Id="SelChildCostPos">!(loc.UITextSelChildCostPos)</UIText>
     1020        <UIText Id="SelCostPending">!(loc.UITextSelCostPending)</UIText>
     1021        <UIText Id="SelLocalAbsent">!(loc.UITextSelLocalAbsent)</UIText>
     1022        <UIText Id="SelLocalAdvertise">!(loc.UITextSelLocalAdvertise)</UIText>
     1023        <UIText Id="SelLocalCD">!(loc.UITextSelLocalCD)</UIText>
     1024        <UIText Id="SelLocalLocal">!(loc.UITextSelLocalLocal)</UIText>
     1025        <UIText Id="SelLocalNetwork">!(loc.UITextSelLocalNetwork)</UIText>
     1026        <UIText Id="SelNetworkAbsent">!(loc.UITextSelNetworkAbsent)</UIText>
     1027        <UIText Id="SelNetworkAdvertise">!(loc.UITextSelNetworkAdvertise)</UIText>
     1028        <UIText Id="SelNetworkLocal">!(loc.UITextSelNetworkLocal)</UIText>
     1029        <UIText Id="SelNetworkNetwork">!(loc.UITextSelNetworkNetwork)</UIText>
     1030        <UIText Id="SelParentCostNegNeg">!(loc.UITextSelParentCostNegNeg)</UIText>
     1031        <UIText Id="SelParentCostNegPos">!(loc.UITextSelParentCostNegPos)</UIText>
     1032        <UIText Id="SelParentCostPosNeg">!(loc.UITextSelParentCostPosNeg)</UIText>
     1033        <UIText Id="SelParentCostPosPos">!(loc.UITextSelParentCostPosPos)</UIText>
     1034        <UIText Id="TimeRemaining">!(loc.UITextTimeRemaining)</UIText>
     1035        <UIText Id="VolumeCostAvailable">!(loc.UITextVolumeCostAvailable)</UIText>
     1036        <UIText Id="VolumeCostDifference">!(loc.UITextVolumeCostDifference)</UIText>
     1037        <UIText Id="VolumeCostRequired">!(loc.UITextVolumeCostRequired)</UIText>
     1038        <UIText Id="VolumeCostSize">!(loc.UITextVolumeCostSize)</UIText>
     1039        <UIText Id="VolumeCostVolume">!(loc.UITextVolumeCostVolume)</UIText>
    10521040
    10531041        <!-- Own error messages -->
    1054         <Error Id="25001">$(loc.Error25001)</Error>
     1042        <Error Id="25001">!(loc.Error25001)</Error>
    10551043
    10561044        <!-- The text used in front of the build number -->
     
    10631051        <Property Id="IAgree">No</Property>
    10641052
    1065         <!-- Aliases for the icon files -->
     1053        <!-- Icon files used for the UI -->
     1054        <Binary Id="infoico" SourceFile="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Info.ico" />
     1055        <Binary Id="exclico" SourceFile="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Exclamation.ico" />
     1056        <Binary Id="folderupico" SourceFile="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Up.ico" />
     1057        <Binary Id="foldernewico" SourceFile="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\New.ico" />
     1058        <Binary Id="removico" SourceFile="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Remove.ico" />
     1059        <Binary Id="repairic" SourceFile="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Repair.ico" />
     1060
     1061        <!-- Graphic files used for the UI -->
     1062        <!-- See: http://wix.sourceforge.net/manual-wix3/WixUI_customizations.htm -->
     1063        <Binary Id="bannerjpg" SourceFile="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Banner.jpg" />
     1064        <Binary Id="dlgjpg" SourceFile="$(env.VBOX_BRAND_WIN_INST_DLGJPG)" />
     1065
     1066        <!-- Aliases for the graphic files -->
     1067        <Property Id="InfoIcon">infoico</Property>
     1068        <Property Id="ExclamationIcon">exclico</Property>
    10661069        <Property Id="RemoveIcon">removico</Property>
    10671070        <Property Id="RepairIcon">repairic</Property>
    1068 
    1069         <!-- Icon files used for the UI -->
    1070         <Binary Id="removico" src="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Remove.ico" />
    1071         <Binary Id="repairic" src="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Repair.ico" />
    1072         <Binary Id="folderupico" src="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Up.ico" />
    1073         <Binary Id="foldernewico" src="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\New.ico" />
    1074 
    1075         <!-- Graphic files used for the UI -->
    1076         <!-- See: http://wix.sourceforge.net/manual-wix3/WixUI_customizations.htm -->
    1077         <Binary Id="bannerjpg" src="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Banner.jpg" />
    1078         <Binary Id="dlgjpg" src="$(env.VBOX_BRAND_WIN_INST_DLGJPG)" />
    1079 
    1080         <!-- Aliases for the graphic files -->
    10811071        <Property Id="DialogBitmap">dlgjpg</Property>
    10821072        <Property Id="BannerBitmap">bannerjpg</Property>
     
    10841074        <Property Id="FolderNew">foldernewico</Property>
    10851075
    1086         <Binary Id="wixca" src="wixca.dll"/>
    1087 
    10881076        <!-- This defines the order in which the GUI panels will be shown to the user -->
    10891077        <InstallUISequence>
    10901078
    1091             <Custom Action="OriginalTargetDir" After="FileCost"><![CDATA[(NOT INSTALLDIR) AND (NOT EXISTINGINSTALLDIR)]]></Custom>
    1092             <Custom Action="DefaultTargetDir" After="FileCost"><![CDATA[NOT Installed AND (NOT INSTALLDIR) AND EXISTINGINSTALLDIR]]></Custom>
     1079            <Custom Action="ca_OriginalTargetDir" After="FileCost"><![CDATA[(NOT INSTALLDIR) AND (NOT EXISTINGINSTALLDIR)]]></Custom>
     1080            <Custom Action="ca_DefaultTargetDir" After="FileCost"><![CDATA[NOT Installed AND (NOT INSTALLDIR) AND EXISTINGINSTALLDIR]]></Custom>
    10931081
    10941082            <FindRelatedProducts Suppress="no">1</FindRelatedProducts>
    10951083
    1096             <Show Dialog="FatalErrorDlg" OnExit="error" />
    1097             <Show Dialog="UserExitDlg" OnExit="cancel" />
    1098             <Show Dialog="PrepareDlg" After="LaunchConditions" />
    1099             <Show Dialog="WelcomeDlg" After="MigrateFeatureStates">NOT Installed</Show>
    1100             <Show Dialog="ResumeDlg" After="WelcomeDlg">Installed AND (RESUME OR Preselected)</Show>
    1101             <Show Dialog="MaintenanceWelcomeDlg" After="ResumeDlg">Installed AND (NOT RESUME) AND (NOT Preselected)</Show>
    1102             <Show Dialog="ExitDlg" OnExit="success">1</Show>
    1103             <Show Dialog="ProgressDlg" After="MaintenanceWelcomeDlg" />
     1084            <Show Dialog="VBoxFatalErrorDlg" OnExit="error" />
     1085            <Show Dialog="VBoxUserExitDlg" OnExit="cancel" />
     1086            <Show Dialog="VBoxPrepareDlg" After="LaunchConditions" />
     1087            <Show Dialog="VBoxWelcomeDlg" After="MigrateFeatureStates">NOT Installed</Show>
     1088            <Show Dialog="VBoxResumeDlg" After="VBoxWelcomeDlg">Installed AND (RESUME OR Preselected)</Show>
     1089            <Show Dialog="VBoxMaintenanceWelcomeDlg" After="VBoxResumeDlg">Installed AND (NOT RESUME) AND (NOT Preselected)</Show>
     1090            <Show Dialog="VBoxExitDlg" OnExit="success">1</Show>
     1091            <Show Dialog="VBoxProgressDlg" After="VBoxMaintenanceWelcomeDlg" />
    11041092        </InstallUISequence>
     1093
     1094        <!-- The AdminUISequence table lists actions that the installer calls in sequence when the top-level ADMIN
     1095             action is executed and the internal user interface level is set to full UI or reduced UI. The installer
     1096             skips the actions in this table if the user interface level is set to basic UI or no UI. -->
     1097         <AdminUISequence>
     1098            <Show Dialog="VBoxFatalErrorDlg" OnExit="error" />
     1099            <Show Dialog="VBoxUserExitDlg" OnExit="cancel" />
     1100            <Show Dialog="VBoxExitDlg" OnExit="success" />
     1101         </AdminUISequence>
    11051102    </UI>
    11061103
  • trunk/src/VBox/Installer/win/VBoxKey.wxi

    r37016 r37289  
    11<Include>
    2     <Registry Root="HKLM" Key="$(var.Property_RegKey)" Name="Version" Value="%VER%" Type="string" />
    3     <Registry Root="HKLM" Key="$(var.Property_RegKey)" Name="VersionExt" Value="%VER_EXT%" Type="string" />
    4     <Registry Root="HKLM" Key="$(var.Property_RegKey)" Name="InstallDir" Value="[INSTALLDIR]" Type="string" />
     2    <RegistryValue Root="HKLM" Key="$(var.Property_RegKey)" Name="Version" Value="%VER%" Type="string" />
     3    <RegistryValue Root="HKLM" Key="$(var.Property_RegKey)" Name="VersionExt" Value="%VER_EXT%" Type="string" />
     4    <RegistryValue Root="HKLM" Key="$(var.Property_RegKey)" Name="InstallDir" Value="[INSTALLDIR]" Type="string" />
    55</Include>
  • trunk/src/VBox/Installer/win/VirtualBox.wxs

    r37016 r37289  
    1414-->
    1515
    16 <?define Property_RegKey ="Software\$(env.VBOX_VENDOR_SHORT)\VirtualBox" ?>
     16<?define Property_RegKey = "Software\$(env.VBOX_VENDOR_SHORT)\VirtualBox" ?>
     17<?define Property_RegKeyInstall = "Software\$(env.VBOX_VENDOR_SHORT)\VirtualBox\Install" ?>
    1718<?define Property_Version = "$(env.VBOX_VERSION_STRING_RAW)" ?>
    1819<?define Property_VersionExt = "$(env.VBOX_VERSION_STRING)" ?>
     
    3233<?else ?>
    3334    <?define Property_ProgramFiles = "ProgramFilesFolder" ?>
    34     <?define Property_Platform     = "Intel" ?>
     35    <?define Property_Platform     = "x86" ?>
    3536    <?define Property_Win64        = "no" ?>
    3637
     
    5051<?endif ?>
    5152
    52 <Wix xmlns="http://schemas.microsoft.com/wix/2003/01/wi">
     53<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     54     xmlns:difxapp="http://schemas.microsoft.com/wix/DifxAppExtension">
    5355
    5456    <!-- Note: GUIDs in WiX *must* be uppercase! -->
     
    6567         Old upgrade code of innotek: UpgradeCode="F5FFAEBF-97AE-4038-8F91-4DE719456127" -->
    6668
    67     <Product Id="????????-????-????-????-????????????"
     69    <Product Id="*"
    6870             UpgradeCode="C4BAD770-BFE8-4D2C-A592-693028A7215B"
    6971             Name="$(env.VBOX_PRODUCT) $(env.VBOX_VERSION_STRING)"
    70              Language="$(loc.LANG)"
     72             Language="!(loc.LANG)"
    7173             Codepage="1252"
    7274             Version="$(var.Property_Version)"
     
    7476
    7577        <!-- Package GUIDs must be different for each package. The "???" directs WiX to create one. -->
    76         <Package Id="????????-????-????-????-????????????" Keywords="Installer"
     78        <Package Id="*" Keywords="Installer"
    7779                 Description="$(env.VBOX_PRODUCT) $(var.Property_VersionExt) installation package"
    7880                 Comments="$(env.VBOX_PRODUCT) installation package"
     
    8183                 Compressed="yes"
    8284                 InstallPrivileges="elevated"
    83                  Platforms="$(var.Property_Platform)"/>
     85                 Platform="$(var.Property_Platform)"/>
    8486
    8587        <!-- *************************** Upgrade packages only ******************************* -->
     
    118120        <!-- Make sure installation will not start on anything other but the NT family -->
    119121<?if $(env.BUILD_TARGET_ARCH) = "amd64" ?>
    120         <Condition Message="$(loc.Only64Bit)">
     122        <Condition Message="!(loc.Only64Bit)">
    121123            VersionNT64
    122124        </Condition>
    123125<?else ?>
    124         <Condition Message="$(loc.Only32Bit)">
     126        <Condition Message="!(loc.Only32Bit)">
    125127            NOT VersionNT64
    126128        </Condition>
    127129
    128         <Condition Message="$(loc.WrongOS)">
     130        <Condition Message="!(loc.WrongOS)">
    129131            NOT VersionNT=500 AND NOT Version9X AND NOT VersionNT64
    130132        </Condition>
     
    132134<?endif ?>
    133135
    134         <Condition Message="$(loc.NeedAdmin)">
     136        <Condition Message="!(loc.NeedAdmin)">
    135137            Privileged
    136138        </Condition>
    137139
    138         <!-- Force overwriting all files and re-create shortcuts to guarantee a working environment. -->
     140        <!-- Force overwriting all files and re-create shortcuts to guarantee a working environment -->
    139141        <Property Id='REINSTALLMODE' Value='amus'/>
    140142
     
    143145        <!-- Figure out where a previous installation was, if any -->
    144146<?if $(env.BUILD_TARGET_ARCH) = "amd64" ?>
    145         <CustomAction Id="OriginalTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[ProgramFiles64Folder]\$(env.VBOX_VENDOR_SHORT)\VirtualBox" />
     147        <CustomAction Id="ca_OriginalTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[ProgramFiles64Folder]\$(env.VBOX_VENDOR_SHORT)\VirtualBox" />
    146148
    147149        <Property Id="EXISTINGINSTALLDIR" Secure="yes">
    148150            <RegistrySearch Id="RegistryGetInstallPath" Root="HKLM" Key="$(var.Property_RegKey)" Name="InstallDir" Type="raw" Win64="$(var.Property_Win64)"/>
    149151        </Property>
    150         <CustomAction Id="DefaultTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[EXISTINGINSTALLDIR]" />
     152        <CustomAction Id="ca_DefaultTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[EXISTINGINSTALLDIR]" />
    151153<?else ?>
    152         <CustomAction Id="OriginalTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[ProgramFilesFolder]\$(env.VBOX_VENDOR_SHORT)\VirtualBox" />
     154        <CustomAction Id="ca_OriginalTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[ProgramFilesFolder]\$(env.VBOX_VENDOR_SHORT)\VirtualBox" />
    153155
    154156        <Property Id="EXISTINGINSTALLDIR" Secure="yes">
    155157            <RegistrySearch Id="RegistryGetInstallPath" Root="HKLM" Key="$(var.Property_RegKey)" Name="InstallDir" Type="raw" Win64="$(var.Property_Win64)"/>
    156158        </Property>
    157         <CustomAction Id="DefaultTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[EXISTINGINSTALLDIR]" />
     159        <CustomAction Id="ca_DefaultTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[EXISTINGINSTALLDIR]" />
    158160<?endif ?>
    159161
    160162        <Binary Id="VBoxInstallHelper" SourceFile="$(env.PATH_OUT)\bin\VBoxInstallHelper.dll" />
    161         <CustomAction Id="CheckSerial" BinaryKey="VBoxInstallHelper" DllEntry="CheckSerial" Impersonate="no"/>
    162         <CustomAction Id="InstallPythonAPI" BinaryKey="VBoxInstallHelper" DllEntry="InstallPythonAPI" Impersonate="no"/>
    163         <CustomAction Id="InstallBranding" BinaryKey="VBoxInstallHelper" DllEntry="InstallBranding" Impersonate="no"/>
    164         <CustomAction Id="UninstallBranding" BinaryKey="VBoxInstallHelper" DllEntry="UninstallBranding" Impersonate="no"/>
    165 
    166         <CustomAction Id="UninstallTAPInstances" BinaryKey="VBoxInstallHelper"
    167             DllEntry="UninstallTAPInstances" Execute="deferred" Return="check" Impersonate="no"/>
     163        <CustomAction Id="ca_CheckSerial" BinaryKey="VBoxInstallHelper" DllEntry="CheckSerial" Impersonate="no"/>
     164        <CustomAction Id="ca_InstallPythonAPI" BinaryKey="VBoxInstallHelper" DllEntry="InstallPythonAPI" Execute="deferred" Impersonate="no"/>
     165        <CustomAction Id="ca_InstallBranding" BinaryKey="VBoxInstallHelper" DllEntry="InstallBranding" Execute="deferred" Impersonate="no"/>
     166        <CustomAction Id="ca_UninstallBranding" BinaryKey="VBoxInstallHelper" DllEntry="UninstallBranding" Execute="deferred" Impersonate="no"/>
     167
     168        <CustomAction Id="ca_UninstallTAPInstances" BinaryKey="VBoxInstallHelper"
     169                      DllEntry="UninstallTAPInstances" Execute="deferred" Return="check" Impersonate="no"/>
    168170
    169171<?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
    170         <CustomAction Id="CreateHostOnlyInterfaceArgs" Property="CreateHostOnlyInterface" Value="[INSTALLDIR]" Execute="immediate"/>
    171         <CustomAction Id="CreateHostOnlyInterface"  BinaryKey="VBoxInstallHelper"  DllEntry="CreateHostOnlyInterface"  Execute="deferred" Return="check" Impersonate="no"/>
    172 
    173         <CustomAction Id="RemoveHostOnlyInterfaces" BinaryKey="VBoxInstallHelper"  DllEntry="RemoveHostOnlyInterfaces" Execute="deferred" Return="check" Impersonate="no"/>
    174 
    175         <CustomAction Id="InstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="InstallNetFlt" Execute="deferred" Return="check" Impersonate="no"/>
    176         <CustomAction Id="InstallNetFltArgs" Property="InstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
    177 
    178         <CustomAction Id="RollbackInstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="UninstallNetFlt" Execute="rollback" Impersonate="no"/>
    179         <CustomAction Id="RollbackInstallNetFltArgs" Property="RollbackInstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
    180 
    181         <CustomAction Id="UninstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="UninstallNetFlt" Execute="deferred" Return="check" Impersonate="no"/>
    182         <CustomAction Id="UninstallNetFltArgs" Property="UninstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
    183 
    184         <CustomAction Id="RollbackUninstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="InstallNetFlt" Execute="rollback" Impersonate="no"/>
    185         <CustomAction Id="RollbackUninstallNetFltArgs" Property="RollbackUninstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
    186 <?endif ?>
    187 
    188         <CustomAction Id="StartVBox" FileKey="vbox" ExeCommand="" Return="asyncNoWait" Impersonate="yes" />
    189 
    190         <!-- Detect old Sun installation. -->
    191         <!-- Force a manual uninstall of an already installed Sun VirtualBox version first. -->
     172        <CustomAction Id="ca_CreateHostOnlyInterfaceArgs" Property="ca_CreateHostOnlyInterface" Value="[INSTALLDIR]" Execute="immediate"/>
     173        <CustomAction Id="ca_CreateHostOnlyInterface"  BinaryKey="VBoxInstallHelper"  DllEntry="CreateHostOnlyInterface" Execute="deferred" Return="check" Impersonate="no"/>
     174
     175        <CustomAction Id="ca_RemoveHostOnlyInterfaces" BinaryKey="VBoxInstallHelper"  DllEntry="RemoveHostOnlyInterfaces" Execute="deferred" Return="check" Impersonate="no"/>
     176
     177        <CustomAction Id="ca_InstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="InstallNetFlt" Execute="deferred" Return="check" Impersonate="no"/>
     178        <CustomAction Id="ca_InstallNetFltArgs" Property="ca_InstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
     179
     180        <CustomAction Id="ca_RollbackInstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="UninstallNetFlt" Execute="rollback" Impersonate="no"/>
     181        <CustomAction Id="ca_RollbackInstallNetFltArgs" Property="ca_RollbackInstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
     182
     183        <CustomAction Id="ca_UninstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="UninstallNetFlt" Execute="deferred" Return="check" Impersonate="no"/>
     184        <CustomAction Id="ca_UninstallNetFltArgs" Property="ca_UninstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
     185
     186        <CustomAction Id="ca_RollbackUninstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="InstallNetFlt" Execute="rollback" Impersonate="no"/>
     187        <CustomAction Id="ca_RollbackUninstallNetFltArgs" Property="ca_RollbackUninstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
     188<?endif ?>
     189
     190        <CustomAction Id="ca_StartVBox" FileKey="file_VirtualBox.exe" ExeCommand="" Return="asyncNoWait" Impersonate="yes" />
     191
     192        <!-- Detect old Sun installation -->
     193        <!-- Force a manual uninstall of an already installed Sun VirtualBox version first -->
    192194        <!--<Property Id="VBOXSUN">
    193195            <RegistrySearch Id="RegSearchSunVersion" Root="HKLM" Key="SOFTWARE\Sun\VirtualBox" Name="Version" Type="raw" Win64="$(var.Property_Win64)"/>
    194196        </Property>
    195         <Condition Message="$(loc.SunFound)">
     197        <Condition Message="!(loc.SunFound)">
    196198            NOT VBOXSUN
    197199        </Condition>-->
    198200
    199         <!-- Detect old innotek installation. -->
    200         <!-- Force a manual uninstall of an already installed innotek VirtualBox version first. -->
     201        <!-- Detect old innotek installation -->
     202        <!-- Force a manual uninstall of an already installed innotek VirtualBox version first -->
    201203        <Property Id="VBOXINNOTEK">
    202204            <RegistrySearch Id="RegSearchInnotekVersion" Root="HKLM" Key="SOFTWARE\Innotek\VirtualBox" Name="Version" Type="raw" Win64="$(var.Property_Win64)"/>
    203205        </Property>
    204         <Condition Message="$(loc.InnotekFound)">
     206        <Condition Message="!(loc.InnotekFound)">
    205207            NOT VBOXINNOTEK
    206208        </Condition>
     
    214216        <Directory Id="TARGETDIR" Name="SourceDir">
    215217           <Directory Id="$(var.Property_ProgramFiles)" Name="PFiles">
    216                 <Directory Id="INSTALLDIR" Name="VirtualB" LongName="$(env.VBOX_PRODUCT)">
     218                <Directory Id="INSTALLDIR" Name="$(env.VBOX_PRODUCT)">
    217219
    218220<?if $(env.VBOX_WITH_DOCS_PACKING) = "yes" ?>
    219                     <Directory Id="documents" Name="doc">
     221                    <Directory Id="dir_Documents" Name="doc">
    220222                        <!-- The documentation is a separate component. This allows to split the install process
    221223                             into pieces if ever necessary. Maintenance is easier, too. The following component
    222224                             will be installed in the "doc" folder. -->
    223                         <Component Id="docs" Guid="40BD12C5-89A8-4B81-8A5E-5EEE2C2763C4">
     225                        <Component Id="cp_Docs" Guid="40BD12C5-89A8-4B81-8A5E-5EEE2C2763C4">
    224226                            <?include $(env.PATH_TARGET)\Files_Doc.wxi ?>
    225227                        </Component>
    226 
    227228                    </Directory>
    228229<?endif ?>
    229230                    <!-- Device driver directory -->
    230                     <Directory Id="drivers" Name="drivers">
    231 
    232                         <Directory Id="vboxdrv" Name="vboxdrv">
    233                             <Component Id="VBoxDrv" Guid="D3E2F2BB-569F-46A2-836C-BDF30FF1EDF8"
    234                                        DriverSequence="2" DriverLegacy="$(var.Property_DriverLegacy)" DriverForceInstall="yes"
    235                                        DriverAddRemovePrograms="no" DriverPlugAndPlayPrompt="no" Win64="$(var.Property_Win64)">
    236                                 <File Id="vboxdrvsys" Name="VBoxDrv.sys" DiskId="1" Vital="yes" KeyPath="yes"
     231                    <Directory Id="dir_Drivers" Name="drivers">
     232                        <Directory Id="dir_VBoxDrv" Name="vboxdrv">
     233                            <Component Id="cp_VBoxDrv" Guid="D3E2F2BB-569F-46A2-836C-BDF30FF1EDF8" Win64="$(var.Property_Win64)">
     234                                <difxapp:Driver AddRemovePrograms="no" ForceInstall="yes"
     235                                                Legacy="$(var.Property_DriverLegacy)" Sequence="2" PlugAndPlayPrompt="no"/>
     236                                <File Id="file_VBoxDrv.sys" Name="VBoxDrv.sys"   KeyPath="yes"
    237237                                      Source="$(env.PATH_OUT)\bin\VBoxDrv.sys"/>
    238                                 <File Id="vboxdrvinf" Name="VBoxDrv.inf" DiskId="1" Vital="yes"
     238                                <File Id="file_VBoxDrv.inf" Name="VBoxDrv.inf"
    239239                                      Source="$(env.PATH_OUT)\bin\VBoxDrv.inf" />
    240240<?if $(env.VBOX_SIGNING_MODE) != none ?>
    241                                 <File Id="vboxdrvcat" Name="VBoxDrv.cat" DiskId="1" Vital="yes"
     241                                <File Id="file_VBoxDrv.cat" Name="VBoxDrv.cat"
    242242                                      Source="$(env.PATH_OUT)\bin\VBoxDrv.cat" />
    243243<?endif ?>
    244                             </Component> <!-- Directory "drivers\vboxdrv" -->
     244                            </Component>
    245245                        </Directory>
    246246
    247                         <Directory Id="usbdrv" Name="USB">
    248                             <Directory Id="usbfilter" Name="filter">
    249                                 <Component Id="USBFilterDriver" Guid="B7D782D2-96DF-4775-A0E1-A76CF7B04B65"
    250                                            DriverSequence="0" DriverLegacy="$(var.Property_DriverLegacy)" DriverForceInstall="yes"
    251                                            DriverAddRemovePrograms="no" DriverPlugAndPlayPrompt="no" Win64="$(var.Property_Win64)">
    252                                     <File Id="vboxusbmon"  Name="VBoxUSBM.sys" LongName="VBoxUSBMon.sys" DiskId="1"  Vital="yes"
     247                        <Directory Id="dir_USB" Name="USB">
     248                            <Directory Id="dir_USBFilter" Name="filter">
     249                                <Component Id="cp_USBFilterDriver" Guid="B7D782D2-96DF-4775-A0E1-A76CF7B04B65" Win64="$(var.Property_Win64)">
     250                                    <difxapp:Driver AddRemovePrograms="no" ForceInstall="yes"
     251                                                    Legacy="$(var.Property_DriverLegacy)" Sequence="0" PlugAndPlayPrompt="no"/>
     252                                    <File Id="file_VBoxUSBMon.sys" Name="VBoxUSBMon.sys"
    253253                                          Source="$(env.PATH_OUT)\bin\VBoxUSBMon.sys" />
    254                                     <File Id="vboxusbmoninf"  Name="VBoxUSBM.inf" LongName="VBoxUSBMon.inf" DiskId="1"  Vital="yes"
     254                                    <File Id="file_VBoxUSBMon.inf" Name="VBoxUSBMon.inf"
    255255                                          Source="$(env.PATH_OUT)\bin\VBoxUSBMon.inf" />
    256256<?if $(env.VBOX_SIGNING_MODE) != none ?>
    257                                     <File Id="vboxusbmoncat" Name="VBoxUSBM.cat" LongName="VBoxUSBMon.cat" DiskId="1" Vital="yes"
     257                                    <File Id="file_VBoxUSBMon.cat" Name="VBoxUSBMon.cat"
    258258                                          Source="$(env.PATH_OUT)\bin\VBoxUSBMon.cat" />
    259259<?endif ?>
    260                                 </Component> <!-- USBFilterDriver -->
    261                             </Directory> <!-- Directory "drivers\usb\filter" -->
    262 
    263                             <Directory Id="usbdevice" Name="device">
    264                                 <Component Id="USBDeviceDriver" Guid="010FE46A-E358-43E2-8BDC-38BC8BEC82E0"
    265                                            DriverSequence="0" DriverLegacy="$(var.Property_DriverLegacy)" DriverForceInstall="yes"
    266                                            DriverAddRemovePrograms="no" DriverPlugAndPlayPrompt="no" Win64="$(var.Property_Win64)">
    267                                     <File Id="vboxusbdrv" Name="VBoxUSB.sys" DiskId="1"  Vital="yes"
     260                                </Component>
     261                            </Directory>
     262
     263                            <Directory Id="dir_USBDevice" Name="device">
     264                                <Component Id="cp_USBDeviceDriver" Guid="010FE46A-E358-43E2-8BDC-38BC8BEC82E0" Win64="$(var.Property_Win64)">
     265                                    <difxapp:Driver AddRemovePrograms="no" ForceInstall="yes"
     266                                                    Legacy="$(var.Property_DriverLegacy)" Sequence="0" PlugAndPlayPrompt="no"/>
     267                                    <File Id="file_VBoxUSB.sys" Name="VBoxUSB.sys"
    268268                                          Source="$(env.PATH_OUT)\bin\VBoxUSB.sys" />
    269                                     <File Id="vboxusbinf" Name="VBoxUSB.inf" DiskId="1"  Vital="yes"
     269                                    <File Id="file_VBoxUSB.inf" Name="VBoxUSB.inf"
    270270                                          Source="$(env.PATH_OUT)\bin\VBoxUSB.inf" />
    271271<?if $(env.VBOX_SIGNING_MODE) != none ?>
    272                                     <File Id="vboxusbcat" Name="VBoxUSB.cat" DiskId="1" Vital="yes"
     272                                    <File Id="file_VBoxUSB.cat" Name="VBoxUSB.cat"
    273273                                          Source="$(env.PATH_OUT)\bin\VBoxUSB.cat" />
    274274<?endif ?>
    275                                 </Component> <!-- USBDeviceDriver -->
    276                             </Directory> <!-- Directory "drivers\usb\device" -->
    277                         </Directory> <!-- Directory "drivers\usb" -->
     275                                </Component>
     276                            </Directory>
     277                        </Directory>
    278278
    279279<?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
    280                         <Directory Id="network" Name="network">
    281                             <Directory Id="NetFltDir" Name="netflt">
    282                                 <Component Id="NetFltDriver" Guid="F0A02F6B-A349-42f8-A2EB-569DCAAAF846" Win64="$(var.Property_Win64)">
    283                                             <File Id="vboxnetfltsys" Name="VBoxNFlt.sys" LongName="VBoxNetFlt.sys" DiskId="1" Vital="yes" KeyPath="yes"
    284                                                   Source="$(env.PATH_OUT)\bin\VBoxNetFlt.sys"
    285                                                   Checksum="yes"/>
    286                                             <File Id="vboxnetfltnobjdll" Name="VBoxNob.dll" LongName="VBoxNetFltNobj.dll" DiskId="1" Vital="yes"
    287                                                   Source="$(env.PATH_OUT)\bin\VBoxNetFltNobj.dll"
    288                                                   Checksum="yes"/>
    289                                             <File Id="vboxnetfltminf" Name="VBoxNFlM.inf" LongName="VBoxNetFltM.inf" DiskId="1" Vital="yes"
    290                                                   Source="$(env.PATH_OUT)\bin\VBoxNetFltM.inf" />
    291                                             <File Id="vboxnetfltinf" Name="VBoxNFlt.inf" LongName="VBoxNetFlt.inf" DiskId="1" Vital="yes"
    292                                                   Source="$(env.PATH_OUT)\bin\VBoxNetFlt.inf" />
     280                        <Directory Id="dir_Network" Name="network">
     281                            <Directory Id="dir_NetFlt" Name="netflt">
     282                                <Component Id="cp_NetFltDriver" Guid="F0A02F6B-A349-42f8-A2EB-569DCAAAF846" Win64="$(var.Property_Win64)">
     283                                    <File Id="file_VBoxNetFlt.sys" Name="VBoxNetFlt.sys"   KeyPath="yes"
     284                                          Source="$(env.PATH_OUT)\bin\VBoxNetFlt.sys" Checksum="yes"/>
     285                                    <File Id="file_VBoxNetFltNobj.sys" Name="VBoxNetFltNobj.dll"
     286                                          Source="$(env.PATH_OUT)\bin\VBoxNetFltNobj.dll" Checksum="yes"/>
     287                                    <File Id="file_VBoxNetFltM.inf" Name="VBoxNetFltM.inf"
     288                                          Source="$(env.PATH_OUT)\bin\VBoxNetFltM.inf" />
     289                                    <File Id="file_VBoxNetFlt.inf" Name="VBoxNetFlt.inf"
     290                                          Source="$(env.PATH_OUT)\bin\VBoxNetFlt.inf" />
    293291<?if $(env.VBOX_SIGNING_MODE) != none ?>
    294                                             <File Id="vboxnetfltcat" Name="VBoxNFlt.cat" LongName="VBoxNetFlt.cat" DiskId="1" Vital="yes"
    295                                                   Source="$(env.PATH_OUT)\bin\VBoxNetFlt.cat" />
     292                                    <File Id="file_VBoxNetFlt.cat" Name="VBoxNetFlt.cat"
     293                                          Source="$(env.PATH_OUT)\bin\VBoxNetFlt.cat" />
    296294<?endif ?>
    297295                                </Component>
    298                             </Directory> <!-- Directory "drivers\network\netflt" -->
    299                             <Directory Id="NetAdpDir" Name="netadp">
    300                                     <Component Id="NetAdpDriver" Guid="7adf3e12-af3c-4d36-8bec-36d5064cf84f" Win64="$(var.Property_Win64)">
    301                                             <File Id="vboxnetadpsys" Name="VBoxNAdp.sys" LongName="VBoxNetAdp.sys" DiskId="1" Vital="yes" KeyPath="yes"
    302                                                   Source="$(env.PATH_OUT)\bin\VBoxNetAdp.sys"
    303                                                   Checksum="yes"/>
    304                                             <File Id="vboxnetadpinf" Name="VBoxNAdp.inf" LongName="VBoxNetAdp.inf" DiskId="1" Vital="yes"
    305                                                   Source="$(env.PATH_OUT)\bin\VBoxNetAdp.inf" />
     296                            </Directory>
     297
     298                            <Directory Id="dir_NetAdp" Name="netadp">
     299                                <Component Id="cp_NetAdpDriver" Guid="7adf3e12-af3c-4d36-8bec-36d5064cf84f" Win64="$(var.Property_Win64)">
     300                                    <File Id="file_VBoxNetAdp.sys" Name="VBoxNetAdp.sys" KeyPath="yes"
     301                                          Source="$(env.PATH_OUT)\bin\VBoxNetAdp.sys" Checksum="yes"/>
     302                                    <File Id="file_VBoxNetAdp.inf" Name="VBoxNetAdp.inf"
     303                                          Source="$(env.PATH_OUT)\bin\VBoxNetAdp.inf" />
    306304<?if $(env.VBOX_SIGNING_MODE) != none ?>
    307                                             <File Id="vboxnetadpcat" Name="VBoxNAdp.cat" LongName="VBoxNetAdp.cat" DiskId="1" Vital="yes"
    308                                                   Source="$(env.PATH_OUT)\bin\VBoxNetAdp.cat" />
    309 <?endif ?>
    310                                     </Component> <!-- NetAdpDriver -->
    311                             </Directory> <!-- Directory "drivers\network\netadp" -->
    312                         </Directory> <!-- Directory "drivers\network" -->
     305                                    <File Id="file_VBoxNetAdp.cat" Name="VBoxNetAdp.cat"
     306                                          Source="$(env.PATH_OUT)\bin\VBoxNetAdp.cat" />
     307<?endif ?>
     308                                </Component>
     309                            </Directory>
     310                        </Directory>
    313311<?endif ?>
    314312                    </Directory> <!-- Directory "drivers" -->
     
    316314
    317315                    <!-- National Language Support directory -->
    318                     <Directory Id="nls" Name="nls">
    319                         <Component Id="nls" Guid="D63517D7-1CF3-4D06-B3EE-C561E323069B">
     316                    <Directory Id="dir_NLS" Name="nls">
     317                        <Component Id="cp_NLS" Guid="D63517D7-1CF3-4D06-B3EE-C561E323069B" Win64="$(var.Property_Win64)">
    320318                            <!-- Include the autogenerated NLS file list -->
    321319                            <?include $(env.PATH_TARGET)\VBoxGuiNLS.wxi ?>
     
    325323                    <!-- COM components have a separate entry mainly because of the KeyPath attribute (that hints the
    326324                         TypeLib element where to take the TLB resource from) may appear only once per Component. -->
    327                     <Component Id="MainCOM" Guid="CD4A3C6C-C2D5-428D-90A1-B6DA3D0777D6" Win64="$(var.Property_Win64)">
    328 
    329                         <File Id="VBoxSVC" Name="VBoxSVC.exe" DiskId="1" Vital="yes"
     325                    <Component Id="cp_MainCOM" Guid="CD4A3C6C-C2D5-428D-90A1-B6DA3D0777D6" Win64="$(var.Property_Win64)">
     326
     327                        <!-- File ID *must not* be changed because of our typelib template generation file! -->
     328                        <File Id="VBoxSVC" Name="VBoxSVC.exe"
    330329                              Source="$(env.PATH_OUT)\bin\VBoxSVC.exe">
    331330                        </File>
     
    334333                             and create appropriate Interface registry entries. Note that the same TLB is present
    335334                             in VBoxSVC.exe - it's just a matter of choice which one to use -->
    336                         <File Id="VBoxC" Name="VBoxC.dll" DiskId="1" Vital="yes"
    337                               Source="$(env.PATH_OUT)\bin\VBoxC.dll"
    338                               KeyPath="yes">
     335                        <!-- File ID *must not* be changed because of our typelib template generation file! -->
     336                        <File Id="VBoxC" Name="VBoxC.dll"
     337                              Source="$(env.PATH_OUT)\bin\VBoxC.dll" KeyPath="yes">
    339338                        </File>
    340339
     
    344343                    </Component>
    345344
    346                     <Component Id="DesktopShortcut" Guid="668F8A1A-F5CE-48B3-BB1A-3042EE27B279" Win64="$(var.Property_Win64)">
    347                         <Condition>INSTALLDESKTOPSHORTCUT</Condition>
    348                         <CreateFolder/>
    349                         <Shortcut Id="VBoxDesktopShortcut" Directory="DesktopFolder"
    350                             Name="VBox" LongName="$(env.VBOX_PRODUCT)" WorkingDirectory="INSTALLDIR"
    351                             Advertise="no" Target="[#vbox]" />
    352                     </Component>
    353 
    354                     <Component Id="QuicklaunchShortcut" Guid="CC19E026-938A-41CB-8E77-3F33296244B6" Win64="$(var.Property_Win64)">
    355                         <Condition>INSTALLQUICKLAUNCHSHORTCUT</Condition>
    356                         <CreateFolder/>
    357                         <Shortcut Id="VBoxQuicklaunchShortcut" Directory="QuicklaunchFolder"
    358                             Name="VBox" LongName="$(env.VBOX_PRODUCT)" WorkingDirectory="INSTALLDIR"
    359                             Advertise="no" Target="[#vbox]" />
    360                     </Component>
     345                    <!--
     346
     347                    <Component Id="Cp_StartMenuShortcut" Guid="1C137D24-E599-47BD-98D0-2F62F202A8EA" Win64="$(var.Property_Win64)">
     348                        <RegistryValue Root="HKCU" Key="$(var.Property_RegKeyInstall)" Type="string"
     349                                       Value="installed" KeyPath="yes" />
     350                        <Shortcut Id="ShortcutStartMenuVBox" Directory="ProgramMenuDir"
     351                                  Name="VirtualBox" WorkingDirectory="INSTALLDIR" Advertise="no" Target="VirtualBox.exe" />
     352                        <RemoveFolder Id="ShortcutStartMenuVBoxRemove" On="uninstall" />
     353                    </Component>-->
     354
     355                    <!---->
    361356
    362357                    <!-- All Binaries, DLLs (except COM) and drivers are in one component because they belong together. Additional
    363358                         binaries e.g. test tools, utilities etc. should be in another component so they"re clearly separated. -->
    364                     <Component Id="MainBinaries" Guid="5C8FE57A-F744-4DE0-AA3F-A563F486AD98" Win64="$(var.Property_Win64)">
     359                    <Component Id="cp_MainBinaries" Guid="5C8FE57A-F744-4DE0-AA3F-A563F486AD98" Win64="$(var.Property_Win64)">
     360
    365361                        <!-- Set required environment variables. -->
    366                         <Environment Id="EnvVBoxInstallDir" Action="set" Name="VBOX_INSTALL_PATH"
    367                             System="yes" Part="last" Permanent="no" Value="[INSTALLDIR]" />
     362                        <Environment Id="env_VBoxInstallDir" Action="set" Name="VBOX_INSTALL_PATH"
     363                                     System="yes" Part="last" Permanent="no" Value="[INSTALLDIR]" />
     364
    368365                        <!-- Register file extensions. Note: Extension Id's *must not* be changed! These specify the actual
    369366                             file extension to handle. Also, here would be the place to add more fancy DDE stuff later.
    370367                             Important: The IDs in "IconIndex" *must* be matching "Resources\resource.h". -->
    371                         <ProgId Id="VirtualBox.Shell.vbox" Description="VirtualBox Machine Definition" Icon="[#vboxresdll]" IconIndex="-201">
     368                        <ProgId Id="progId_VirtualBox.Shell.vbox" Description="VirtualBox Machine Definition" Icon="file_VBoxRes.dll" IconIndex="-201">
    372369                            <Extension Id="vbox" ContentType="application/x-virtualbox-vbox">
    373                                 <Verb Id="open" Sequence="1" Command="Open" Target="[#vbox]" Argument="&quot;%1&quot;" />
     370                                <Verb Id="open" Command="Open" TargetFile="file_VirtualBox.exe" Argument="&quot;%1&quot;" />
    374371                            </Extension>
    375372                        </ProgId>
    376                         <ProgId Id="VirtualBox.Shell.vbox-extpack" Description="VirtualBox Extension Pack" Icon="[#vboxresdll]" IconIndex="-202">
     373                        <ProgId Id="progId_VirtualBox.Shell.vbox-extpack" Description="VirtualBox Extension Pack" Icon="file_VBoxRes.dll" IconIndex="-202">
    377374                            <Extension Id="vbox-extpack" ContentType="application/x-virtualbox-vbox-extpack">
    378                                 <Verb Id="open" Sequence="1" Command="Open" Target="[#vbox]" Argument="&quot;%1&quot;" />
     375                                <Verb Id="open" Command="Open" TargetFile="file_VirtualBox.exe" Argument="&quot;%1&quot;" />
    379376                            </Extension>
    380377                        </ProgId>
    381                         <ProgId Id="VirtualBox.Shell.ovf" Description="Open Virtualization Format" Icon="[#vboxresdll]" IconIndex="-301">
     378                        <ProgId Id="progId_VirtualBox.Shell.ovf" Description="Open Virtualization Format" Icon="file_VBoxRes.dll" IconIndex="-301">
    382379                            <Extension Id="ovf" ContentType="application/x-virtualbox-ovf">
    383                                 <Verb Id="open" Sequence="1" Command="Open" Target="[#vbox]" Argument="&quot;%1&quot;" />
     380                                <Verb Id="open" Command="Open" TargetFile="file_VirtualBox.exe" Argument="&quot;%1&quot;" />
    384381                            </Extension>
    385382                        </ProgId>
    386                         <ProgId Id="VirtualBox.Shell.ova" Description="Open Virtualization Format Archive" Icon="[#vboxresdll]" IconIndex="-302">
     383                        <ProgId Id="progId_VirtualBox.Shell.ova" Description="Open Virtualization Format Archive" Icon="file_VBoxRes.dll" IconIndex="-302">
    387384                            <Extension Id="ova" ContentType="application/x-virtualbox-ova">
    388                                 <Verb Id="open" Sequence="1" Command="Open" Target="[#vbox]" Argument="&quot;%1&quot;" />
     385                                <Verb Id="open" Command="Open" TargetFile="file_VirtualBox.exe" Argument="&quot;%1&quot;" />
    389386                            </Extension>
    390387                        </ProgId>
    391                         <!-- The "Name" attribute must always be present. If the name is longer than 8.3 the additional "LongName"
    392                              attribute can be used. -->
    393                         <File Id="vbox" Name="vbox.exe" LongName="VirtualBox.exe" DiskId="1"  Vital="yes"
    394                               Source="$(env.PATH_OUT)\bin\VirtualBox.exe">
    395                             <!-- The target folder for the shortcut in the "Programs" menu is defined below. -->
    396                             <Shortcut Id="startmenuVBox" Directory="ProgramMenuDir" Name="VBox"
    397                                       LongName="VirtualBox" WorkingDirectory="INSTALLDIR"/>
    398                         </File>
     388
     389                        <!-- Files -->
    399390<?if $(env.VBOX_WITH_DOCS_PACKING) = "yes" ?>
    400391                        <!-- Include all user manual .CHM files (file is generated by makefile). -->
     
    404395                        <?include $(env.PATH_TARGET)\Files_License.wxi ?>
    405396
    406 <?if $(env.VBOX_WITH_DEBUGGER_GUI) = "yes" ?>
    407                         <File Id="vboxdbgdll" Name="VBoxDbg.dll" DiskId="1" Vital="yes"
    408                               Source="$(env.PATH_OUT)\bin\VBoxDbg.dll" />
    409 <?endif ?>
    410 
    411                         <File Id="vboxmanage" Name="VBoxMan.exe" LongName="VBoxManage.exe" DiskId="1" Vital="yes"
     397                        <!-- Frontends -->
     398                        <File Id="file_VBoxManage.exe" Name="VBoxManage.exe"
    412399                              Source="$(env.PATH_OUT)\bin\VBoxManage.exe" />
    413                         <File Id="vboxheadless" Name="VBoxHead.exe" LongName="VBoxHeadless.exe" DiskId="1" Vital="yes"
     400                        <File Id="file_VBoxHeadless.exe" Name="VBoxHeadless.exe"
    414401                              Source="$(env.PATH_OUT)\bin\VBoxHeadless.exe">
    415 
    416402                            <!-- Create a simple shortcut for VBoxVRDP, which is not present anymore, pointing to VBoxHeadless.exe -->
    417                             <Shortcut Id="ShortcutVBoxVRDP" Directory="INSTALLDIR" Name="VBoxVRDP" Show="normal" WorkingDirectory="INSTALLDIR"/>
    418 
     403                       <!--     <Shortcut Id="ShortcutVBoxVRDP" Directory="INSTALLDIR" Name="VBoxVRDP" Show="normal" WorkingDirectory="INSTALLDIR"/> -->
    419404                        </File>
    420 
    421                         <File Id="vboxnetdhcp" Name="VBoxDHCP.exe" LongName="VBoxNetDHCP.exe" DiskId="1" Vital="yes"
     405                        <File Id="file_VBoxBalloonCtrl.exe" Name="VBoxBalloonCtrl.exe"
     406                              Source="$(env.PATH_OUT)\bin\VBoxBalloonCtrl.exe"/>
     407
     408                        <!-- Misc tools -->
     409                        <File Id="file_VBoxNetDHCP.exe" Name="VBoxNetDHCP.exe"
    422410                              Source="$(env.PATH_OUT)\bin\VBoxNetDHCP.exe"/>
    423411<?if $(env.VBOX_WITH_EXTPACK) = "yes" ?>
    424                         <File Id="vboxepha" Name="VBoxEPHA.exe" LongName="VBoxExtPackHelperApp.exe" DiskId="1" Vital="yes"
     412                        <File Id="file_VBoxExtPackHelperApp.exe" Name="VBoxExtPackHelperApp.exe"
    425413                              Source="$(env.PATH_OUT)\bin\VBoxExtPackHelperApp.exe"/>
    426414<?endif ?>
    427                         <File Id="vboxballoonctrl" Name="VBoxBCtl.exe" LongName="VBoxBalloonCtrl.exe" DiskId="1" Vital="yes"
    428                               Source="$(env.PATH_OUT)\bin\VBoxBalloonCtrl.exe"/>
    429 
    430415                        <!-- VBox DLL files -->
    431                         <File Id="vboxdddll" Name="VBoxDD.dll" DiskId="1"  Vital="yes"
     416                        <File Id="file_VBoxDD.dll" Name="VBoxDD.dll"
    432417                              Source="$(env.PATH_OUT)\bin\VBoxDD.dll" />
    433                         <File Id="vboxdd2dll" Name="VBoxDD2.dll" DiskId="1"  Vital="yes"
     418                        <File Id="file_VBoxDD2.dll" Name="VBoxDD2.dll"
    434419                              Source="$(env.PATH_OUT)\bin\VBoxDD2.dll" />
    435                         <File Id="vboxddudll" Name="VBoxDDU.dll" DiskId="1"  Vital="yes"
     420                        <File Id="file_VBoxDDU.dll" Name="VBoxDDU.dll"
    436421                              Source="$(env.PATH_OUT)\bin\VBoxDDU.dll" />
    437                         <File Id="vboxrtdll" Name="VBoxRT.dll" DiskId="1"   Vital="yes"
     422                        <File Id="file_VBoxRT.dll" Name="VBoxRT.dll"
    438423                              Source="$(env.PATH_OUT)\bin\VBoxRT.dll" />
    439                         <File Id="vboxremdll" Name="VBoxREM.dll" DiskId="1"  Vital="yes"
     424                        <File Id="file_VBoxREM.dll" Name="VBoxREM.dll"
    440425                              Source="$(env.PATH_OUT)\bin\VBoxREM.dll" />
    441426<?if $(env.BUILD_TARGET_ARCH) = "amd64" ?>
    442                         <File Id="vboxrem2rel" Name="VBoxREM2.rel" DiskId="1"  Vital="yes"
     427                        <File Id="file_VBoxREM2.rel" Name="VBoxREM2.rel"
    443428                              Source="$(env.PATH_OUT)\bin\VBoxREM2.rel" />
    444429<?else ?>
    445                         <File Id="vboxrem32dll" Name="VBoxREM3.dll" LongName="VBoxREM32.dll" DiskId="1"  Vital="yes"
     430                        <File Id="file_VBoxREM32.dll" Name="VBoxREM32.dll"
    446431                              Source="$(env.PATH_OUT)\bin\VBoxREM32.dll" />
    447                         <File Id="vboxrem64dll" Name="VBoxREM6.dll" LongName="VBoxREM64.dll" DiskId="1"  Vital="yes"
     432                        <File Id="file_VBoxREM64.dll" Name="VBoxREM64.dll"
    448433                              Source="$(env.PATH_OUT)\bin\VBoxREM64.dll" />
    449434<?endif ?>
    450                         <File Id="vboxvmmdll" Name="VBoxVMM.dll" DiskId="1"  Vital="yes"
     435                        <File Id="file_VBoxVMM.dll" Name="VBoxVMM.dll"
    451436                              Source="$(env.PATH_OUT)\bin\VBoxVMM.dll" />
    452437<?if $(env.VBOX_WITH_VRDP) = "yes" ?>
    453                         <File Id="vboxvrdpdll" Name="VBoxVRDP.dll" DiskId="1"  Vital="yes"
     438                        <File Id="file_VBoxVRDP.dll" Name="VBoxVRDP.dll"
    454439                              Source="$(env.PATH_OUT)\bin\VBoxVRDP.dll" />
    455440<?endif ?>
    456                         <File Id="vboxshfolderdll" Name="VBoxSF.dll" LongName="VBoxSharedFolders.dll" DiskId="1"  Vital="yes"
     441                        <File Id="file_VBoxSharedFolders.dll" Name="VBoxSharedFolders.dll"
    457442                              Source="$(env.PATH_OUT)\bin\VBoxSharedFolders.dll" />
    458                         <File Id="vboxshclpbrddll" Name="VBoxClip.dll" LongName="VBoxSharedClipboard.dll" DiskId="1"  Vital="yes"
     443                        <File Id="file_VBoxSharedClipboard.dll" Name="VBoxSharedClipboard.dll"
    459444                              Source="$(env.PATH_OUT)\bin\VBoxSharedClipboard.dll" />
    460445<?if $(env.VBOX_WITH_GUEST_PROPS) = "yes" ?>
    461                         <File Id="vboxguestpropdll" Name="VBoxProp.dll" LongName="VBoxGuestPropSvc.dll" DiskId="1"  Vital="yes"
     446                        <File Id="file_VBoxGuestPropSvc.dll" Name="VBoxGuestPropSvc.dll"
    462447                              Source="$(env.PATH_OUT)\bin\VBoxGuestPropSvc.dll" />
    463448<?endif ?>
    464449<?if $(env.VBOX_WITH_GUEST_CONTROL) = "yes" ?>
    465                         <File Id="vboxguestctrldll" Name="VBoxCtrl.dll" LongName="VBoxGuestControlSvc.dll" DiskId="1"  Vital="yes"
     450                        <File Id="file_VBoxGuestControlSvc.dll" Name="VBoxGuestControlSvc.dll"
    466451                              Source="$(env.PATH_OUT)\bin\VBoxGuestControlSvc.dll" />
    467452<?endif ?>
    468                         <File Id="vboxauthdll" Name="VBoxAuth.dll" DiskId="1"  Vital="yes"
     453                        <File Id="file_VBoxAuth.dll" Name="VBoxAuth.dll"
    469454                              Source="$(env.PATH_OUT)\bin\VBoxAuth.dll" />
    470                         <File Id="vboxauthsimpledll" Name="VBoxASim.dll" LongName="VBoxAuthSimple.dll" DiskId="1"  Vital="yes"
     455                        <File Id="file_VBoxAuthSimple.dll" Name="VBoxAuthSimple.dll"
    471456                              Source="$(env.PATH_OUT)\bin\VBoxAuthSimple.dll" />
    472457
    473458                        <!-- Include resource DLL (icons, ...). -->
    474                         <File Id="vboxresdll" LongName="VBoxRes.dll" Name="VBoxRes.dll" DiskId="$(var.Property_DiskIdCommon)" Vital="yes"
     459                        <File Id="file_VBoxRes.dll" Name="VBoxRes.dll" DiskId="$(var.Property_DiskIdCommon)"
    475460                              Source="$(env.PATH_OUT)\bin\VBoxRes.dll" />
    476461
    477                         <File Id="vmmgc" Name="VMMGC.gc" DiskId="1"  Vital="yes"
     462                        <File Id="file_VMMGC.gc" Name="VMMGC.gc"
    478463                              Source="$(env.PATH_OUT)\bin\VMMGC.gc" />
    479                         <File Id="vboxddgc" Name="VBoxDDGC.gc" DiskId="1"  Vital="yes"
     464                        <File Id="file_VBoxDDGC.gc" Name="VBoxDDGC.gc"
    480465                              Source="$(env.PATH_OUT)\bin\VBoxDDGC.gc" />
    481                         <File Id="vboxdd2gc" Name="VBoxDD2.gc" LongName="VBoxDD2GC.gc" DiskId="1"  Vital="yes"
     466                        <File Id="file_VBoxDD2GC.gc" Name="VBoxDD2GC.gc"
    482467                              Source="$(env.PATH_OUT)\bin\VBoxDD2GC.gc" />
    483468
    484                         <File Id="vmmr0" Name="VMMR0.r0" DiskId="1"  Vital="yes"
     469                        <File Id="file_VMMR0.r0" Name="VMMR0.r0"
    485470                              Source="$(env.PATH_OUT)\bin\VMMR0.r0" />
    486                         <File Id="vboxddr0" Name="VBoxDDR0.r0" DiskId="1"  Vital="yes"
     471                        <File Id="file_VBoxDDR0.r0" Name="VBoxDDR0.r0"
    487472                              Source="$(env.PATH_OUT)\bin\VBoxDDR0.r0" />
    488                         <File Id="vboxdd2r0" Name="VBDD2R0.r0" LongName="VBoxDD2R0.r0" DiskId="1"  Vital="yes"
     473                        <File Id="file_VBoxDD2R0.r0" Name="VBoxDD2R0.r0"
    489474                              Source="$(env.PATH_OUT)\bin\VBoxDD2R0.r0" />
    490475
    491476<?if $(env.VBOX_WITH_CROGL) = "yes" ?>
    492                         <File Id="vboxtestogl" Name="VBTstOGL.exe" LongName="VBoxTestOGL.exe" DiskId="1"  Vital="yes"
     477                        <File Id="file_VBoxTestOGL.exe" Name="VBoxTestOGL.exe"
    493478                              Source="$(env.PATH_OUT)\bin\VBoxTestOGL.exe" />
    494479<?endif ?>
    495                         <!-- Qt stuff -->
    496                         <File Id="qtcore4dll" Name="QtCrVBx4.dll" LongName="QtCoreVBox4.dll" DiskId="1"  Vital="yes"
     480                        <!-- Qt frontend -->
     481                        <File Id="file_VirtualBox.exe" Name="VirtualBox.exe"
     482                              Source="$(env.PATH_OUT)\bin\VirtualBox.exe">
     483                        </File>
     484                        <File Id="file_QtCoreVBox4.dll" Name="QtCoreVBox4.dll"
    497485                              Source="$(env.PATH_OUT)\bin\QtCoreVBox4.dll" />
    498                         <File Id="qtgui4dll" Name="QtGuVbx4.dll" LongName="QtGuiVBox4.dll" DiskId="1"  Vital="yes"
     486                        <File Id="file_QtGuiVBox4.dll" Name="QtGuiVBox4.dll"
    499487                              Source="$(env.PATH_OUT)\bin\QtGuiVBox4.dll" />
    500                         <File Id="qtnetwork4dll" Name="QtNwVBx4.dll" LongName="QtNetworkVBox4.dll" DiskId="1"  Vital="yes"
     488                        <File Id="file_QtNetworkVBox4.dll" Name="QtNetworkVBox4.dll"
    501489                              Source="$(env.PATH_OUT)\bin\QtNetworkVBox4.dll" />
     490<?if $(env.VBOX_WITH_DEBUGGER_GUI) = "yes" ?>
     491                        <File Id="file_VBoxDbg.dll" Name="VBoxDbg.dll"
     492                              Source="$(env.PATH_OUT)\bin\VBoxDbg.dll" />
     493<?endif ?>
    502494<?if $(env.VBOX_GUI_USE_QGL) = "yes" ?>
    503                         <File Id="qtopengl4dll" Name="QtGlVBx4.dll" LongName="QtOpenGLVBox4.dll" DiskId="1"  Vital="yes"
     495                        <File Id="file_QtOpenGLVBox4.dll" Name="QtOpenGLVBox4.dll"
    504496                              Source="$(env.PATH_OUT)\bin\QtOpenGLVBox4.dll" />
    505497<?endif?>
     
    507499<?if $(env.VBOX_USE_VCC80) = "yes" ?>
    508500                        <!-- MS v8 Runtime DLL files (private assembly) -->
    509                         <File Id="vc80crtmft" Name="VC80CRT.mft" LongName="Microsoft.VC80.CRT.manifest" DiskId="1" Vital="yes"
     501                        <File Id="file_Microsoft.VC80.CRT.manifest" Name="Microsoft.VC80.CRT.manifest"
    510502                              Source="$(env.PATH_OUT)\bin\Microsoft.VC80.CRT\Microsoft.VC80.CRT.manifest" />
    511                         <File Id="msvcr80dll" Name="msvcr80.dll" DiskId="1" Vital="yes"
     503                        <File Id="file_msvcr80.dll" Name="msvcr80.dll"
    512504                              Source="$(env.PATH_OUT)\bin\Microsoft.VC80.CRT\msvcr80.dll" />
    513                         <File Id="msvcp80dll" Name="msvcp80.dll" DiskId="1" Vital="yes"
     505                        <File Id="file_msvcp80.dll" Name="msvcp80.dll"
    514506                              Source="$(env.PATH_OUT)\bin\Microsoft.VC80.CRT\msvcp80.dll" />
    515507<?endif?>
     
    517509                        <!-- MS v7 Runtime DLL files -->
    518510<?if $(env.VBOX_USE_VCC80) != "yes" ?>
    519                         <File Id="msvcpdll" Name="msvcp71.dll" DiskId="1" Vital="yes"
     511                        <File Id="file_msvcp71.dll" Name="msvcp71.dll"
    520512                              Source="$(env.PATH_OUT)\bin\msvcp71.dll" />
    521                         <File Id="msvcrtdll" Name="msvcrt.dll" DiskId="1" Vital="yes"
     513                        <File Id="file_msvcrt.dll" Name="msvcrt.dll"
    522514                              Source="$(env.PATH_OUT)\bin\msvcrt.dll" />
    523515<?endif?>
    524516<?if $(env.BUILD_TARGET_ARCH) != "amd64" ?>
    525                         <File Id="msvcrdll" Name="msvcr71.dll" DiskId="1" Vital="yes"
     517                        <File Id="msvcrdll" Name="msvcr71.dll"
    526518                              Source="$(env.PATH_OUT)\bin\msvcr71.dll" />
    527519<?endif?>
    528520                        <!-- EFI firmware -->
    529521<?if $(env.VBOX_WITH_EFIFW_PACKING) = "yes" ?>
    530                         <File Id="vboxefifd32" LongName="VBoxEFI32.fd" Name="efi32.fd" DiskId="$(var.Property_DiskIdCommon)" Vital="yes"
     522                        <File Id="file_VBoxEFI32.fd" Name="VBoxEFI32.fd" DiskId="$(var.Property_DiskIdCommon)"
    531523                              Source="$(env.PATH_OUT)\bin\VBoxEFI32.fd" />
    532                         <File Id="vboxefifd64" LongName="VBoxEFI64.fd" Name="efi64.fd" DiskId="$(var.Property_DiskIdCommon)" Vital="yes"
     524                        <File Id="file_VBoxEFI64.fd" Name="VBoxEFI64.fd" DiskId="$(var.Property_DiskIdCommon)"
    533525                              Source="$(env.PATH_OUT)\bin\VBoxEFI64.fd" />
    534526<?endif?>
     
    536528<?if $(env.VBOX_WITH_ADDITIONS_PACKING) = "yes" ?>
    537529    <?if $(env.VBOX_WITH_COMBINED_PACKAGE) = "yes" ?>
    538                         <File Id="VBoxGuestAdditions.iso" Name="VBoxAdd.iso" LongName="VBoxGuestAdditions.iso" DiskId="2" Vital="yes"
     530                        <File Id="file_VBoxGuestAdditions.iso" Name="VBoxGuestAdditions.iso" DiskId="2"
    539531                              Source="$(env.PATH_MULTIARCH_GUEST_ADDITIONS_ISO)\VBoxGuestAdditions.iso" />
    540532    <?else ?>
    541                         <File Id="vboxguest" Name="VBoxAdd.iso" LongName="VBoxGuestAdditionsiso" DiskId="1" Vital="yes"
     533                        <File Id="file_VBoxGuestAdditions.iso" Name="VBoxGuestAdditions.iso"
    542534                              Source="$(env.PATH_OUT)\bin\additions\VBoxGuestAdditions.iso" />
    543535    <?endif ?>
     
    550542<?if $(env.VBOX_WITH_QTGUI) = "yes" ?>
    551543                    <!-- Qt accessible plugins -->
    552                     <Directory Id="accessible" Name="accessbl" LongName="accessible">
    553                         <Component Id="qtaccessible" Guid="12040EF9-D4A8-4FB2-A69C-CA2F5C354A45">
    554                             <File Id="qtaccessibleplugindll" Name="qtacsw4.dll" LongName="qtaccessiblewidgets4.dll" DiskId="1"  Vital="yes"
     544                    <Directory Id="dir_Accessible" Name="accessible">
     545                        <Component Id="cp_QtAccessible" Guid="12040EF9-D4A8-4FB2-A69C-CA2F5C354A45" Win64="$(var.Property_Win64)">
     546                            <File Id="file_qtaccessiblewidgets4.dll" Name="qtaccessiblewidgets4.dll"
    555547                                  Source="$(env.PATH_OUT)\bin\accessible\qtaccessiblewidgets4.dll" />
    556548                        </Component>
    557                     </Directory> <!-- Qt accessible plugins -->
     549                    </Directory>
    558550<?endif?>
    559551
    560552<?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
    561553                    <!-- Python bindings -->
    562                     <Directory Id="sdk" Name="sdk">
    563                         <Directory Id="installer" Name="install">
    564                             <Component Id="VBoxPyInst" Guid="C9A40306-5102-11DE-A7BA-C3C555D89593">
    565                                  <File Id="vboxapisetup" Name="pysetup.py" LongName="vboxapisetup.py" DiskId="$(var.Property_DiskIdCommon)" Vital="yes"
    566                                       Source="$(env.PATH_OUT)\bin\sdk\installer\vboxapisetup.py" />
     554                    <Directory Id="dir_SDK" Name="sdk">
     555                        <Directory Id="dir_SDKInstall" Name="install">
     556                            <Component Id="cp_VBoxPyInst" Guid="C9A40306-5102-11DE-A7BA-C3C555D89593" Win64="$(var.Property_Win64)">
     557                                 <File Id="file_vboxapisetup.py" Name="vboxapisetup.py" DiskId="$(var.Property_DiskIdCommon)"
     558                                       Source="$(env.PATH_OUT)\bin\sdk\installer\vboxapisetup.py" />
    567559                            </Component>
    568                             <Directory Id="vboxapi" Name="vboxapi">
    569                                 <Component Id="VBoxPyMod" Guid="DF19CB76-5102-11DE-943B-13C755D89593">
    570                                     <File Id="__init__.py" Name="__init__.py" DiskId="$(var.Property_DiskIdCommon)" Vital="yes"
    571                                       Source="$(env.PATH_OUT)\bin\sdk\installer\vboxapi\__init__.py" />
    572                                     <File Id="VirtualBox_constants.py" Name="vbconst.py" LongName="VirtualBox_constants.py" DiskId="$(var.Property_DiskIdCommon)" Vital="yes"
    573                                       Source="$(env.PATH_OUT)\bin\sdk\installer\vboxapi\VirtualBox_constants.py" />
     560                            <Directory Id="dir_SDKVBoxAPI" Name="vboxapi">
     561                                <Component Id="cp_VBoxPyMod" Guid="DF19CB76-5102-11DE-943B-13C755D89593" Win64="$(var.Property_Win64)">
     562                                    <File Id="file___init__.py" Name="__init__.py" DiskId="$(var.Property_DiskIdCommon)"
     563                                          Source="$(env.PATH_OUT)\bin\sdk\installer\vboxapi\__init__.py" />
     564                                    <File Id="file_VirtualBox_constants.py" Name="VirtualBox_constants.py" DiskId="$(var.Property_DiskIdCommon)"
     565                                          Source="$(env.PATH_OUT)\bin\sdk\installer\vboxapi\VirtualBox_constants.py" />
    574566                                </Component>
    575567                            </Directory>
    576568                        </Directory>
    577569                    </Directory>
    578                     <!-- Python bindings -->
    579570<?endif?>
    580571
    581572<?if $(env.VBOX_WITH_CROGL) = "yes" ?>
    582                     <Component Id="VBoxCROpenGL" Guid="874A1297-835A-491D-8A9D-7E723BC29EE7" Win64="$(var.Property_Win64)">
    583                         <File Id="vboxoglhostcrutil" Name="VbGlHCRU.dll" LongName="VBoxOGLhostcrutil.dll" DiskId="1" Vital="yes"
     573                    <Component Id="cp_VBoxCROpenGL" Guid="874A1297-835A-491D-8A9D-7E723BC29EE7" Win64="$(var.Property_Win64)">
     574                        <File Id="file_VBoxOGLhostcrutil.dll" Name="VBoxOGLhostcrutil.dll"
    584575                              Source="$(env.PATH_OUT)\bin\VBoxOGLhostcrutil.dll" />
    585                         <File Id="vboxoglhosterrorspu" Name="VbGlHers.dll" LongName="VBoxOGLhosterrorspu.dll" DiskId="1" Vital="yes"
     576                        <File Id="file_VBoxOGLhosterrorspu.dll" Name="VBoxOGLhosterrorspu.dll"
    586577                              Source="$(env.PATH_OUT)\bin\VBoxOGLhosterrorspu.dll" />
    587                         <File Id="vboxoglrenderspu" Name="VbGlRndr.dll" LongName="VBoxOGLrenderspu.dll" DiskId="1" Vital="yes"
     578                        <File Id="file_VBoxOGLrenderspu.dll" Name="VBoxOGLrenderspu.dll"
    588579                              Source="$(env.PATH_OUT)\bin\VBoxOGLrenderspu.dll" />
    589                         <File Id="vboxsharedcropengl" Name="VbShCRGL.dll" LongName="VBoxSharedCrOpenGL.dll" DiskId="1" Vital="yes"
     580                        <File Id="file_VBoxSharedCrOpenGL.dll" Name="VBoxSharedCrOpenGL.dll"
    590581                              Source="$(env.PATH_OUT)\bin\VBoxSharedCrOpenGL.dll" />
    591582                    </Component>
    592583<?endif?>
    593584                    <!-- SDL plugins -->
    594                     <Component Id="VBoxSDLBinaries" Guid="F09D5FD9-E176-42B0-90A9-481BB18B0CB4" Win64="$(var.Property_Win64)">
    595                         <File Id="vboxsdl" Name="VBoxSDL.exe" DiskId="1" Vital="yes"
     585                    <Component Id="cp_VBoxSDLBinaries" Guid="F09D5FD9-E176-42B0-90A9-481BB18B0CB4" Win64="$(var.Property_Win64)">
     586                        <File Id="file_VBoxSDL.exe" Name="VBoxSDL.exe"
    596587                              Source="$(env.PATH_OUT)\bin\VBoxSDL.exe" />
    597                         <File Id="sdldll" Name="SDL.dll" DiskId="1" Vital="yes"
     588                        <File Id="file_SDL.dll" Name="SDL.dll"
    598589                              Source="$(env.PATH_OUT)\bin\SDL.dll" />
    599590<?if $(env.VBOX_WITH_SECURELABEL) = "yes" ?>
    600                         <File Id="sdlttfdll" Name="SDL_ttf.dll" DiskId="1" Vital="yes"
     591                        <File Id="file_SDL_ttf.dll" Name="SDL_ttf.dll"
    601592                              Source="$(env.PATH_OUT)\bin\SDL_ttf.dll" />
    602593<?endif?>
     
    605596<?if $(env.VBOX_WITH_WEBSERVICES) = "yes" ?>
    606597                    <!-- Webservice -->
    607                     <Component Id="VBoxWebService" Guid="DD404F04-9874-43E9-AEE2-7762924D922E">
    608                         <File Id="vboxweb" Name="vboxwebs.exe" LongName="vboxwebsrv.exe" DiskId="1" Vital="yes"
     598                    <Component Id="cp_VBoxWebService" Guid="DD404F04-9874-43E9-AEE2-7762924D922E">
     599                        <File Id="file_VBoxWebSrv.exe" Name="VBoxWebSrv.exe"
    609600                              Source="$(env.PATH_OUT)\bin\vboxwebsrv.exe" />
    610                     </Component> <!-- Webservice -->
     601                    </Component>
    611602<?endif?>
    612603
    613604<?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
    614                     <!--Python -->
    615                     <Component Id="VBoxPythonBinding" Guid="293D7E11-78DA-4C31-AEED-AE2FE42F6881">
    616                         <Condition>PYTHONINSTALLED</Condition>
    617                         <!-- Nothing in here yet. -->
     605                    <Component Id="cp_VBoxPythonBinding" Guid="293D7E11-78DA-4C31-AEED-AE2FE42F6881">
     606                        <Condition>PYTHON_INSTALLED</Condition>
    618607                    </Component>
    619608<?endif?>
     
    621610            </Directory> <!-- Windows program files directory -->
    622611
    623             <!-- Create a subdirectory in the "Programs" start menu -->
    624             <Directory Id="ProgramMenuFolder" Name="PMenu" LongName="Programs">
    625                 <Directory Id="ProgramMenuDir" Name="vbox" LongName="$(env.VBOX_PRODUCT)" />
     612            <!-- Set up special directory IDs for referencing to the start menu
     613                 or the Quick Launch bar.
     614                 See: http://msdn.microsoft.com/en-us/library/aa368276.aspx
     615                      http://wix.mindcapers.com/wiki/Shortcuts_in_WiX -->
     616            <Directory Id="ProgramMenuFolder">
     617                <Directory Id="dir_StartMenuVBox" Name="$(env.VBOX_PRODUCT)"/>
    626618            </Directory>
    627619
    628             <Directory Id="DesktopFolder" Name="Desktop" />
     620            <Directory Id="DesktopFolder" Name="Desktop"/>
    629621
    630622            <Directory Id="AppDataFolder" Name="AppData">
    631                 <Directory Id="AppDataMicrosoft" Name="MS" LongName="Microsoft">
    632                     <Directory Id="AppDataMSIE" Name="IE" LongName="Internet Explorer">
    633                         <Directory Id="QuicklaunchFolder" Name="QL" LongName="Quick Launch"/>
     623                <Directory Id="dir_AppDataMicrosoft" Name="Microsoft">
     624                    <Directory Id="dir_AppDataMSIE" Name="Internet Explorer">
     625                        <Directory Id="dir_QuicklaunchFolder" Name="Quick Launch"/>
    634626                    </Directory>
    635627                </Directory>
    636628            </Directory>
    637         </Directory>
     629
     630            <!-- Shortcut(s) in start menu -->
     631            <Component Id="cp_StartMenuVBox" Guid="C2DC321A-CE63-40EE-8A98-724DF8BD12FB" Win64="$(var.Property_Win64)">
     632                <Shortcut Id="sc_StartMenuVBox" Directory="dir_StartMenuVBox" Name="$(env.VBOX_PRODUCT)" Description="$(env.VBOX_PRODUCT)"
     633                          Target="[INSTALLDIR]VirtualBox.exe" WorkingDirectory="INSTALLDIR"/>
     634                <RegistryValue Root="HKCU" Key="$(var.Property_RegKeyInstall)"
     635                               Type="string" Value="installed" KeyPath="yes" />
     636                <?include $(env.PATH_TARGET)\Shortcuts_StartMenu.wxi ?>
     637            </Component>
     638
     639            <Component Id="cp_DesktopShortcut" Guid="668F8A1A-F5CE-48B3-BB1A-3042EE27B279" Win64="$(var.Property_Win64)">
     640                <Condition>INSTALLDESKTOPSHORTCUT</Condition>
     641                <Shortcut Id="sc_DesktopVBox" Directory="DesktopFolder" Name="$(env.VBOX_PRODUCT)" Description="$(env.VBOX_PRODUCT)"
     642                          Target="[INSTALLDIR]VirtualBox.exe" WorkingDirectory="INSTALLDIR"/>
     643                <RegistryValue Root="HKCU" Key="$(var.Property_RegKeyInstall)" Type="string"
     644                               Value="installed" KeyPath="yes" />
     645            </Component>
     646
     647            <Component Id="cp_QuickLaunchVBox" Guid="CC19E026-938A-41CB-8E77-3F33296244B6" Win64="$(var.Property_Win64)">
     648                <CreateFolder/>
     649                <Condition>INSTALLQUICKLAUNCHSHORTCUT</Condition>
     650                <Shortcut Id="sc_QuickLaunchVBox" Directory="dir_QuicklaunchFolder" Name="$(env.VBOX_PRODUCT)" Description="$(env.VBOX_PRODUCT)"
     651                          Target="[INSTALLDIR]VirtualBox.exe" WorkingDirectory="INSTALLDIR"/>
     652                <RegistryValue Root="HKCU" Key="$(var.Property_RegKeyInstall)"
     653                               Type="string" Value="installed" KeyPath="yes" />
     654            </Component>
     655        </Directory> <!-- TARGETDIR -->
    638656
    639657        <Feature Id="VBoxApplication" Title="VirtualBox Application" Level="1"
    640                  Description="$(loc.VB_App)"
     658                 Description="!(loc.VB_App)"
    641659                 ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand"
    642660                 Absent="disallow">
    643661
    644             <ComponentRef Id="DesktopShortcut" />
    645             <ComponentRef Id="QuicklaunchShortcut" />
     662            <ComponentRef Id="cp_StartMenuVBox" />
     663            <ComponentRef Id="cp_DesktopShortcut" />
     664            <ComponentRef Id="cp_QuickLaunchVBox" />
    646665
    647666<?if $(env.VBOX_WITH_DOCS_PACKING) = "yes" ?>
    648             <ComponentRef Id="docs" />
    649 <?endif?>
    650             <ComponentRef Id="nls" />
    651             <ComponentRef Id="MainCOM" />
    652             <ComponentRef Id="MainBinaries" />
     667            <ComponentRef Id="cp_Docs" />
     668<?endif?>
     669            <ComponentRef Id="cp_NLS" />
     670            <ComponentRef Id="cp_MainCOM" />
     671            <ComponentRef Id="cp_MainBinaries" />
    653672<?if $(env.VBOX_WITH_QTGUI) = "yes" ?>
    654             <ComponentRef Id="qtaccessible" />
     673            <ComponentRef Id="cp_QtAccessible" />
    655674<?endif?>
    656675<?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
    657             <ComponentRef Id="VBoxPyInst" />
    658             <ComponentRef Id="VBoxPyMod" />
     676            <ComponentRef Id="cp_VBoxPyInst" />
     677            <ComponentRef Id="cp_VBoxPyMod" />
    659678<?endif?>
    660679
    661680<?if $(env.VBOX_WITH_CROGL) = "yes" ?>
    662             <ComponentRef Id="VBoxCROpenGL" />
    663 <?endif?>
    664             <ComponentRef Id="VBoxSDLBinaries" />
     681            <ComponentRef Id="cp_VBoxCROpenGL" />
     682<?endif?>
     683            <ComponentRef Id="cp_VBoxSDLBinaries" />
    665684<?if $(env.VBOX_WITH_WEBSERVICES) = "yes" ?>
    666             <ComponentRef Id="VBoxWebService" />
    667 <?endif?>
    668             <ComponentRef Id="VBoxDrv" />
    669 
    670             <Feature Id="VBoxUSB" Title="VirtualBox USB Support" Level="1"
    671                      Description="$(loc.VB_USBDriver)"
     685            <ComponentRef Id="cp_VBoxWebService" />
     686<?endif?>
     687            <ComponentRef Id="cp_VBoxDrv" />
     688
     689            <Feature Id="ft_VBoxUSB" Title="VirtualBox USB Support" Level="1"
     690                     Description="!(loc.VB_USBDriver)"
    672691                     ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand" >
    673                 <ComponentRef Id="USBFilterDriver" />
    674                 <ComponentRef Id="USBDeviceDriver" />
     692                <ComponentRef Id="cp_USBFilterDriver" />
     693                <ComponentRef Id="cp_USBDeviceDriver" />
    675694            </Feature>
    676695
    677696<?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
    678             <Feature Id="VBoxNetwork" Title="VirtualBox Networking" Level="1"
    679                      Description="$(loc.VB_Network)"
     697            <Feature Id="ft_VBoxNetwork" Title="VirtualBox Networking" Level="1"
     698                     Description="!(loc.VB_Network)"
    680699                     ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand" >
    681                  <Feature Id="VBoxNetworkFlt" Title="VirtualBox Bridged Networking" Level="1"
    682                      Description="$(loc.VB_NetFltDriver)"
    683                      ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand" >
    684                        <ComponentRef Id="NetFltDriver" />
     700                 <Feature Id="ft_VBoxNetworkFlt" Title="VirtualBox Bridged Networking" Level="1"
     701                          Description="!(loc.VB_NetFltDriver)"
     702                          ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand" >
     703                     <ComponentRef Id="cp_NetFltDriver" />
    685704                 </Feature>
    686                  <Feature Id="VBoxNetworkAdp" Title="VirtualBox Host-Only Networking" Level="1"
    687                      Description="$(loc.VB_NetAdpDriver)"
    688                      ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand" >
    689                        <ComponentRef Id="NetAdpDriver" />
     705                 <Feature Id="ft_VBoxNetworkAdp" Title="VirtualBox Host-Only Networking" Level="1"
     706                          Description="!(loc.VB_NetAdpDriver)"
     707                          ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand" >
     708                     <ComponentRef Id="cp_NetAdpDriver" />
    690709                 </Feature>
    691710            </Feature>
     
    693712
    694713<?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
    695 
    696             <Feature Id="VBoxPython" Title="VirtualBox Python Support" Level="1"
    697                     Description="$(loc.VB_Python)"
     714            <Feature Id="ft_VBoxPython" Title="VirtualBox Python Support" Level="1"
     715                    Description="!(loc.VB_Python)"
    698716                    ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand" >
    699                 <ComponentRef Id="VBoxPythonBinding" />
     717                <ComponentRef Id="cp_VBoxPythonBinding" />
    700718            </Feature>
    701719<?endif?>
     
    713731            <RemoveExistingProducts After="InstallValidate"><![CDATA[NEWERVERSIONDETECTED OR PREVIOUSVERSIONSINSTALLED]]></RemoveExistingProducts>
    714732
    715             <Custom Action="OriginalTargetDir" After="FileCost"><![CDATA[(NOT INSTALLDIR) AND (NOT EXISTINGINSTALLDIR)]]></Custom>
    716             <Custom Action="DefaultTargetDir" Before="FileCost" ><![CDATA[NOT Installed AND (NOT INSTALLDIR) AND EXISTINGINSTALLDIR]]></Custom>
    717 
    718             <Custom Action="UninstallTAPInstances" Before="InstallFiles" >1</Custom>
     733            <Custom Action="ca_OriginalTargetDir" After="FileCost"><![CDATA[(NOT INSTALLDIR) AND (NOT EXISTINGINSTALLDIR)]]></Custom>
     734            <Custom Action="ca_DefaultTargetDir" Before="FileCost" ><![CDATA[NOT Installed AND (NOT INSTALLDIR) AND EXISTINGINSTALLDIR]]></Custom>
     735
     736            <Custom Action="ca_UninstallTAPInstances" Before="InstallFiles" >1</Custom>
    719737<?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
    720             <Custom Action="CreateHostOnlyInterfaceArgs" Before="CreateHostOnlyInterface" ><![CDATA[&VBoxNetworkAdp=3]]></Custom>
    721             <Custom Action="CreateHostOnlyInterface" Before="InstallFinalize" ><![CDATA[&VBoxNetworkAdp=3]]></Custom>
    722             <Custom Action="RemoveHostOnlyInterfaces" After="UninstallNetFlt" ></Custom>
    723 
    724             <Custom Action="RollbackInstallNetFltArgs" Before="RollbackInstallNetFlt" ><![CDATA[&VBoxNetworkFlt=3]]></Custom>
    725             <Custom Action="RollbackInstallNetFlt" Before="InstallNetFlt" ><![CDATA[&VBoxNetworkFlt=3]]></Custom>
    726             <Custom Action="InstallNetFltArgs" Before="InstallNetFlt" ><![CDATA[&VBoxNetworkFlt=3]]></Custom>
    727             <Custom Action="InstallNetFlt" Before="CreateHostOnlyInterface" ><![CDATA[&VBoxNetworkFlt=3]]></Custom>
    728 
    729             <Custom Action="RollbackUninstallNetFltArgs" Before="RollbackUninstallNetFlt" ><![CDATA[&VBoxNetworkFlt=2]]></Custom>
    730             <Custom Action="RollbackUninstallNetFlt" Before="UninstallNetFlt" ><![CDATA[&VBoxNetworkFlt=2]]></Custom>
    731             <Custom Action="UninstallNetFltArgs" Before="UninstallNetFlt" ><![CDATA[&VBoxNetworkFlt=2]]></Custom>
    732             <Custom Action="UninstallNetFlt" After="InstallInitialize" ><![CDATA[&VBoxNetworkFlt=2]]></Custom>
    733 <?endif?>
    734             <Custom Action="InstallPythonAPI" After="InstallFinalize" ><![CDATA[&VBoxPython=3]]></Custom>
    735             <Custom Action="InstallBranding" After="InstallFinalize" ><![CDATA[NOT REMOVE]]></Custom>
    736             <Custom Action="UninstallBranding" After="InstallFinalize" ><![CDATA[REMOVE]]></Custom>
     738            <Custom Action="ca_CreateHostOnlyInterfaceArgs" Before="ca_CreateHostOnlyInterface" ><![CDATA[&ft_VBoxNetworkAdp=3]]></Custom>
     739            <Custom Action="ca_CreateHostOnlyInterface" Before="InstallFinalize" ><![CDATA[&ft_VBoxNetworkAdp=3]]></Custom>
     740            <Custom Action="ca_RemoveHostOnlyInterfaces" After="ca_UninstallNetFlt" ></Custom>
     741
     742            <Custom Action="ca_RollbackInstallNetFltArgs" Before="ca_RollbackInstallNetFlt" ><![CDATA[&ft_VBoxNetworkFlt=3]]></Custom>
     743            <Custom Action="ca_RollbackInstallNetFlt" Before="ca_InstallNetFlt" ><![CDATA[&ft_VBoxNetworkFlt=3]]></Custom>
     744            <Custom Action="ca_InstallNetFltArgs" Before="ca_InstallNetFlt" ><![CDATA[&ft_VBoxNetworkFlt=3]]></Custom>
     745            <Custom Action="ca_InstallNetFlt" Before="ca_CreateHostOnlyInterface" ><![CDATA[&ft_VBoxNetworkFlt=3]]></Custom>
     746
     747            <Custom Action="ca_RollbackUninstallNetFltArgs" Before="ca_RollbackUninstallNetFlt" ><![CDATA[&ft_VBoxNetworkFlt=2]]></Custom>
     748            <Custom Action="ca_RollbackUninstallNetFlt" Before="ca_UninstallNetFlt" ><![CDATA[&ft_VBoxNetworkFlt=2]]></Custom>
     749            <Custom Action="ca_UninstallNetFltArgs" Before="ca_UninstallNetFlt" ><![CDATA[&ft_VBoxNetworkFlt=2]]></Custom>
     750            <Custom Action="ca_UninstallNetFlt" After="InstallInitialize" ><![CDATA[&ft_VBoxNetworkFlt=2]]></Custom>
     751<?endif?>
     752            <Custom Action="ca_InstallPythonAPI" Before="InstallFinalize" ><![CDATA[&ft_VBoxPython=3]]></Custom>
     753            <Custom Action="ca_InstallBranding" Before="InstallFinalize" ><![CDATA[NOT REMOVE]]></Custom>
     754            <Custom Action="ca_UninstallBranding" Before="InstallFinalize" ><![CDATA[REMOVE]]></Custom>
    737755
    738756        </InstallExecuteSequence>
     
    740758    </Product>
    741759</Wix>
     760
  • trunk/src/VBox/Installer/win/VirtualBox_TypeLib.xsl

    r32113 r37289  
    5959    <TypeLib>
    6060      <xsl:attribute name="Id"><xsl:value-of select="@uuid"/></xsl:attribute>
     61      <xsl:attribute name="Advertise">yes</xsl:attribute>
     62      <xsl:attribute name="MajorVersion">1</xsl:attribute>
     63      <xsl:attribute name="MinorVersion">0</xsl:attribute>
    6164      <xsl:attribute name="Language">0</xsl:attribute>
    6265      <xsl:attribute name="Description"><xsl:value-of select="@desc"/></xsl:attribute>
  • trunk/src/VBox/Installer/win/dep.sed

    r32113 r37289  
    55
    66#
    7 # Copyright (C) 2006-2010 Oracle Corporation
     7# Copyright (C) 2006-2011 Oracle Corporation
    88#
    99# This file is part of VirtualBox Open Source Edition (OSE), as
     
    1717
    1818# drop all lines not including a src property.
    19 /src=\"/!d
     19/Source=\"/!d
    2020# extract the file spec
    21 s/^.*src="\([^"]*\).*$/\1 /
     21s/^.*Source="\([^"]*\).*$/\1 /
    2222# convert to unix slashes
    2323s/\\/\//g
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