Skip to content

Commit d9fe574

Browse files
committed
1.5.0
1 parent 63151a6 commit d9fe574

11 files changed

+173
-38
lines changed

GetJavaInfo.md

+17-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Without command-line parameters, GetJavaInfo outputs Java installation details.
3232
| ------------------ | ------------ | -------------------------------------
3333
| `--javainstalled` | `-i` | Tests if Java is installed
3434
| `--javahome` | `-H` | Outputs Java home directory
35+
| `--javadll` | `-d` | Outputs jvm.dll path
3536
| `--javaversion` | `-V` | Outputs Java version
3637
| `--javais64bit` | `-b` | Tests if Java is 64-bit
3738
| `--version` | `-v` | Outputs this program's version number
@@ -101,7 +102,7 @@ In this example, GetJavaInfo will return one of the following exit codes:
101102
:END
102103
endlocal
103104

104-
This script sets the `_JHOME` environment variable to the Java home directory if Java is installed. The variable will not be set if Java is not instaled.
105+
This script sets the `_JHOME` environment variable within the script to the Java home directory if Java is installed. The variable will not be set if Java is not instaled.
105106

106107
3. Sample batch file (cmd.exe shell script) for checking whether Java is installed and is at least a minimum version:
107108

@@ -120,3 +121,18 @@ In this example, GetJavaInfo will return one of the following exit codes:
120121
echo Java is not installed
121122
:END
122123
endlocal
124+
125+
4. Sample batch file (cmd.exe shell script) for getting the path and filename of jvm.dll in an environment variable:
126+
127+
@echo off
128+
setlocal enableextensions
129+
GetJavaInfo -i -q
130+
if errorlevel 2 goto :NOJAVA
131+
set _JVMPATH=
132+
for /f "delims=" %%a in ('GetJavaInfo --javadll') do set _JVMPATH=%%a
133+
echo jvm.dll path: %_JVMPATH%
134+
goto :END
135+
:NOJAVA
136+
echo Java is not installed
137+
:END
138+
endlocal

GetJavaInfo.pp

+30-14
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
ArgVersion: Boolean; // --version/v
4242
ArgJavaIs64Bit: Boolean; // --javais64bit/-b
4343
ArgJavaHome: Boolean; // --javahome/-H
44+
ArgJavaDLL: Boolean; // --javadll/-d
4445
ArgJavaInstalled: Boolean; // --javainstalled/-i
4546
ArgJavaMinVersion: UnicodeString; // --javaminversion/-m
4647
ArgJavaVersion: Boolean; // --javaversion/-V
@@ -50,7 +51,7 @@
5051
var
5152
CommandLine: TCommandLine;
5253
JavaDetected, JavaIs64Bit, VersionOK: Boolean;
53-
JavaHome, JavaVersion, OutputStr: UnicodeString;
54+
JavaHome, JavaJVMPath, JavaVersion, OutputStr: UnicodeString;
5455

5556
procedure Usage();
5657
const
@@ -71,6 +72,7 @@ procedure Usage();
7172
+ '---------------- ------- -------------------------------------' + NEWLINE
7273
+ '--javainstalled -i Tests if Java is installed' + NEWLINE
7374
+ '--javahome -H Outputs Java home directory' + NEWLINE
75+
+ '--javadll -d Outputs jvm.dll path' + NEWLINE
7476
+ '--javaversion -V Outputs Java version' + NEWLINE
7577
+ '--javais64bit -b Tests if Java is 64-bit' + NEWLINE
7678
+ '--version -v Outputs this program''s version number' + NEWLINE
@@ -102,7 +104,7 @@ procedure Usage();
102104

