⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 installer.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
📖 第 1 页 / 共 2 页
字号:
	AdminSEAWork.NetSize=NetSize;
	AdminSEAWork.SetupBuffer=SetupBuffer;
	AdminSEAWork.SetupSize=SetupSize;
	AdminSEAWork.KeysBuffer=KeysBuffer;
	AdminSEAWork.KeysSize=KeysSize;
	AdminSEAWork.dwDelete=dwDelete;

	if(IsPGPError(PGPscProgressDialog(hwnd,RebuildInstallerStub,&AdminSEAWork,
		  0,NULL,
		  NULL,NULL,0)))
		  return FALSE;

	return TRUE;
}


BOOL CALLBACK InstallerDlgProc(HWND hwndDlg, 
							   UINT uMsg, 
							   WPARAM wParam, 
							   LPARAM lParam)
{
	BOOL			bReturnCode	= FALSE;
	pgpConfigInfo *	pConfig		= NULL;

	g_hCurrentDlgWnd = hwndDlg;

	if (uMsg != WM_INITDIALOG)
		pConfig = (pgpConfigInfo *) GetWindowLong(hwndDlg, GWL_USERDATA);

	switch(uMsg)
	{
	case WM_INITDIALOG:
		pConfig = (pgpConfigInfo *) lParam;
		SetWindowLong(hwndDlg, GWL_USERDATA, lParam);
		
		if (pConfig->szAdminInstaller == NULL)
			SetWindowText(GetDlgItem(hwndDlg, IDC_ADMININSTALLER), "");
		else
			SetWindowText(GetDlgItem(hwndDlg, IDC_ADMININSTALLER), 
				pConfig->szAdminInstaller);
		
		if (pConfig->szClientInstaller == NULL)
			SetWindowText(GetDlgItem(hwndDlg, IDC_CLIENTINSTALLER), "");
		else
			SetWindowText(GetDlgItem(hwndDlg, IDC_CLIENTINSTALLER), 
				pConfig->szClientInstaller);

		break;

	case WM_CLOSE:
		EndDialog(hwndDlg, 0);
		break;

	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDOK:
			{
				char szMsg[255];
				char szTitle[255];
				char szAdmin[MAX_PATH];
				char szClient[MAX_PATH];
				HANDLE hFile;
				
				bReturnCode = TRUE;

				if (!GetWindowTextLength(GetDlgItem(hwndDlg, 
						IDC_ADMININSTALLER)))
				{
					LoadString(g_hInstance, IDS_E_BLANKADMIN, szMsg, 254);
					LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
					MessageBox(hwndDlg, szMsg, szTitle, MB_ICONEXCLAMATION);
					
					break;
				}
				
				if (!GetWindowTextLength(GetDlgItem(hwndDlg, 
						IDC_CLIENTINSTALLER)))
				{
					LoadString(g_hInstance, IDS_E_BLANKCLIENT, szMsg, 254);
					LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
					MessageBox(hwndDlg, szMsg, szTitle, MB_ICONEXCLAMATION);
					
					break;
				}
				
				GetWindowText(GetDlgItem(hwndDlg, IDC_ADMININSTALLER), 
					szAdmin, MAX_PATH-1);
				GetWindowText(GetDlgItem(hwndDlg, IDC_CLIENTINSTALLER), 
					szClient, MAX_PATH-1);
				
				if (strlen(szAdmin) >= 4)
				{
					if (strnicmp(&(szAdmin[strlen(szAdmin)-4]), ".exe", 4))
					{
						strcat(szAdmin, ".exe");
					
						SetWindowText(GetDlgItem(hwndDlg, IDC_ADMININSTALLER), 
							szAdmin);
					}
				}

				if (strlen(szClient) >= 4)
				{
					if (strnicmp(&(szClient[strlen(szClient)-4]), ".exe", 4))
					{
						strcat(szClient, ".exe");
					
						SetWindowText(GetDlgItem(hwndDlg, IDC_CLIENTINSTALLER), 
							szClient);
					}
				}

				if (!stricmp(szAdmin, szClient))
				{
					LoadString(g_hInstance, IDS_E_INSTALLDIR, szMsg, 254);
					LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
					MessageBox(hwndDlg, szMsg, szTitle, MB_ICONEXCLAMATION);
					
					break;
				}
				
				hFile = CreateFile(szClient, GENERIC_READ | GENERIC_WRITE, 0, 
							NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);

				if (hFile == INVALID_HANDLE_VALUE)
				{
					if ((GetLastError() == ERROR_ALREADY_EXISTS) ||
						(GetLastError() == ERROR_FILE_EXISTS))
					{
						LoadString(g_hInstance, IDS_Q_ALREADYEXISTS, szMsg, 254);
						LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
						if (MessageBox(hwndDlg, szMsg, szTitle, MB_YESNO | 
							MB_ICONQUESTION) == IDNO)
							break;
					}
					else if (!SetFileAttributes(szClient, FILE_ATTRIBUTE_NORMAL))
					{
						LoadString(g_hInstance, IDS_E_CANTCOPY, szMsg, 254);
						LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
						MessageBox(hwndDlg, szMsg, szTitle, MB_ICONEXCLAMATION);
						
						break;
					}
				}
				else
					CloseHandle(hFile);

				if (pConfig->szAdminInstaller)
					PGPFreeData(pConfig->szAdminInstaller);
			
				pConfig->szAdminInstaller = (char *) 
											PGPNewData(pConfig->memoryMgr,
												strlen(szAdmin) + 1,
												kPGPMemoryMgrFlags_Clear);

				strcpy(pConfig->szAdminInstaller, szAdmin);

				if (pConfig->szClientInstaller)
					PGPFreeData(pConfig->szClientInstaller);
			
				pConfig->szClientInstaller = (char *) 
											PGPNewData(pConfig->memoryMgr,
												strlen(szClient) + 1,
												kPGPMemoryMgrFlags_Clear);

				strcpy(pConfig->szClientInstaller, szClient);
			}

			sCreateInstaller(hwndDlg, pConfig);
			EndDialog(hwndDlg, 1);
			break;

		case IDCANCEL:
			EndDialog(hwndDlg, 0);
			break;

		case IDC_ADMINBROWSE:
			if (HIWORD(wParam) == BN_CLICKED)
			{
				OPENFILENAME openFile;
				char szAdminFile[MAX_PATH];
				char szTitle[256];

				strcpy(szAdminFile, "\0");
				LoadString(g_hInstance, IDS_GETADMININSTALLER, szTitle, 
					255);

				openFile.lStructSize = sizeof(OPENFILENAME);
				openFile.hwndOwner = hwndDlg;
				openFile.lpstrFilter =	"Executable Files (*.exe)\0"
										"*.exe\0";
				openFile.lpstrCustomFilter = NULL;
				openFile.nFilterIndex = 1;
				openFile.lpstrFile = szAdminFile;
				openFile.nMaxFile = MAX_PATH-1;
				openFile.lpstrFileTitle = NULL;
				openFile.lpstrInitialDir = NULL;
				openFile.lpstrTitle = szTitle;
				openFile.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY |
									OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR;
				openFile.lpstrDefExt = "exe";

				while (GetOpenFileName(&openFile))
				{
					SDAHEADER SDAHeader;
					FILE *fin;
					
					fin=fopen(szAdminFile, "rb");
					
					fseek(fin, -(int)(sizeof(SDAHEADER)), SEEK_END);
					fread(&SDAHeader,1,sizeof(SDAHEADER),fin);
					fclose(fin);
					
					if (memcmp(SDAHeader.szPGPSDA,"PGPSEA",6)!=0)
					{
						char szMsg[255];

						LoadString(g_hInstance, IDS_E_NOTINSTALLER, szMsg, 
							254);
						LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
						MessageBox(hwndDlg, szMsg, szTitle, 
							MB_ICONEXCLAMATION);
						continue;
					}

					if (SDAHeader.NumFiles < 30)
					{
						char szMsg[255];

						LoadString(g_hInstance, IDS_E_WRONGINSTALLER, szMsg, 
							254);
						LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
						MessageBox(hwndDlg, szMsg, szTitle, 
							MB_ICONEXCLAMATION);
						continue;
					}
					
					SetWindowText(GetDlgItem(hwndDlg, IDC_ADMININSTALLER),
						szAdminFile);
					break;
				}

				bReturnCode = TRUE;
			}
			break;

		case IDC_CLIENTBROWSE:
			if (HIWORD(wParam) == BN_CLICKED)
			{
				OPENFILENAME openFile;
				char szClientFile[MAX_PATH];
				char szTitle[256];

				strcpy(szClientFile, "\0");
				LoadString(g_hInstance, IDS_GETCLIENTINSTALLER, szTitle, 
					255);

				openFile.lStructSize = sizeof(OPENFILENAME);
				openFile.hwndOwner = hwndDlg;
				openFile.lpstrFilter =	"Executable Files (*.exe)\0"
										"*.exe\0";
				openFile.lpstrCustomFilter = NULL;
				openFile.nFilterIndex = 1;
				openFile.lpstrFile = szClientFile;
				openFile.nMaxFile = MAX_PATH-1;
				openFile.lpstrFileTitle = NULL;
				openFile.lpstrInitialDir = NULL;
				openFile.lpstrTitle = szTitle;
				openFile.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR;
				openFile.lpstrDefExt = "exe";

				if (GetSaveFileName(&openFile))
				{
					SetWindowText(GetDlgItem(hwndDlg, IDC_CLIENTINSTALLER),
						szClientFile);
					DeleteFile(szClientFile);
				}

				bReturnCode = TRUE;
			}
			break;
		}
		
		break;
	}

	return(bReturnCode);
}


