144 lines
3.6 KiB
C++
144 lines
3.6 KiB
C++
extern "C" {
|
|
#include <nt.h>
|
|
#include <ntrtl.h>
|
|
#include <nturtl.h>
|
|
}
|
|
|
|
#include <windows.h>
|
|
#include <setupapi.h>
|
|
|
|
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);*/
|
|
}
|
|
}
|
|
}
|