我是InnoSetup的新手,因为我正在尝试各种安装程序。
我使用Inno script Studio和内置向导创建了我的第一个脚本。到目前为止一切顺利。现在我想让它检测是否安装了。net 4.5,如果没有,那么安装它。所以,我看了整个网络,在这里,我遇到了这个解决方案,但是,当我复制和粘贴代码到我的脚本我得到编译时,以下错误。
Compiling [Code] section
Compiler Error!
Line 54: Column 10: Invalid prototype for 'IsDotNetDetected'
和第54行在我的脚本是这个
function IsDotNetDetected(version: string; service: cardinal): boolean;
有人知道错误意味着什么,为什么我得到它?
这是我的完整脚本:
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "AVO Log"
#define MyAppVersion "0.1.0.1"
#define MyAppPublisher "NA"
#define MyAppExeName "AVO Log.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={{9476587F-A670-4E17-B8EA-A6FABB345968}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1
[Files]
Source: "G:CommonGareths AppsdotNetFx45_Full_x86_x64.exe"; DestDir: {tmp}; Flags: deleteafterinstall;
Source: "C:Visual Studio 2010ProjectsAVO LogAVO LogbinReleaseAVO Log.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:Visual Studio 2010ProjectsAVO LogAVO LogbinReleaseGalaSoft.MvvmLight.Extras.WPF45.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:Visual Studio 2010ProjectsAVO LogAVO LogbinReleaseGalaSoft.MvvmLight.WPF45.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:Visual Studio 2010ProjectsAVO LogAVO LogbinReleaseGalaSoft.MvvmLight.WPF45.xml"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:Visual Studio 2010ProjectsAVO LogAVO LogbinReleaseMicrosoft.Expression.Interactions.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:Visual Studio 2010ProjectsAVO LogAVO LogbinReleaseMicrosoft.Practices.ServiceLocation.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:Visual Studio 2010ProjectsAVO LogAVO LogbinReleaseSystem.Windows.Interactivity.dll"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{group}{#MyAppName}"; Filename: "{app}{#MyAppExeName}"
Name: "{group}{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}{#MyAppName}"; Filename: "{app}{#MyAppExeName}"; Tasks: desktopicon
Name: "{userappdata}MicrosoftInternet ExplorerQuick Launch{#MyAppName}"; Filename: "{app}{#MyAppExeName}"; Tasks: quicklaunchicon
[Run]
Filename: "{tmp}dotNetFx45_Full_x86_x64.exe"; Check: IsDotNetDetected('v4.5',0)
Filename: "{app}{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
[Code]
function IsDotNetDetected(version: string; service: cardinal): boolean;
// Indicates whether the specified version and service pack of the .NET Framework is installed.
//
// version -- Specify one of these strings for the required .NET Framework version:
// 'v1.1.4322' .NET Framework 1.1
// 'v2.0.50727' .NET Framework 2.0
// 'v3.0' .NET Framework 3.0
// 'v3.5' .NET Framework 3.5
// 'v4Client' .NET Framework 4.0 Client Profile
// 'v4Full' .NET Framework 4.0 Full Installation
// 'v4.5' .NET Framework 4.5
//
// service -- Specify any non-negative integer for the required service pack level:
// 0 No service packs required
// 1, 2, etc. Service pack 1, 2, etc. required
var
key: string;
install, release, serviceCount: cardinal;
check45, success: boolean;
begin
// .NET 4.5 installs as update to .NET 4.0 Full
if version = 'v4.5' then begin
version := 'v4Full';
check45 := true;
end else
check45 := false;
// installation key group for all .NET versions
key := 'SOFTWAREMicrosoftNET Framework SetupNDP' + version;
// .NET 3.0 uses value InstallSuccess in subkey Setup
if Pos('v3.0', version) = 1 then begin
success := RegQueryDWordValue(HKLM, key + 'Setup', 'InstallSuccess', install);
end else begin
success := RegQueryDWordValue(HKLM, key, 'Install', install);
end;
// .NET 4.0/4.5 uses value Servicing instead of SP
if Pos('v4', version) = 1 then begin
success := success and RegQueryDWordValue(HKLM, key, 'Servicing', serviceCount);
end else begin
success := success and RegQueryDWordValue(HKLM, key, 'SP', serviceCount);
end;
// .NET 4.5 uses additional value Release
if check45 then begin
success := success and RegQueryDWordValue(HKLM, key, 'Release', release);
success := success and (release >= 378389);
end;
result := success and (install = 1) and (serviceCount >= service);
end;
我的通灵能力告诉我你想用这个函数作为check:
参数。由于与check:
参数一起使用的函数必须有一个特定的原型,编译器失败。
尝试使用这个存根函数:
function CheckIsDotNetDetected(): boolean;
begin
result := IsDotNetDetected('v4Client', 0);
end;
检查。net 4用于32位系统的示例
function NET4032(): Boolean;
var
InstallCheck : Cardinal;
begin
RegQueryDWordValue(HKLM32, 'SOFTWAREMicrosoftNET Framework SetupNDPv4Full',
'Install', InstallCheck);
if InstallCheck = $1 then
Result := false
else
Result := true;
end;