Index: trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp
===================================================================
--- trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp	(revision 93241)
+++ trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp	(revision 93242)
@@ -1861,2 +1861,90 @@
 }
 
+
+/**
+ * This is used to remove the old VBoxDrv service before installation.
+ *
+ * The current service name is VBoxSup but the INF file won't remove the old
+ * one, so we do it manually to try prevent trouble as the device nodes are the
+ * same and we would fail starting VBoxSup.sys if VBoxDrv.sys is still loading.
+ *
+ * Status code is ignored for now as a reboot should fix most potential trouble
+ * here (and I don't want to break stuff too badly).
+ *
+ * @sa @bugref{10162}
+ */
+UINT __stdcall UninstallVBoxDrv(MSIHANDLE hModule)
+{
+    /*
+     * Try open the service.
+     */
+    SC_HANDLE hSMgr = OpenSCManager(NULL, NULL, SERVICE_CHANGE_CONFIG | SERVICE_STOP | SERVICE_QUERY_STATUS);
+    if (hSMgr)
+    {
+        SC_HANDLE hService = OpenServiceW(hSMgr, L"VBoxDrv", DELETE | SERVICE_STOP | SERVICE_QUERY_STATUS);
+        if (hService)
+        {
+            /*
+             * Try stop it before we delete it.
+             */
+            SERVICE_STATUS Status = { 0, 0, 0, 0, 0, 0, 0 };
+            QueryServiceStatus(hService, &Status);
+            if (Status.dwCurrentState == SERVICE_STOPPED)
+                logStringF(hModule, "VBoxDrv: The service old service was already stopped");
+            else
+            {
+                logStringF(hModule, "VBoxDrv: Stopping the service (state %u)", Status.dwCurrentState);
+                if (ControlService(hService, SERVICE_CONTROL_STOP, &Status))
+                {
+                    /* waiting for it to stop: */
+                    int iWait = 100;
+                    while (Status.dwCurrentState == SERVICE_STOP_PENDING && iWait-- > 0)
+                    {
+                        Sleep(100);
+                        QueryServiceStatus(hService, &Status);
+                    }
+
+                    if (Status.dwCurrentState == SERVICE_STOPPED)
+                        logStringF(hModule, "VBoxDrv: Stopped service");
+                    else
+                        logStringF(hModule, "VBoxDrv: Failed to stop the service, status: %u", Status.dwCurrentState);
+                }
+                else
+                {
+                    DWORD const dwErr = GetLastError();
+                    if (   Status.dwCurrentState == SERVICE_STOP_PENDING
+                        && dwErr == ERROR_SERVICE_CANNOT_ACCEPT_CTRL)
+                        logStringF(hModule, "VBoxDrv: Failed to stop the service: stop pending, not accepting control messages");
+                    else
+                        logStringF(hModule, "VBoxDrv: Failed to stop the service: dwErr=%u status=%u", dwErr, Status.dwCurrentState);
+                }
+            }
+
+            /*
+             * Delete the service, or at least mark it for deletion.
+             */
+            if (DeleteService(hService))
+                logStringF(hModule, "VBoxDrv: Successfully delete service");
+            else
+                logStringF(hModule, "VBoxDrv: Failed to delete the service: %u", GetLastError());
+
+            CloseServiceHandle(hService);
+        }
+        else
+        {
+            DWORD const dwErr = GetLastError();
+            if (dwErr == ERROR_SERVICE_DOES_NOT_EXIST)
+                logStringF(hModule, "VBoxDrv: Nothing to do, the old service does not exist");
+            else
+                logStringF(hModule, "VBoxDrv: Failed to open the service: %u", dwErr);
+        }
+
+        CloseServiceHandle(hSMgr);
+    }
+    else
+        logStringF(hModule, "VBoxDrv: Failed to open service manager (%u).", GetLastError());
+
+    return ERROR_SUCCESS;
+}
+
+
Index: trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def
===================================================================
--- trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def	(revision 93241)
+++ trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def	(revision 93242)
@@ -31,4 +31,5 @@
     UninstallNetLwf
     UninstallTAPInstances
+    UninstallVBoxDrv
     CreateHostOnlyInterface
     StopHostOnlyInterfaces
Index: trunk/src/VBox/Installer/win/VirtualBox.wxs
===================================================================
--- trunk/src/VBox/Installer/win/VirtualBox.wxs	(revision 93241)
+++ trunk/src/VBox/Installer/win/VirtualBox.wxs	(revision 93242)
@@ -202,4 +202,7 @@
                   DllEntry="UninstallTAPInstances" Execute="deferred" Return="check" Impersonate="no"/>
 
+    <CustomAction Id="ca_UninstallVBoxDrv" BinaryKey="VBoxInstallHelper"
+                  DllEntry="UninstallVBoxDrv" Execute="deferred" Return="ignore" Impersonate="no"/>
+
     <Property Id="VBOXDEPENDENCY" Secure="yes">
         <DirectorySearch Id="VBoxInstallDir" Path="[EXISTINGINSTALLDIR]">
@@ -624,4 +627,7 @@
         <Custom Action="ca_UninstallTAPInstances" Before="InstallFiles" >1</Custom>
 
+        <!-- Check + uninstall old VBoxDrv service - it was renamed to VBoxSup.  -->
+        <Custom Action="ca_UninstallVBoxDrv" Before="InstallFiles" >1</Custom>
+
         <Custom Action="ca_InstallBrandingArgs" Before="ca_InstallBranding" ><![CDATA[NOT REMOVE]]></Custom>
         <Custom Action="ca_InstallBranding" Before="InstallFinalize" ><![CDATA[NOT REMOVE]]></Custom>
