我正在使用下面的腳本來安裝Java程序。我正在面對這個腳本的兩個問題。 如果您知道解決這些問題的方法,請讓我知道。我真的很感激你的時間Inno安裝腳本需要幫助 - 檢查jre安裝問題
JRE檢查發生了2次,即開始安裝和結束安裝。我希望JRE檢查僅在安裝開始時發生
我正在檢查下面的Windows註冊表項以檢查JRE,並且此腳本不適用於所有情況。我的意思是有些時候這是有效的,有時會因64位JRE安裝而失敗。我要尋找一個邏輯來檢查註冊表中的所有場景(即32位,64位,並在所有的Windows版本)
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "Test"
#define MyAppVersion "1.0"
#define MyAppPublisher "Test"
#define MyAppURL "gmail.com"
#define MyAppExeName "abc.exe"
#define MinJRE "1.6"
[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={{200DC169-9647-4295-91B4-B1D1D8482B82}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={userdocs}\xsxsxs\bvb
DisableDirPage=yes
DefaultGroupName=test
DisableProgramGroupPage=yes
AllowNoIcons=yes
LicenseFile=C:\test\Installers_PC_MAC\CORRECTIONS_TO_INSTALLER_BUGS\TemsOfUse.txt
OutputDir=C:\test\test
OutputBaseFilename=test
SetupIconFile=C:\test\Installers_PC_MAC\CORRECTIONS_TO_INSTALLER_BUGS\Icon\icon.ico
Compression=lzma
SolidCompression=yes
PrivilegesRequired=lowest
[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
[Dirs]
Name: "{app}\Graphics"
Name: "{app}\lib"
Name: "{app}\Database"
Name: "{app}\Grades"
Name: "{app}\HelpFiles"
Name: "{app}\images"
Name: "{app}\Scripts"
[Files]
Source: "C:\test\Installers_PC_MAC\CORRECTIONS_TO_INSTALLER_BUGS\test.exe"; DestDir: "{app}"; Flags: ignoreversion;
Source: "C:\test\Installers_PC_MAC\CORRECTIONS_TO_INSTALLER_BUGS\Graphics\*"; DestDir: "{app}\Graphics"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\test\Installers_PC_MAC\CORRECTIONS_TO_INSTALLER_BUGS\lib\*"; DestDir: "{app}\lib"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\test\Installers_PC_MAC\CORRECTIONS_TO_INSTALLER_BUGS\DataBase\*"; DestDir: "{app}\DataBase"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\test\Installers_PC_MAC\CORRECTIONS_TO_INSTALLER_BUGS\Grades\*"; DestDir: "{app}\Grades"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: "{group}\test"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:uninstallProgram,test}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}";check:InitializeSetup; Flags: nowait postinstall skipifsilent
[Code]
function installJRE(): Boolean;
var
Result1 : Boolean;
ErrorCode: Integer;
begin
Result1 := false;
Result1 := MsgBox('Java is required to run the program you are trying to install. Please click on Yes button given below to close this installer and be directed to a website were you can download and install Java.',
mbConfirmation, MB_YESNO) = idYes;
if Result1 = false then
begin
// user can install the Java later also
Result:=true;
end else
begin
Result:=false;
ShellExec('open', 'http://www.oracle.com/technetwork/java/javase/downloads/jre6downloads-1902815.html','','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
end;
end;
function InitializeSetup(): Boolean;
var
jreVersion: String;
begin
Result := False;
if ((RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\JavaSoft\Java Runtime Environment','CurrentVersion'))) then
begin
RegQueryStringValue(HKLM,'Software\JavaSoft\Java Runtime Environment','CurrentVersion',jreVersion);
if CompareStr(jreVersion,'{#MinJRE}') > 0 then
begin
Result:=true;
end else
begin
if(installJRE) then
Result:=true;
end;
end else
if(installJRE) then
Result:=true;
end;
end.
謝謝Lex。看來1個問題已經解決,但我仍然有第二個問題。我認爲這些標誌在下面一行文件名中是不正確的:「{app} \ {#MyAppExeName}」;描述:「{cm:LaunchProgram,{#StringChange(MyAppName,'&','&&')}}"; check:InitializeSetup; Flags:nowait postinstall skipifsilent – Partha 2013-02-09 03:11:10
@Lex,檢查實際上會執行多次(取決於它們所在的部分使用) – TLama 2013-02-09 03:23:31
@ user2056231,不要使用事件方法進行檢查,因爲事件請求並不是手動調用的,而是像'function InstallJRE:Boolean;'這樣的函數賦值給'Check'。 InitializeSetup事件方法就會像調用Result:= IsJREInstalled;這將保留事件方法的含義,因爲您稍後可能想要擴展當前的'InitializeSetup'事件方法,並且您可以忘記它被調用 – TLama 2013-02-09 03:26:32