hi all,
Whats the best way to simplyfy this function?
LRESULT CMainDlg::OnInstall(WORD , WORD wID, HWND , BOOL& )
{
DWORD BufferSize, Size, Type;
BufferSize = TOTALBYTES;
PPERF_DATA_BLOCK PerfData = (PPERF_DATA_BLOCK) malloc( BufferSize );
string LaunchInstaller;
string InstallFolder;
CAtlString StrTable;
TCHAR tcItemText[MAXBYTES];
StrTable.LoadStringA(IDS_ServiceRegEntry);
LaunchInstaller.append(StrTable.GetString());
StrTable.LoadStringA(IDS_LongProjectName);
LaunchInstaller.append(StrTable.GetString());
StrTable.LoadStringA(IDS_ServiceParam);
LaunchInstaller.append(StrTable.GetString());
LaunchInstaller.append("\\");
StrTable.LoadStringA(IDS_MANAGEKEY);
LaunchInstaller.append(StrTable.GetString());
if(UpdateList.GetItemText(Select, tcItemText, MAXBYTES))
{
LaunchInstaller.append("\\");
LaunchInstaller.append(tcItemText);
InstallFolder = tcItemText;
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, LaunchInstaller.c_str(), REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,&Regentry);
if (lResult == ERROR_SUCCESS)
{
Size = BufferSize;
StrTable.LoadStringA(IDS_UPDATEINSTALL);
lResult = RMRegQueryValueEx(Regentry, StrTable.GetString(), NULL, &Type, reinterpret_cast<LPBYTE>(SoftwareInstaller), &Size);
Size = BufferSize;
StrTable.LoadStringA(IDS_UPDATEFILE);
RMRegQueryValueEx(Regentry, StrTable.GetString(), NULL, &Type, reinterpret_cast<LPBYTE>(SoftwarePath), &Size);
if(lResult == ERROR_SUCCESS)
{
Path = SoftwarePath;
InstallFolder = SoftwareInstaller;
if(!(Path.empty()))
{
ExecuteInstaller(Path, InstallFolder);
}
}
RegCloseKey(Regentry);
Regentry = NULL;
}
else
{
LaunchInstaller = "";
StrTable.LoadStringA(IDS_ServiceRegEntry);
LaunchInstaller.append(StrTable.GetString());
StrTable.LoadStringA(IDS_LongProjectName);
LaunchInstaller.append(StrTable.GetString());
StrTable.LoadStringA(IDS_ServiceParam);
LaunchInstaller.append(StrTable.GetString());
LaunchInstaller.append("\\");
StrTable.LoadStringA(IDS_RERITEKEY);
LaunchInstaller.append(StrTable.GetString());
LaunchInstaller.append("\\");
LaunchInstaller.append(tcItemText);
InstallFolder = tcItemText;
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, LaunchInstaller.c_str(), REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,&Regentry);
if (lResult == ERROR_SUCCESS)
{
Size = BufferSize;
StrTable.LoadStringA(IDS_UPDATEINSTALL);
lResult = RMRegQueryValueEx(Regentry, StrTable.GetString(), NULL, &Type, reinterpret_cast<LPBYTE>(SoftwareInstaller), &Size);
Size = BufferSize;
StrTable.LoadStringA(IDS_UPDATEFILE);
RMRegQueryValueEx(Regentry, StrTable.GetString(), NULL, &Type, reinterpret_cast<LPBYTE>(SoftwarePath), &Size);
if(lResult == ERROR_SUCCESS)
{
Path = SoftwarePath;
InstallFolder = SoftwareInstaller;
if(!(Path.empty()))
{
ExecuteInstaller(Path, InstallFolder);
}
}
RegCloseKey(Regentry);
Regentry = NULL;
}
else
{
LaunchInstaller = "";
StrTable.LoadStringA(IDS_ServiceRegEntry);
LaunchInstaller.append(StrTable.GetString());
StrTable.LoadStringA(IDS_LongProjectName);
LaunchInstaller.append(StrTable.GetString());
StrTable.LoadStringA(IDS_ServiceParam);
LaunchInstaller.append(StrTable.GetString());
LaunchInstaller.append("\\");
StrTable.LoadStringA(IDS_RERITEASIANKEY);
LaunchInstaller.append(StrTable.GetString());
LaunchInstaller.append("\\");
LaunchInstaller.append(tcItemText);
InstallFolder = tcItemText;
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, LaunchInstaller.c_str(), REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,&Regentry);
if (lResult == ERROR_SUCCESS)
{
Size = BufferSize;
StrTable.LoadStringA(IDS_UPDATEINSTALL);
lResult = RMRegQueryValueEx(Regentry, StrTable.GetString(), NULL, &Type, reinterpret_cast<LPBYTE>(SoftwareInstaller), &Size);
Size = BufferSize;
StrTable.LoadStringA(IDS_UPDATEFILE);
RMRegQueryValueEx(Regentry, StrTable.GetString(), NULL, &Type, reinterpret_cast<LPBYTE>(SoftwarePath), &Size);
if(lResult == ERROR_SUCCESS)
{
Path = SoftwarePath;
InstallFolder = SoftwareInstaller;
if(!(Path.empty()))
{
ExecuteInstaller(Path, InstallFolder);
}
}
RegCloseKey(Regentry);
Regentry = NULL;
}
else
{
LaunchInstaller = "";
StrTable.LoadStringA(IDS_ServiceRegEntry);
LaunchInstaller.append(StrTable.GetString());
StrTable.LoadStringA(IDS_LongProjectName);
LaunchInstaller.append(StrTable.GetString());
StrTable.LoadStringA(IDS_ServiceParam);
LaunchInstaller.append(StrTable.GetString());
LaunchInstaller.append("\\");
StrTable.LoadStringA(IDS_RERITECHINAKEY);
LaunchInstaller.append(StrTable.GetString());
LaunchInstaller.append("\\");
LaunchInstaller.append(tcItemText);
InstallFolder = tcItemText;
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, LaunchInstaller.c_str(), REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,&Regentry);
if (lResult == ERROR_SUCCESS)
{
Size = BufferSize;
StrTable.LoadStringA(IDS_UPDATEINSTALL);
lResult = RMRegQueryValueEx(Regentry, StrTable.GetString(), NULL, &Type, reinterpret_cast<LPBYTE>(SoftwareInstaller), &Size);
Size = BufferSize;
StrTable.LoadStringA(IDS_UPDATEFILE);
RMRegQueryValueEx(Regentry, StrTable.GetString(), NULL, &Type, reinterpret_cast<LPBYTE>(SoftwarePath), &Size);
if(lResult == ERROR_SUCCESS)
{
Path = SoftwarePath;
InstallFolder = SoftwareInstaller;
if(!(Path.empty()))
{
ExecuteInstaller(Path, InstallFolder);
}
}
RegCloseKey(Regentry);
Regentry = NULL;
}
}
}
}
}
else
{
ATL::CString str;
str.Format ( _T("Please choose an item to install"));
MessageBox ( str, _T("Redmap Update Manager"), MB_ICONWARNING );
}
free( PerfData );
return 0;
}
Thanks,
Jayjay
|