103105
procedure TCommandLine.Parse();
104106
var
105-
LongOpts: array[1..9] of TOption;
107+
LongOpts: array[1..10] of TOption;
106108
Opt: Char;
107109
I: LongInt;
108110
begin
@@ -117,10 +119,10 @@ procedure TCommandLine.Parse();
117119
end;
118120
with LongOpts[2] do
119121
begin
120-
Name := 'help';
122+
Name := 'javadll';
121123
Has_arg := No_Argument;
122-
Flag := nil;
123-
Value := 'h';
124+
flag := nil;
125+
Value := 'd';
124126
end;
125127
with LongOpts[3] do
126128
begin
@@ -130,41 +132,48 @@ procedure TCommandLine.Parse();
130132
Value := 'H';
131133
end;
132134
with LongOpts[4] do
135+
begin
136+
Name := 'help';
137+
Has_arg := No_Argument;
138+
Flag := nil;
139+
Value := 'h';
140+
end;
141+
with LongOpts[5] do
133142
begin
134143
Name := 'javainstalled';
135144
Has_arg := No_Argument;
136145
Flag := nil;
137146
Value := 'i';
138147
end;
139-
with LongOpts[5] do
148+
with LongOpts[6] do
140149
begin
141150
Name := 'javaminversion';
142151
Has_arg := Required_Argument;
143152
Flag := nil;
144153
Value := 'm';
145154
end;
146-
with LongOpts[6] do
155+
with LongOpts[7] do
147156
begin
148157
Name := 'quiet';
149158
Has_arg := No_Argument;
150159
Flag := nil;
151160
Value := 'q';
152161
end;
153-
with LongOpts[7] do
162+
with LongOpts[8] do
154163
begin
155164
Name := 'javaversion';
156165
Has_arg := No_Argument;
157166
Flag := nil;
158167
Value := 'V';
159168
end;
160-
with LongOpts[8] do
169+
with LongOpts[9] do
161170
begin
162171
Name := 'version';
163172
Has_arg := No_Argument;
164173
Flag := nil;
165174
Value := 'v';
166175
end;
167-
with LongOpts[9] do
176+
with LongOpts[10] do
168177
begin
169178
Name := '';
170179
Has_arg := No_Argument;
@@ -179,16 +188,18 @@ procedure TCommandLine.Parse();
179188
ArgVersion := false; // --version/v
180189
ArgJavaIs64Bit := false; // --javais64bit/-b
181190
ArgJavaHome := false; // --javahome/-H
191+
ArgJavaDLL := false; // --javadll/-d
182192
ArgJavaInstalled := false; // --javainstalled/-i
183193
ArgJavaMinVersion := ''; // --javaminversion/-m
184194
ArgJavaVersion := false; // --javaversion/-V
185195
OptErr := false; // no error outputs from getopts
186196
repeat
187-
Opt := GetLongOpts('bhHim:qVv', @LongOpts, I);
197+
Opt := GetLongOpts('bdHhim:qVv', @LongOpts, I);
188198
case Opt of
189199
'b': ArgJavaIs64Bit := true;
190-
'h': ArgHelp := true;
200+
'd': ArgJavaDLL := true;
191201
'H': ArgJavaHome := true;
202+
'h': ArgHelp := true;
192203
'i': ArgJavaInstalled := true;
193204
'm': ArgJavaMinVersion := StringToUnicodeString(OptArg, CP_ACP);
194205
'q': ArgQuiet := true;
@@ -247,13 +258,15 @@ function BoolToStr(const B: Boolean): UnicodeString;
247258
// Initialize variables
248259
JavaDetected := wsIsJavaInstalled();
249260
JavaHome := '';
261+
JavaJVMPath := '';
250262
JavaVersion := '';
251263
JavaIs64Bit := false;
252264

253265
// Get details if Java was detected
254266
if JavaDetected then
255267
begin
256268
JavaHome := wsGetJavaHome();
269+
JavaJVMPath := wsGetJavaJVMPath();
257270
JavaVersion := wsGetJavaVersion();
258271
if wsIsBinary64Bit(JavaHome + '\bin\java.exe', JavaIs64Bit) <> 0 then
259272
JavaIs64Bit := false;
@@ -321,18 +334,21 @@ function BoolToStr(const B: Boolean): UnicodeString;
321334
end;
322335
end;
323336

324-
if not (CommandLine.ArgJavaHome or CommandLine.ArgJavaVersion) then
337+
if not (CommandLine.ArgJavaHome or CommandLine.ArgJavaDLL or CommandLine.ArgJavaVersion) then
325338
begin
326339
OutputStr := 'Java home:' + #9 + JavaHome + NEWLINE
340+
+ 'jvm.dll path:' + #9 + JavaJVMPath + NEWLINE
327341
+ 'Java version:' + #9 + JavaVersion + NEWLINE
328342
+ 'Java is 64-bit:' + #9 + BoolToStr(JavaIs64Bit);
329343
WriteLn(OutputStr);
330344
exit();
331345
end;
332346

333-
// --javahome/-H or --javaversion/-V
347+
// --javahome/-H or --javadll/-d or --javaversion/-V
334348
if CommandLine.ArgJavaHome then
335349
WriteLn(JavaHome)
350+
else if CommandLine.ArgJavaDLL then
351+
WriteLn(JavaJVMPath)
336352
else if CommandLine.ArgJavaVersion then
337353
WriteLn(JavaVersion);
338354
end.

