unit
Unit2;
interface
uses
Registry, Winapi
.
Windows, Winapi
.
Messages, System
.
SysUtils, System
.
Variants,
System
.
Classes, Vcl
.
Graphics, Vcl
.
Controls, Vcl
.
Forms, Vcl
.
Dialogs,
Vcl
.
StdCtrls;
type
TForm2 =
class
(TForm)
btnSetEnv: TButton;
btnVerify: TButton;
edtJdkPath: TEdit;
lblStatus: TLabel;
procedure
FormCreate(Sender: TObject);
procedure
btnSetEnvClick(Sender: TObject);
procedure
btnVerifyClick(Sender: TObject);
private
function
SetJavaEnvironment(
const
JdkPath:
string
):
Boolean
;
public
end
;
var
Form2: TForm2;
implementation
{$R *.dfm}
function
TForm2
.
SetJavaEnvironment(
const
JdkPath:
string
):
Boolean
;
var
Reg: TRegistry;
PathValue:
string
;
begin
Result :=
False
;
Reg := TRegistry
.
Create;
try
Reg
.
RootKey := HKEY_LOCAL_MACHINE;
if
Reg
.
OpenKey(
'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
,
True
)
then
begin
Reg
.
WriteString(
'JAVA_HOME'
, JdkPath);
Reg
.
CloseKey;
end
;
if
Reg
.
OpenKey(
'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
,
False
)
then
begin
PathValue := Reg
.
ReadString(
'Path'
);
if
Pos(JdkPath +
'bin'
, PathValue) =
0
then
begin
PathValue := JdkPath +
'bin;'
+ PathValue;
Reg
.
WriteString(
'Path'
, PathValue);
end
;
Reg
.
CloseKey;
end
;
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE,
0
, LPARAM(
PChar
(
'Environment'
)), SMTO_ABORTIFHUNG,
5000
,
nil
);
Result :=
True
;
except
on
E: Exception
do
lblStatus
.
Caption :=
'错误:'
+ E
.
Message;
end
;
Reg
.
Free;
end
;
procedure
TForm2
.
btnSetEnvClick(Sender: TObject);
begin
var
JdkPath:
string
;
begin
JdkPath := IncludeTrailingPathDelimiter(edtJdkPath
.
Text);
if
not
DirectoryExists(JdkPath)
then
begin
lblStatus
.
Caption :=
'错误:JDK 路径不存在!'
;
Exit;
end
;
if
not
FileExists(JdkPath +
'bin\java.exe'
)
then
begin
lblStatus
.
Caption :=
'错误:未找到 java.exe'
;
Exit;
end
;
if
SetJavaEnvironment(JdkPath)
then
lblStatus
.
Caption :=
'成功:环境变量已设置。请重启命令行工具验证。'
else
lblStatus
.
Caption :=
'错误:设置失败!'
;
end
;
end
;
procedure
TForm2
.
btnVerifyClick(Sender: TObject);
begin
WinExec(
'cmd.exe /k java -version'
, SW_SHOWNORMAL);
end
;
procedure
TForm2
.
FormCreate(Sender: TObject);
begin
edtJdkPath
.
Text :=
'X:\jdk-11'
;
end
;
end
.