特别是,我想检查 PC 上安装的 RAM 量。如果小于 1GB,我想在安装之前/期间显示警告消息...
问问题
3959 次
2 回答
9
我会在安装开始时亲自进行此检查,以免让用户通过安装向导感到失望。为此,我将在向导实际显示为它在以下脚本中使用之前显示警告。当内存低于机器上检测到的 1073,741.824 B (1GB) 物理内存时,它应该警告用户。如果用户不同意警告,则终止设置;如果实际物理内存超过上述数量或用户接受了警告,则设置过程将继续:
[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'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;
于 2013-06-10T23:10:21.937 回答
1
希望这会帮助你...
#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;
于 2013-07-06T15:49:55.377 回答