Ich schreibe eine Windows GUI-Anwendung, die versucht, Apache ANT-Skript aufzurufen. Das ANT-Skript erstellt und packt eine Delphi-Projektgruppe in eine endgültige setup.exe. Das ANT-Skript erstellt Delphi 2007/2010 und Delphi XE-Anwendung.Ein von Delphi IDE gestarteter Prozess "Ausführen ohne Debugging" erbt Umgebungsvariablen von IDE
Meine ANT-GUI-Anwendung wird von Delphi XE kompiliert und erstellt. Wenn ich in Delphi XE "Ausführen ohne Debuggen" verwende, um die Anwendung auszuführen, funktioniert die Anwendung nicht korrekt mit ANT-Skript. Das ANT-Skript erstellt keine Anwendung, bei der die DCUs, BPLs und EXEs nicht in den von mir erwarteten Ordner übersetzt werden.
Wenn ich jedoch meine GUI-Anwendung in Windows Explorer starte, erstellt das ANT-Skript die Anwendung korrekt> Alle DCUs, BPLs und EXEs wurden erstellt und in dem Ordner behalten, den ich zugewiesen habe.
Nach dem Debuggen der GUI-Anwendung, fand ich, dass die Anwendung mit Delphi ausführen "Ohne Debugging ausführen" wird Umgebungsvariablen von Delphi IDE erben. Hier ist, wie ich die Umgebungsvariablen extrahieren:
function GetAllEnvVars(const Vars: TStrings): Integer;
var
PEnvVars: PChar; // pointer to start of environment block
PEnvEntry: PChar; // pointer to an env string in block
begin
// Clear the list
if Assigned(Vars) then
Vars.Clear;
// Get reference to environment block for this process
PEnvVars := GetEnvironmentStrings;
if PEnvVars <> nil then
begin
// We have a block: extract strings from it
// Env strings are #0 separated and list ends with #0#0
PEnvEntry := PEnvVars;
try
while PEnvEntry^ <> #0 do
begin
if Assigned(Vars) then
Vars.Add(PEnvEntry);
Inc(PEnvEntry, StrLen(PEnvEntry) + 1);
end;
// Calculate length of block
Result := (PEnvEntry - PEnvVars) + 1;
finally
// Dispose of the memory block
Windows.FreeEnvironmentStrings(PEnvVars);
end;
end
else
// No block => zero length
Result := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
GetAllEnvVars(Memo1.Lines);
end;
Dies ist eine Liste von Umgebungsvariablen für einen Prozess ins Leben gerufen von Delphi XE „Lauf ohne Debugging“:
ActiveHostApplication=
ActiveProjectModule=
ALLUSERSPROFILE=C:\ProgramData
ANT_HOME=C:\Components\Components.d11\build.tool\apache-ant-1.7.1
ANT_OPTS=-Xmx512m
APPDATA=C:\Users\coder\AppData\Roaming
AQtime7_Product_Path=C:\Program Files (x86)\Automated QA\AQtime 7\Bin\
BDS=c:\program files (x86)\embarcadero\rad studio\8.0
BDSAppDataBaseDir=BDS
BDSBIN=c:\program files (x86)\embarcadero\rad studio\8.0\bin
BDSCOMMONDIR=C:\Users\Public\Documents\RAD Studio\8.0
BDSINCLUDE=c:\program files (x86)\embarcadero\rad studio\8.0\include
BDSLIB=c:\program files (x86)\embarcadero\rad studio\8.0\lib
BDSPROJECTSDIR=C:\Users\coder\Documents\RAD Studio\Projects
BDSUSERDIR=C:\Users\coder\Documents\RAD Studio\8.0
CG_BOOST_ROOT=C:\Program Files (x86)\Embarcadero\RAD Studio\8.0\include\boost_1_39
CommonProgramFiles=C:\Program Files (x86)\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=OBSERVER
ComSpec=C:\Windows\system32\cmd.exe
DELPHI=c:\program files (x86)\embarcadero\rad studio\8.0
Und dies ist eine Liste der Umgebung Variablen für einen Prozess von Windows Explorer gestartet:
ALLUSERSPROFILE=C:\ProgramData
ANT_HOME=C:\Components\Components.d11\build.tool\apache-ant-1.7.1
ANT_OPTS=-Xmx512m
APPDATA=C:\Users\coder\AppData\Roaming
BDSCOMMONDIR=C:\Users\Public\Documents\RAD Studio\5.0
CG_BOOST_ROOT=C:\Program Files (x86)\Embarcadero\RAD Studio\8.0\include\boost_1_39
CommonProgramFiles=C:\Program Files (x86)\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=OBSERVER
ComSpec=C:\Windows\system32\cmd.exe
FP_NO_HOST_CHECK=NO
2 Liste der Umgebungsvariablen vergleichen, können Sie doesn gibt es nur wenige Variablen wie BDSINCLUDE und BDSBIN bemerken‘ t existieren in Prozess von Windows Shell gestartet. Diese Umgebungsvariablen aus der Delphi XE-IDE haben sich auf das ANT-Skript ausgewirkt, das die Delphi 2007/2010-Anwendung erstellt. Mein Problem sollte gelöst werden, wenn diese Delphi-IDE-Umgebungsvariablen nicht im Prozess angezeigt werden.
Hat jemand Ideen, wenn es möglich ist, den Prozess (entweder mit oder ohne Debugging) von Delphi IDE zu starten, die Umgebungsvariablen nicht von Delphi IDE erben?
Plattform, das ist eine neue in Rad XE, denke ich. –