windows-nt/Source/XPSP1/NT/printscan/fax/setup/wizdll/client.c
2020-09-26 16:20:57 +08:00

203 lines
6.8 KiB
C

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
client.c
Abstract:
This file implements the file copy code.
Environment:
WIN32 User Mode
Author:
Wesley Witt (wesw) 17-Feb-1996
--*/
#include "wizard.h"
#pragma hdrstop
FILE_QUEUE_INFO ClientFileQueue[] =
{
//-----------------------------------------------------------------------------------------------------------------------------------------------------
// Section Name Dest Dir INF Dir Id Dest Dir Id Platforms Copy Flags
//-----------------------------------------------------------------------------------------------------------------------------------------------------
{ TEXT("ClientSystemFiles"), NULL, DIRID_SYSTEM, DIRID_SYSTEM, PLATFORM_NONE, SP_COPY_NEWER },
{ TEXT("HelpFilesCommon"), NULL, DIRID_HELP, DIRID_HELP, PLATFORM_NONE, SP_COPY_NEWER },
{ TEXT("HelpFilesClient"), NULL, DIRID_HELP, DIRID_HELP, PLATFORM_NONE, SP_COPY_NEWER },
{ TEXT("ServerPrinterFiles"), NULL, PRINTER_DRIVER_DIR, DIRID_SPOOLDRIVERS, PLATFORM_NONE, SP_COPY_NEWER },
{ TEXT("ClientCoverPageFiles"), COVERPAGE_DIR, COVERPAGE_CLIENT_DIR, DIRID_SYSTEM, PLATFORM_NONE, SP_COPY_NEWER },
{ TEXT("OutlookConfigFile"), OUTLOOKCONFIG_DIR, OUTLOOK_ECF_DIR, DIRID_WINDOWS, PLATFORM_NONE, SP_COPY_NEWER }
};
#define CountClientFileQueue (sizeof(ClientFileQueue)/sizeof(FILE_QUEUE_INFO))
FILE_QUEUE_INFO PointPrintFileQueue[] =
{
//--------------------------------------------------------------------------------------------------------------------------------------
// Section Name Dest Dir INF Dir Id Dest Dir Id Platforms Copy Flags
//--------------------------------------------------------------------------------------------------------------------------------------
{ TEXT("ClientSystemFiles"), FAXCLIENTS_DIR, DIRID_SYSTEM, DIRID_SPOOLDRIVERS, PLATFORM_USE_MACHINE, SP_COPY_NEWER },
{ TEXT("HelpFilesCommon"), NULL, DIRID_HELP, DIRID_HELP, PLATFORM_NONE, SP_COPY_NEWER },
{ TEXT("HelpFilesClient"), NULL, DIRID_HELP, DIRID_HELP, PLATFORM_NONE, SP_COPY_NEWER },
{ TEXT("ServerPrinterFiles"), NULL, PRINTER_DRIVER_DIR, DIRID_SPOOLDRIVERS, PLATFORM_NONE, SP_COPY_NEWER },
{ TEXT("ClientCoverPageFiles"), COVERPAGE_DIR, COVERPAGE_CLIENT_DIR, DIRID_SYSTEM, PLATFORM_NONE, SP_COPY_NEWER },
{ TEXT("OutlookConfigFile"), OUTLOOKCONFIG_DIR, OUTLOOK_ECF_DIR, DIRID_WINDOWS, PLATFORM_NONE, SP_COPY_NEWER }
};
#define CountPointPrintFileQueue (sizeof(PointPrintFileQueue)/sizeof(FILE_QUEUE_INFO))
DWORD
ClientFileCopyThread(
HWND hwnd
)
{
HINF FaxSetupInf;
HSPFILEQ *FileQueue;
PVOID QueueContext;
DWORD ErrorCode = 0;
if (InstallMode & INSTALL_NEW) {
SendMessage( hwnd, WM_MY_PROGRESS, 0xff, 30 );
}
if (!InitializeFileQueue( hwnd, &FaxSetupInf, &FileQueue, &QueueContext, SourceDirectory )) {
ErrorCode = IDS_COULD_NOT_COPY_FILES;
goto error_exit;
}
if (!ProcessFileQueue( FaxSetupInf, FileQueue, QueueContext, SourceDirectory,
ClientFileQueue, CountClientFileQueue, InstallQueueCallback, SETUP_ACTION_COPY )) {
ErrorCode = IDS_COULD_NOT_COPY_FILES;
goto error_exit;
}
if (!CloseFileQueue( FileQueue, QueueContext )) {
ErrorCode = IDS_COULD_NOT_COPY_FILES;
goto error_exit;
}
if (InstallMode & INSTALL_NEW) {
SetProgress( hwnd, IDS_SETTING_REGISTRY );
if (!SetClientRegistryData()) {
PopUpMsg( hwnd, IDS_COULD_SET_REG_DATA, TRUE, 0 );
PropSheet_PressButton( GetParent(hwnd), PSBTN_CANCEL );
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
OkToCancel = TRUE;
return TRUE;
}
SetProgress( hwnd, IDS_CREATING_FAXPRT );
SetInstalledFlag( TRUE );
SetInstallType( FAX_INSTALL_NETWORK_CLIENT );
SetUnInstallInfo();
ErrorCode = CreateClientFaxPrinter( hwnd, WizData.PrinterName );
if (ErrorCode != ERROR_SUCCESS) {
SetInstalledFlag( FALSE );
ErrorCode = (ErrorCode == ERROR_ACCESS_DENIED) ?
IDS_PERMISSION_CREATE_PRINTER : IDS_COULD_NOT_CREATE_PRINTER;
goto error_exit;
}
SetProgress( hwnd, IDS_CREATING_GROUPS );
CreateGroupItems( FALSE, NULL );
InstallHelpFiles();
}
//
// do the exchange stuff
//
DoExchangeInstall( hwnd );
SetWindowLong( hwnd, DWL_MSGRESULT, 0 );
PropSheet_PressButton( GetParent(hwnd), PSBTN_NEXT );
return TRUE;
error_exit:
InstallThreadError = ErrorCode;
PopUpMsg( hwnd, ErrorCode, TRUE, 0 );
OkToCancel = TRUE;
PropSheet_PressButton( GetParent(hwnd), PSBTN_CANCEL );
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
return FALSE;
}
DWORD
PointPrintFileCopyThread(
HWND hwnd
)
{
HINF FaxSetupInf;
HSPFILEQ *FileQueue;
PVOID QueueContext;
DWORD ErrorCode = 0;
SendMessage( hwnd, WM_MY_PROGRESS, 0xff, 20 );
if (!InitializeFileQueue( hwnd, &FaxSetupInf, &FileQueue, &QueueContext, SourceDirectory )) {
ErrorCode = IDS_COULD_NOT_COPY_FILES;
goto error_exit;
}
if (!ProcessFileQueue( FaxSetupInf, FileQueue, QueueContext, SourceDirectory,
PointPrintFileQueue, CountPointPrintFileQueue, InstallQueueCallback, SETUP_ACTION_COPY )) {
ErrorCode = IDS_COULD_NOT_COPY_FILES;
goto error_exit;
}
if (!CloseFileQueue( FileQueue, QueueContext )) {
ErrorCode = IDS_COULD_NOT_COPY_FILES;
goto error_exit;
}
SetProgress( hwnd, IDS_SETTING_REGISTRY );
if (!SetClientRegistryData()) {
PopUpMsg( hwnd, IDS_COULD_SET_REG_DATA, TRUE, 0 );
PropSheet_PressButton( GetParent(hwnd), PSBTN_CANCEL );
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
OkToCancel = TRUE;
return TRUE;
}
SetProgress( hwnd, IDS_CREATING_GROUPS );
CreateGroupItems( FALSE, ClientSetupServerName );
SetWindowLong( hwnd, DWL_MSGRESULT, 0 );
PropSheet_PressButton( GetParent(hwnd), PSBTN_FINISH );
return TRUE;
error_exit:
InstallThreadError = ErrorCode;
PopUpMsg( hwnd, ErrorCode, TRUE, 0 );
OkToCancel = TRUE;
PropSheet_PressButton( GetParent(hwnd), PSBTN_CANCEL );
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
return FALSE;
}