BOOL CALLBACK WaitProc(HWND hwndDlg, 
					   UINT uMsg, 
					   WPARAM wParam, 
					   LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_INITDIALOG:
		{
			PGPclCenterWindowOnMonitor(hwndDlg, kPGPclPrimaryMonitor);
			break;
		}
	}

	return 0;
}


static void sCreateInstaller(HWND hwndMain, pgpConfigInfo *pConfig)
{
	char			szSetupIni[MAX_PATH];
	char *			szClientBuffer = NULL;
	char *			szNetBuffer = NULL;
	char *			szSetupBuffer = NULL;
	char *			szKeysBuffer = NULL;
	PGPSize			nClientBufferSize = 0;
	PGPSize			nNetBufferSize = 0;
	PGPSize			nSetupBufferSize = 0;
	PGPSize			nKeysBufferSize = 0;
	HANDLE			hFile;
	char			szMsg[255];
	char			szTitle[255];
	DWORD			dwBytesRead;
	DWORD			dwDelete;
	BOOL			bInstallMail;
	BOOL			bDesktopSecurity;
	
	// Load the prefs to a buffer
	
	hFile = CreateFile(pConfig->szClientPrefs, GENERIC_READ, 0, NULL, 
				OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	nClientBufferSize = GetFileSize(hFile, NULL);
		
	szClientBuffer = (char *) PGPNewData(pConfig->memoryMgr,
								nClientBufferSize,
								kPGPMemoryMgrFlags_Clear);
		
	ReadFile(hFile, szClientBuffer, nClientBufferSize, &dwBytesRead, NULL);
	CloseHandle(hFile);

	hFile = CreateFile(pConfig->szNetPrefs, GENERIC_READ, 0, NULL, 
				OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	nNetBufferSize = GetFileSize(hFile, NULL);
		
	szNetBuffer = (char *) PGPNewData(pConfig->memoryMgr,
								nNetBufferSize,
								kPGPMemoryMgrFlags_Clear);
		
	ReadFile(hFile, szNetBuffer, nNetBufferSize, &dwBytesRead, NULL);
	CloseHandle(hFile);

	if (pConfig->defaultKeys)
	{
		// Load the default keys to a buffer
		
		hFile = CreateFile(pConfig->szDefaultKeys, GENERIC_READ, 0, NULL, 
					OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
		nKeysBufferSize = GetFileSize(hFile, NULL);
		
		if (nKeysBufferSize > 0)
		{
			szKeysBuffer = (char *) PGPNewData(pConfig->memoryMgr,
										nKeysBufferSize,
										kPGPMemoryMgrFlags_Clear);
			
			ReadFile(hFile, szKeysBuffer, nKeysBufferSize, &dwBytesRead, NULL);
		}
		CloseHandle(hFile);
	}

	// Now create the client installer
	
	if (GetTempPath(MAX_PATH-1, szSetupIni))
	{
		DWORD dwBytesRead;
		
		strcat(szSetupIni, "setup.ini");
		
		WritePrivateProfileString("Startup", "AppName", "PGP", szSetupIni);
		WritePrivateProfileString("Startup", "FreeDiskSpace", "0", szSetupIni);
		WritePrivateProfileString("ISUPDATE", "UpdateURL", "", szSetupIni);
		WritePrivateProfileString("Languages", "Default", "0x0009", szSetupIni);
		WritePrivateProfileString("Languages", "Count", "1", szSetupIni);
		WritePrivateProfileString("Languages", "key0", "0x0009", szSetupIni);

		// Write the installation options if applicable
		
		if (pConfig->bPreselectInstall)
		{
			char szPrograms[3];
			char szLogin[3];
			char szNet[3];
			char szFire[3];
			char szDisk[3];
			char szEudora[3];
			char szOutlook[3];
			char szOutlookExpress[3];
			char szICQ[3];
			char szLotus[3];
			char szGroupwise[3];
			char szManual[3];
			char szUninstallOld[3];
			char szAutoReboot[3];
			
			WritePrivateProfileString("Startup", "EasyInstall", "1",
				szSetupIni);
			
			WritePrivateProfileString("Startup", "InstallDir",
				pConfig->szUserInstallDir, szSetupIni);
			
			wsprintf(szPrograms, "%d", pConfig->bInstallPrograms);
			wsprintf(szLogin, "%d", 0);
			wsprintf(szNet, "%d", pConfig->bInstallNet);
			wsprintf(szFire, "%d", pConfig->bInstallFire);
			wsprintf(szDisk, "%d", pConfig->bInstallDisk);
			wsprintf(szEudora, "%d", pConfig->bInstallEudora);
			wsprintf(szOutlook, "%d", pConfig->bInstallOutlook);
			wsprintf(szOutlookExpress, "%d", pConfig->bInstallOutExpress);
			wsprintf(szICQ, "%d", pConfig->bInstallICQ);
			wsprintf(szLotus, "%d", pConfig->bInstallLotus);
			wsprintf(szGroupwise, "%d", pConfig->bInstallGroupwise);
			wsprintf(szManual, "%d", pConfig->bInstallManual);
			wsprintf(szUninstallOld, "%d", pConfig->bUninstallOld);
			wsprintf(szAutoReboot, "%d", pConfig->bAutoReboot);
			
			WritePrivateProfileString("Startup", "ProgramFiles",
				szPrograms, szSetupIni);
			WritePrivateProfileString("Startup", "PGPLogin",
				szLogin, szSetupIni);
			WritePrivateProfileString("Startup", "PGPnet",
				szNet, szSetupIni);
			WritePrivateProfileString("Startup", "PGPfire",
				szFire, szSetupIni);
			WritePrivateProfileString("Startup", "PGPdisk",
				szDisk, szSetupIni);
			WritePrivateProfileString("Startup", "EudoraPlugin",
				szEudora, szSetupIni);
			WritePrivateProfileString("Startup", "OutlookPlugin",
				szOutlook, szSetupIni);
			WritePrivateProfileString("Startup", "OutlookExpressPlugin",
				szOutlookExpress, szSetupIni);
			WritePrivateProfileString("Startup", "ICQPlugin",
				szICQ, szSetupIni);
			WritePrivateProfileString("Startup", "LotusPlugin",
				szLotus, szSetupIni);
			WritePrivateProfileString("Startup", "GroupwisePlugin",
				szGroupwise, szSetupIni);
			WritePrivateProfileString("Startup", "Documentation",
				szManual, szSetupIni);
			WritePrivateProfileString("Startup", "UninstallOld",
				szUninstallOld, szSetupIni);
			WritePrivateProfileString("Startup", "AutoReboot",
				szAutoReboot, szSetupIni);
		}
		else
			WritePrivateProfileString("Startup", "EasyInstall", "0",
			szSetupIni);
		
		// On windows 95, we must flush the ini file by using three
		// nulls -wjb
		WritePrivateProfileString(NULL,NULL,NULL,
			szSetupIni);
		
		hFile = CreateFile(szSetupIni, GENERIC_READ, 0, NULL, OPEN_ALWAYS,
					FILE_ATTRIBUTE_NORMAL, NULL);
		nSetupBufferSize = GetFileSize(hFile, NULL);
		
		szSetupBuffer = (char *) PGPNewData(pConfig->memoryMgr,
									nSetupBufferSize,
									kPGPMemoryMgrFlags_Clear);
		
		ReadFile(hFile, szSetupBuffer, nSetupBufferSize, 
			&dwBytesRead, NULL);
		CloseHandle(hFile);
		DeleteFile(szSetupIni);
	}

	// Tell install rebuild which components to delete
	dwDelete=0;
	bDesktopSecurity = GetInstalledProduct(NULL) & Installer_PGPds;
	bInstallMail = pConfig->bInstallEudora || pConfig->bInstallOutlook ||
					pConfig->bInstallICQ || pConfig->bInstallOutExpress ||
					pConfig->bInstallLotus || pConfig->bInstallGroupwise;

	if(!pConfig->bInstallDisk && !pConfig->bInstallNet && !bInstallMail &&
		!bDesktopSecurity)
		dwDelete|=DEL_KEYS;
	if(!bInstallMail && !bDesktopSecurity)
		dwDelete|=DEL_TOOLS;
	if(!pConfig->bInstallDisk && !bInstallMail && !bDesktopSecurity)
		dwDelete|=DEL_CONTEXT;
	if(!pConfig->bInstallLogin)
		dwDelete|=DEL_LOGIN;
	if(!pConfig->bInstallNet && !pConfig->bInstallFire)
		dwDelete|=DEL_NET;
	if(!pConfig->bInstallNet)
		dwDelete|=DEL_VPN;
	if(!pConfig->bInstallFire)
		dwDelete|=DEL_FIRE;
	if(!pConfig->bInstallDisk)
		dwDelete|=DEL_DISK;
	if(!pConfig->bInstallEudora)
		dwDelete|=DEL_EUDORA;
	if(!pConfig->bInstallOutlook)
		dwDelete|=DEL_OUTLOOK;
	if(!pConfig->bInstallOutExpress)
		dwDelete|=DEL_OE;
	if(!pConfig->bInstallICQ)
		dwDelete|=DEL_ICQ;
	if(!pConfig->bInstallLotus)
		dwDelete|=DEL_LOTUS;
	if(!pConfig->bInstallGroupwise)
		dwDelete|=DEL_GROUPWISE;
	if(!pConfig->bInstallManual)
		dwDelete|=DEL_DOCS;

	if (RebuildInstaller(hwndMain,
					dwDelete,
					pConfig->szAdminInstaller,
					pConfig->szClientInstaller,
					szClientBuffer, 
					nClientBufferSize, 
					szNetBuffer, 
					nNetBufferSize, 
					szSetupBuffer, 
					nSetupBufferSize,
					szKeysBuffer,
					nKeysBufferSize))
	{
		if (SetFileAttributes(pConfig->szClientInstaller, 
			FILE_ATTRIBUTE_NORMAL))
		{
			// We're done!
			
			LoadString(g_hInstance, IDS_DONE, szMsg, 254);
			LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
			MessageBox(hwndMain, szMsg, szTitle, MB_ICONINFORMATION);
		}
		else
		{
			// Setting attributes failed
			
			LoadString(g_hInstance, IDS_FAILED, szMsg, 254);
			LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
			MessageBox(hwndMain, szMsg, szTitle, MB_ICONEXCLAMATION);
			DeleteFile(pConfig->szClientInstaller);
		}
	}
	else
	{
		// Copying file failed
		
		LoadString(g_hInstance, IDS_FAILED, szMsg, 254);
		LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
		MessageBox(hwndMain, szMsg, szTitle, MB_ICONEXCLAMATION);
		DeleteFile(pConfig->szClientInstaller);
	}
	
	if (szClientBuffer != NULL)
		PGPFreeData(szClientBuffer);
	if (szNetBuffer != NULL)
		PGPFreeData(szNetBuffer);
	if (szSetupBuffer != NULL)
		PGPFreeData(szSetupBuffer);
	if (szKeysBuffer != NULL)
		PGPFreeData(szKeysBuffer);

	return;
}


/*__Editor_settings____

	Local Variables:
	tab-width: 4
	End:
	vi: ts=4 sw=4
	vim: si
_____________________*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -