Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
324 views
in Technique[技术] by (71.8m points)

ram - Inno Setup - How can I check system specs before/during installation?

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...

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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 InnoSetup 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;

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

56.9k users

...