Inno Setup - How to check system settings before / during installation?

In particular, I would like to check the amount of RAM installed on the PC. If it is less than 1 GB, I would like to show a warning message before / during installation ...

+5
source share
2 answers

I personally would do this check at the beginning of the setup so as not to disappoint the user going through the installation wizard. To do this, I will show a warning before the wizard is actually shown as used in the following script. It should warn the user when the memory is below 1073 741.824 B (1 GB) of physical memory found on the device. If the user does not agree with the warning, the installation stops; if there is more than the specified amount of actual physical memory or the user accepted the warning, the installation 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 ' GlobalMemoryStatusEx@kernel32.dll stdcall'; function InitializeSetup: Boolean; var MemoryStatus: TMemoryStatusEx; begin { allow the installation (even if the GlobalMemoryStatusEx call fails) } Result := True; { that 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 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; 
+7
source

Hope this helps you ...

 #define MyAppName "RAM SIZE" #define MyAppVersion "1.5" #define MyAppPublisher "My Company, Inc." #define MyAppURL "http://www.example.com/" #define MyAppExeName "MyProg.exe" [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId={{5DC352AD-7D20-41C8-9372-B174BDE452CB} AppName={#MyAppName} AppVersion={#MyAppVersion} ;AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} CreateAppDir=no OutputBaseFilename=setup Compression=lzma SolidCompression=yes [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" [code] procedure initializeWizard; var i,ramsize:integer; resultcode:integer; TmpFileName,ExecStdout,tempstr:string; begin TmpFileName := ExpandConstant('{tmp}') + '\systeminformation.txt'; Exec('cmd.exe', '/C systeminfo |find "Total Physical Memory" > "' + TmpFileName + '"', '', SW_HIDE,ewWaitUntilTerminated, ResultCode); if LoadStringFromFile(TmpFileName, ExecStdout) then begin deletefile(TmpFileName); ExecStdout:=copy(Execstdout,27,6); for i:=1 to length(Execstdout) do begin if ((Execstdout[i]>='0') and (Execstdout[i]<='9'))then tempstr:=tempstr+Execstdout[i]; end; ramsize:=strtoint(tempstr); Msgbox('RAM SIZE OF THIS SYSTEM IS : '+tempstr+' MB' ,mbinformation,mb_ok); Msgbox('RAM SIZE OF THIS SYSTEM IS : '+inttostr(ramsize)+' MB' ,mbinformation,mb_ok); if ramsize<1024 then Msgbox('Warning:RAM SIZE IS LESS THAN 1 GB , Do you want to proceed ',mbinformation,mb_yesno); //result is IDYES if you press yes then contiue after check.. end; end; 
+1
source

Source: https://habr.com/ru/post/1485455/


All Articles