Я' ■ «Запуск без отладки» наследует переменные среды IDE . Я пишу приложение Windows GUI, которое пытается вызвать сценарий Apache ANT. Сценарий ANT создаст и упакует группу проектов Delphi в окончательный файл setup.exe. Сборка сценария ANT Delphi 2007 / ...
Я пишу приложение с графическим интерфейсом пользователя для Windows, которое пытается вызвать сценарий Apache ANT. Сценарий ANT создаст и упакует группу проектов Delphi в окончательный файл setup.exe. Сценарий ANT создает приложение Delphi 2007/2010 и Delphi XE.
Мое приложение ANT с графическим интерфейсом пользователя скомпилировано и построено с помощью Delphi XE. Когда я использую «Запуск без отладки» в Delphi XE для запуска приложения, приложение не работает со сценарием ANT. Сценарий ANT не создает приложение, в котором DCU, BPL и EXE не компилируются в папку, которую я ожидал.
Однако если я запускаю свое приложение с графическим интерфейсом в проводнике Windows, сценарий ANT правильно построит приложение> Все DCU, BPL и EXE были созданы и хранятся в папке, которую я назначил.
После отладки приложения с графическим интерфейсом я обнаружил, что это приложение запускается с помощью Delphi " Запускать без отладки »наследует переменные среды от Delphi IDE. Вот как я извлекаю переменные среды:
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;
Это список переменных среды для процесса, запущенного Delphi XE «Запуск без отладки»:
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
А это список переменных среды для процесса, запускаемого проводником Windows :
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 списка переменных среды, вы можете заметить, что есть несколько переменных, таких как BDSINCLUDE, а BDSBIN не существует в процессе, запущенном оболочкой Windows. Эти переменные среды из Delphi XE ' s IDE повлияла на сценарий ANT, который создает приложение Delphi 2007/2010. Моя проблема должна быть решена, если эти переменные среды IDE Delphi не отображаются в процессе.
Есть ли у кого-нибудь идеи, можно ли запустить процесс (запустить с отладкой или без нее) из среды Delphi IDE, которая не наследует переменные среды из Delphi IDE?