extern "C" { #include #include #include } #include #include VOID DoUninstall( IN HWND hWnd ) /*++ Routine Description: Uninstalls the cluster software by running the uninstall section of the cluster INF. Arguments: hWnd - Supplies the hWnd of the dialog to run the INF in. Return Value: None. --*/ { HINF ClusterSetupInf; CString TargetInf; CString error; CString GroupName; CString ItemName; DoingUninstall = TRUE; if(IsOtherSoftwareInstalled()) return; // // Stop the services if they are running. // StopService(L"ClusSvc"); // StopService(L"ClusDisk"); StopService(L"TimeServ"); UnloadClusDB(); // // Register CluAdMMC. // error = registerCOMObject(FALSE /*bRegister*/, _T("CluAdMMC.dll"), theApp.m_SetupDirectory); if (!error.IsEmpty()) { MessageBox(hWnd, error, _T("SETUP ERROR"), MB_OK | MB_ICONEXCLAMATION); } // // Register ClAdmWiz. // error = registerCOMObject(FALSE /*bRegister*/, _T("ClAdmWiz.dll"), theApp.m_SetupDirectory); if (!error.IsEmpty()) { MessageBox(hWnd, error, _T("SETUP ERROR"), MB_OK | MB_ICONEXCLAMATION); } // // Register CluAdmEx. // error = registerCOMObject(FALSE /*bRegister*/, _T("CluAdmEx.dll"), theApp.m_SetupDirectory); if (!error.IsEmpty()) { MessageBox(hWnd, error, _T("SETUP ERROR"), MB_OK | MB_ICONEXCLAMATION); } // // Register IISClEx3. // error = registerCOMObject(FALSE /*bRegister*/, _T("IISClEx3.dll"), theApp.m_SetupDirectory); if (!error.IsEmpty()) { MessageBox(hWnd, error, _T("SETUP ERROR"), MB_OK | MB_ICONEXCLAMATION); } // // Register ClNetREx. // error = registerCOMObject(FALSE /*bRegister*/, _T("ClNetREx.dll"), theApp.m_SetupDirectory); if (!error.IsEmpty()) { MessageBox(hWnd, error, _T("SETUP ERROR"), MB_OK | MB_ICONEXCLAMATION); } TargetInf = theApp.m_SetupDirectory; TargetInf +=_T("\\CLUSTER.INF"); // // Open the cluster setup INF file. // ClusterSetupInf = SetupOpenInfFile(TargetInf, NULL, INF_STYLE_WIN4, NULL); if (ClusterSetupInf == INVALID_HANDLE_VALUE ) { MessageBox(hWnd,_T("couldn't open INF"),_T("SETUP ERROR"),MB_OK | MB_ICONEXCLAMATION); return; } // Uninstall stuff ... #ifdef COPYCLUSTERFILES_IS_OBSOLETE error = copyClusterFiles(ClusterSetupInf, hWnd, _T("DefaultUninstall")); if(!error.IsEmpty()) { MessageBox(hWnd,error, _T("SETUP ERROR"), MB_OK | MB_ICONEXCLAMATION); return; } #endif // COPYCLUSTERFILES_IS_OBSOLETE // // Remove the cluster network provider // error = removeNetworkProvider(); if(!error.IsEmpty()) { MessageBox(hWnd,error, _T("SETUP ERROR"), MB_OK | MB_ICONEXCLAMATION); } // // Remove the cluster item from the start menu // GroupName.LoadString(IDS_START_GROUP_NAME); ItemName.LoadString(IDS_START_ITEM_NAME); DeleteItem(GroupName, TRUE, ItemName, FALSE); if ((!theApp.m_UninstallOnError) || theApp.m_RebootOnUninstall) { if (theApp.m_CommandLine->m_Force) { SystemShutdown(); } else { BOOL nResponse = AfxMessageBox(IDS_WRN_UNINSTALL,MB_OKCANCEL | MB_ICONEXCLAMATION); if(nResponse == IDOK) SystemShutdown(); /* SetupPromptReboot(NULL, hWnd, FALSE);*/ } } }