GetJavaInfo.rc

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
1 VERSIONINFO
2-
FILEVERSION 1,4,0,0
3-
PRODUCTVERSION 1,4,0,0
2+
FILEVERSION 1,5,0,0
3+
PRODUCTVERSION 1,5,0,0
44
FILEOS 0x4
55
FILETYPE 1
66
{
@@ -10,12 +10,12 @@ FILETYPE 1
1010
{
1111
VALUE "CompanyName", ""
1212
VALUE "FileDescription", "GetJavaInfo.exe"
13-
VALUE "FileVersion", "1.4.0.0"
13+
VALUE "FileVersion", "1.5.0.0"
1414
VALUE "InternalName", "GetJavaInfo.exe"
1515
VALUE "LegalCopyright", "Copyright 2020-2023 by Bill Stewart (bstewart at iname.com)"
1616
VALUE "OriginalFilename", "GetJavaInfo.exe"
1717
VALUE "ProductName", ""
18-
VALUE "ProductVersion", "1.4.0.0"
18+
VALUE "ProductVersion", "1.5.0.0"
1919
}
2020
}
2121

JavaInfo.pp

+14-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{ Copyright (C) 2020-2021 by Bill Stewart (bstewart at iname.com)
1+
{ Copyright (C) 2020-2023 by Bill Stewart (bstewart at iname.com)
22
33
This program is free software; you can redistribute it and/or modify it under
44
the terms of the GNU Lesser General Public License as published by the Free
@@ -16,8 +16,9 @@
1616
}
1717

1818
{
19-
Note Regarding the GetJavaHome() and GetJavaVersion() Functions
20-
===============================================================
19+
Note Regarding the GetJavaHome(), GetJavaJVMPath(), and GetJavaVersion()
20+
Functions
21+
========================================================================
2122
You must allocate a buffer to get the result strings from these functions. To
2223
determine the required buffer size, call the function with a null pointer for
2324
the first parameter and 0 for the second parameter. The function will return
@@ -107,6 +108,15 @@ function GetJavaHome(PathName: PWideChar; NumChars: DWORD): DWORD; stdcall;
107108
result := GetString(StringFunction, PathName, NumChars);
108109
end;
109110

111+
// Gets path of jvm.dll into string buffer pointed to by PathName.
112+
function GetJavaJVMPath(PathName: PWideChar; NumChars: DWORD): DWORD; stdcall;
113+
var
114+
StringFunction: TStringFunction;
115+
begin
116+
StringFunction := @wsGetJavaJVMPath;
117+
result := GetString(StringFunction, PathName, NumChars);
118+
end;
119+
110120
// Gets Java version string (a.b.c.d) into string buffer pointed to by Version.
111121
function GetJavaVersion(Version: PWideChar; NumChars: DWORD): DWORD; stdcall;
112122
var
@@ -164,6 +174,7 @@ function IsJavaMinimumVersion(Version: PWideChar; VersionOK: PDWORD): DWORD; std
164174

165175
exports
166176
GetJavaHome,
177+
GetJavaJVMPath,
167178
GetJavaVersion,
168179
IsBinary64Bit,
169180
IsJavaInstalled,

JavaInfo.rc

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
1 VERSIONINFO
2-
FILEVERSION 1,4,0,0
3-
PRODUCTVERSION 1,4,0,0
2+
FILEVERSION 1,5,0,0
3+
PRODUCTVERSION 1,5,0,0
44
FILEOS 0x4
55
FILETYPE 1
66
{
@@ -10,12 +10,12 @@ FILETYPE 1
1010
{
1111
VALUE "CompanyName", ""
1212
VALUE "FileDescription", "JavaInfo.dll"
13-
VALUE "FileVersion", "1.4.0.0"
13+
VALUE "FileVersion", "1.5.0.0"
1414
VALUE "InternalName", "JavaInfo.dll"
1515
VALUE "LegalCopyright", "Copyright 2020-2023 by Bill Stewart (bstewart at iname.com)"
1616
VALUE "OriginalFilename", "JavaInfo.dll"
1717
VALUE "ProductName", ""
18-
VALUE "ProductVersion", "1.4.0.0"
18+
VALUE "ProductVersion", "1.5.0.0"
1919
}
2020
}
2121

JavaInfoTest.iss

+18-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
[Setup]
2727
AppName=JavaInfoTest
28-
AppVersion=1.4.0.0
28+
AppVersion=1.5.0.0
2929
UsePreviousAppDir=false
3030
DefaultDirName={autopf}\JavaInfoTest
3131
Uninstallable=false
@@ -57,6 +57,8 @@ function DLLIsJavaMinimumVersion(Version: string; var VersionOK: DWORD): DWORD;
5757
external 'IsJavaMinimumVersion@files:JavaInfo.dll stdcall setuponly';
5858
function DLLGetJavaHome(PathName: string; NumChars: DWORD): DWORD;
5959
external 'GetJavaHome@files:JavaInfo.dll stdcall setuponly';
60+
function DLLGetJavaJVMPath(PathName: string; NumChars: DWORD): DWORD;
61+
external 'GetJavaJVMPath@files:JavaInfo.dll stdcall setuponly';
6062
function DLLGetJavaVersion(Version: string; NumChars: DWORD): DWORD;
6163
external 'GetJavaVersion@files:JavaInfo.dll stdcall setuponly';
6264
// Note that 'var' parameters above are pointers
@@ -105,6 +107,19 @@ begin
105107
result := OutStr;
106108
end;
107109
110+
// Wrapper for GetJavaJVMPath() DLL function (same note as above)
111+
function GetJavaJVMPath(): string;
112+
var
113+
NumChars: DWORD;
114+
OutStr: string;
115+
begin
116+
result := '';
117+
NumChars := DLLGetJavaJVMPath('', 0);
118+
SetLength(OutStr, NumChars);
119+
if DLLGetJavaJVMPath(OutStr, NumChars) > 0 then
120+
result := OutStr;
121+
end;
122+
108123
// Wrapper for GetJavaVersion() DLL function (same note as above)
109124
function GetJavaVersion(): string;
110125
var
@@ -222,7 +237,7 @@ end;
222237
223238
function NextButtonClick(CurPageID: Integer): Boolean;
224239
var
225-
MinVersion, JavaHome, Message: string;
240+
MinVersion, JavaHome, JavaJVMPath, Message: string;
226241
begin
227242
result := true;
228243
// Check if current page is the custom Java version page
@@ -241,6 +256,7 @@ begin
241256
begin
242257
JavaHome := GetJavaHome();
243258
Message := 'Java home: ' + JavaHome + #10
259+
+ 'Java JVM path: ' + GetJavaJVMPath + #10
244260
+ 'Java version: ' + GetJavaVersion() + #10
245261
+ 'Java is 64-bit: ' + BoolToStr(IsBinary64Bit(JavaHome + '\bin\java.exe')) + #10
246262
+ 'At least version ' + MinVersion + ': ' + IsJavaMinimumVersion(MinVersion);

JavaInfoTest.pp

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{ Copyright (C) 2020-2021 by Bill Stewart (bstewart at iname.com)
1+
{ Copyright (C) 2020-2023 by Bill Stewart (bstewart at iname.com)
22
33
This program is free software; you can redistribute it and/or modify it under
44
the terms of the GNU Lesser General Public License as published by the Free
@@ -32,9 +32,9 @@
3232
var
3333
DLLHandle: HMODULE;
3434
IsJavaInstalled: TGetDWORD;
35-
GetJavaHome, GetJavaVersion: TGetString;
35+
GetJavaHome, GetJavaJVMPath, GetJavaVersion: TGetString;
3636
IsBinary64Bit: TIsBinary64Bit;
37-
JavaHome, JavaBinary, JavaVersion, BinaryType, Msg: UnicodeString;
37+
JavaHome, JavaBinary, JavaJVMPath, JavaVersion, BinaryType, Msg: UnicodeString;
3838
Is64Bit: DWORD;
3939

4040
procedure MsgBox(const Msg: UnicodeString; const MsgBoxType: UINT);
@@ -66,6 +66,7 @@ function GetString(var Func: TGetString): UnicodeString;
6666
exit();
6767
end;
6868
GetJavaHome := TGetString(GetProcAddress(DLLHandle, 'GetJavaHome'));
69+
GetJavaJVMPath := TGetString(GetProcAddress(DLLHandle, 'GetJavaJVMPath'));
6970
GetJavaVersion := TGetString(GetProcAddress(DLLHandle, 'GetJavaVersion'));
7071
IsBinary64Bit := TIsBinary64Bit(GetProcAddress(DLLHandle, 'IsBinary64Bit'));
7172
IsJavaInstalled := TGetDWORD(GetProcAddress(DLLHandle, 'IsJavaInstalled'));
@@ -84,9 +85,12 @@ function GetString(var Func: TGetString): UnicodeString;
8485
end
8586
else
8687
BinaryType := 'unknown';
88+
JavaJVMPath := GetString(GetJavaJVMPath);
8789
JavaVersion := GetString(GetJavaVersion);
88-
Msg := 'Java home: ' + JavaHome + #10 + 'Java file version: ' + JavaVersion + #10 +
89-
'Platform: ' + BinaryType;
90+
Msg := 'Java home: ' + JavaHome + #10
91+
+ 'jvm.dll path: ' + JavaJVMPath + #10
92+
+ 'Java file version: ' + JavaVersion + #10
93+
+ 'Platform: ' + BinaryType;
9094
MsgBox(Msg, 0);
9195
end;
9296
FreeLibrary(DLLHandle);

0 commit comments

Comments
 (0)