4 windows inno-setup pascalscript
我正在使用Inno Setup来更改操作系统中的回收站.如果用户运行Windows 7或Windows XP,我需要做一些案例.我尝试使用:
if not FileExists(winDir + '\System32\imageres.dll') then
if not FileExists(winDir + '\System32\shell32.dll') then
installError(3);
Run Code Online (Sandbox Code Playgroud)
但它似乎无法找到,imageres.dll
或者shell32.dll
即使我已经证实它们存在.我究竟做错了什么?或者我可以用另一种方式检查Windows版本吗?
你应该使用这个GetWindowsVersionEx
功能.它填写了一个TWindowsVersion
记录:
TWindowsVersion = record
Major: Cardinal; // Major version number
Minor: Cardinal; // Minor version number
Build: Cardinal; // Build number
ServicePackMajor: Cardinal; // Major version number of service pack
ServicePackMinor: Cardinal; // Minor version number of service pack
NTPlatform: Boolean; // True if an NT-based platform
ProductType: Byte; // Product type (see below)
SuiteMask: Word; // Product suites installed (see below)
end;
Run Code Online (Sandbox Code Playgroud)
还有很多其他相关功能.请参阅此页面上的 "系统功能" .
在大多数Inno Setup的部分(如[Files]
,[Tasks]
,[Run]
,等),你可以使用MinVersion
和OnlyBelowVersion
常用参数.
[Files]
Source: MyDllForVistaAndNewer.dll; Dest: {app}\MyDll.dll; MinVersion: 6.0
Source: MyDllForOldWindows.dll; Dest: {app}\MyDll.dll; OnlyBelowVersion: 6.0
Run Code Online (Sandbox Code Playgroud)
在Pascal脚本中,使用该GetWindowsVersionEx
函数查找Windows版本号.然后将该数字与特定的Windows版本号进行比较.
以下是一些用于检查特定Windows版本的便捷功能:
function IsWindowsVersionOrNewer(Major, Minor: Integer): Boolean;
var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
Result :=
(Version.Major > Major) or
((Version.Major = Major) and (Version.Minor >= Minor));
end;
function IsWindowsXPOrNewer: Boolean;
begin
Result := IsWindowsVersionOrNewer(5, 1);
end;
function IsWindowsVistaOrNewer: Boolean;
begin
Result := IsWindowsVersionOrNewer(6, 0);
end;
function IsWindows7OrNewer: Boolean;
begin
Result := IsWindowsVersionOrNewer(6, 1);
end;
function IsWindows8OrNewer: Boolean;
begin
Result := IsWindowsVersionOrNewer(6, 2);
end;
function IsWindows10OrNewer: Boolean;
begin
Result := IsWindowsVersionOrNewer(10, 0);
end;
Run Code Online (Sandbox Code Playgroud)
使用示例:
function InitializeSetup: Boolean;
begin
if not IsWindowsVistaOrNewer then
begin
MsgBox(
'This program was not tested on Windows XP and older, proceed with caution.',
mbCriticalError, MB_OK);
end;
Result := True;
end;
Run Code Online (Sandbox Code Playgroud)
要测试Windows的服务器版本,请参阅:
检查Windows Server 2003
根据文档,与每个文件关联的参数可以直接与操作系统版本相关联:
[Files]
Source: "{app}\WinNT2000XP.exe"; DestDir: "{app}"; MinVersion: 0, 1
Source: "{app}\Win9598Me.exe"; DestDir: "{app}"; MinVersion: 1, 0
Run Code Online (Sandbox Code Playgroud)
"0"表示永不安装; "1"表示安装在任何版本(即1.0或更高版本)上.
注意:上述技术不仅限于[Files]部分; MinVersion和OnlyBelowVersion可用于大多数部分.