In particular, I'd like to check the amount of RAM installed on the PC. If it's less than 1GB, I'd like to show a warning message before/during the installation...
I would personally do this check at the beginning of the setup to not disappoint the user going through the installation wizard. To do this, I would display the warning before the wizard is actually shown as its used in the following script. It should warn the user when the memory is below 1073,741.824 B (1GB) of physical memory detected on the machine. If the user disagree with the warning, the setup is terminated; if there's more than the mentioned amount of actual physical memory or the user accepted the warning, the setup process continues:
[Code]
type
// the following mapping of the DWORDLONG data type is wrong;
// the correct type is a 64-bit unsigned integer which is not
// available in Inno Setup Pascal Script at this time, so max.
// values of the following fields will be limited to quite a
// big reserve of 8589,934.592 GB of RAM; I hope enough for
// the next versions of Windows :-)
DWORDLONG = Int64;
TMemoryStatusEx = record
dwLength: DWORD;
dwMemoryLoad: DWORD;
ullTotalPhys: DWORDLONG;
ullAvailPhys: DWORDLONG;
ullTotalPageFile: DWORDLONG;
ullAvailPageFile: DWORDLONG;
ullTotalVirtual: DWORDLONG;
ullAvailVirtual: DWORDLONG;
ullAvailExtendedVirtual: DWORDLONG;
end;
function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): BOOL;
external '[email protected] stdcall';
function InitializeSetup: Boolean;
var
MemoryStatus: TMemoryStatusEx;
begin
// allow the installation (even if the GlobalMemoryStatusEx call fails)
Result := True;
// that's the requirement of the function call; you must set the size
// of the passed structure in bytes
MemoryStatus.dwLength := SizeOf(MemoryStatus);
// if the GlobalMemoryStatusEx function call succeed, then...
if GlobalMemoryStatusEx(MemoryStatus) then
begin
MsgBox(Int64ToStr(MemoryStatus.ullTotalPhys), mbInformation, MB_OK);
// if the amount of actual physical memory in bytes is less than
// 1073,741.824 B (1 GB), then show a warning message and according
// to user's decision abort the installation
if MemoryStatus.ullTotalPhys < 1073741824 then
begin
if MsgBox('You have less than 1GB of physical memory available. ' +
'Are you sure you want to continue with the installation ?',
mbConfirmation, MB_YESNO) = IDNO
then
Result := False;
end;
end;
end;