📄 installer.c
字号:
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 + -