diff --git a/lazproj/coedit.lpi b/lazproj/coedit.lpi
index 4e37e6a5..b074b3c4 100644
--- a/lazproj/coedit.lpi
+++ b/lazproj/coedit.lpi
@@ -112,7 +112,7 @@
-
+
@@ -148,7 +148,6 @@
-
@@ -170,7 +169,6 @@
-
@@ -190,12 +188,10 @@
-
-
@@ -241,7 +237,6 @@
-
@@ -249,7 +244,6 @@
-
@@ -262,6 +256,7 @@
+
@@ -269,7 +264,6 @@
-
@@ -284,12 +278,10 @@
-
-
@@ -326,7 +318,6 @@
-
@@ -346,6 +337,7 @@
+
diff --git a/src/ce_common.pas b/src/ce_common.pas
index 60e31f46..965d8118 100644
--- a/src/ce_common.pas
+++ b/src/ce_common.pas
@@ -175,6 +175,11 @@ type
*)
function exeInSysPath(anExeName: string): boolean;
+ (**
+ * Returns the full to anExeName. Works if exeInSysPath().
+ *)
+ function exeFullName(anExeName: string): string;
+
(**
* Clears then fills aList with aProcess output stream.
*)
@@ -687,6 +692,7 @@ end;
function exeInSysPath(anExeName: string): boolean;
var
ext: string;
+ env: string;
begin
ext := extractFileExt(anExeName);
if ext <> exeExt then
@@ -694,7 +700,31 @@ begin
if FileExists(anExeName) then
exit(true)
else
- exit(ExeSearch(anExeName, '') <> '');
+ begin
+ env := sysutils.GetEnvironmentVariable('PATH');
+ if Application <> nil then
+ env += PathSeparator + ExtractFileDir(ExtractFilePath(application.ExeName));
+ exit(ExeSearch(anExeName, env) <> '');
+ end;
+end;
+
+function exeFullName(anExeName: string): string;
+var
+ ext: string;
+ env: string;
+begin
+ ext := extractFileExt(anExeName);
+ if ext <> exeExt then
+ anExeName += exeExt;
+ if FileExists(anExeName) then
+ exit(anExeName)
+ else
+ begin
+ env := sysutils.GetEnvironmentVariable('PATH');
+ if Application <> nil then
+ env += PathSeparator + ExtractFileDir(ExtractFilePath(application.ExeName));
+ exit(ExeSearch(anExeName, env));
+ end;
end;
procedure processOutputToStrings(aProcess: TProcess; var aList: TStringList);
diff --git a/src/ce_dcd.pas b/src/ce_dcd.pas
index ea823c0b..1e2f1f23 100644
--- a/src/ce_dcd.pas
+++ b/src/ce_dcd.pas
@@ -74,14 +74,14 @@ begin
exit;
//
fClient := TProcess.Create(self);
- fClient.Executable := clientName;
+ fClient.Executable := exeFullName(clientName);
fClient.Options := [poUsePipes{$IFDEF WINDOWS}, poNewConsole{$ENDIF}];
fClient.ShowWindow := swoHIDE;
//
fServerWasRunning := AppIsRunning((serverName));
if not fServerWasRunning then begin
fServer := TProcess.Create(self);
- fServer.Executable := serverName;
+ fServer.Executable := exeFullName(serverName);
fServer.Options := [{$IFDEF WINDOWS} poNewConsole{$ENDIF}];
{$IFNDEF DEBUG}
fServer.ShowWindow := swoHIDE;
diff --git a/src/ce_symlist.pas b/src/ce_symlist.pas
index 2dddb9f0..c9a187ba 100644
--- a/src/ce_symlist.pas
+++ b/src/ce_symlist.pas
@@ -670,7 +670,7 @@ begin
fToolProc := TCheckedAsyncProcess.Create(nil);
fToolProc.ShowWindow := swoHIDE;
fToolProc.Options := [poUsePipes];
- fToolProc.Executable := toolExeName;
+ fToolProc.Executable := exeFullName(toolExeName);
fToolProc.OnTerminate := @toolTerminated;
fToolProc.OnReadData := @toolOutputData;
fToolProc.CurrentDirectory := ExtractFileDir(Application.ExeName);
diff --git a/src/ce_todolist.pas b/src/ce_todolist.pas
index 4e95bb71..dffe34b9 100644
--- a/src/ce_todolist.pas
+++ b/src/ce_todolist.pas
@@ -415,7 +415,7 @@ begin
killToolProcess;
// process parameter
fToolProc := TCheckedAsyncProcess.Create(nil);
- fToolProc.Executable := ToolExeName;
+ fToolProc.Executable := exeFullName(ToolExeName);
fToolProc.Options := [poUsePipes];
fToolProc.ShowWindow := swoHIDE;
fToolProc.CurrentDirectory := ExtractFileDir(Application.ExeName);