Apache ANTスクリプトを呼び出そうとするWindows GUIアプリケーションを作成しています。 ANTスクリプトは、Delphiプロジェクトグループをビルドして最終的なsetup.exeにパックします。 ANTスクリプトはDelphi 2007/2010とDelphi XEアプリケーションをビルドします。Delphi IDEの「デバッグなしで実行」プロセスがIDEの環境変数を継承します
私のANT GUIアプリケーションは、Delphi XEによってコンパイルされ、ビルドされています。 Delphi XEで "Run without Debugging"を使用してアプリケーションを実行すると、アプリケーションはANTスクリプトで正しく動作しません。 ANTスクリプトは、DCU、BPL、およびEXEが、期待したフォルダにコンパイルされていないアプリケーションをビルドしません。
ただし、WindowsエクスプローラでGUIアプリケーションを起動すると、ANTスクリプトでアプリケーションが正しくビルドされます。>すべてのDCU、BPLおよびEXEがビルドされ、割り当てられたフォルダに保持されます。
GUIアプリケーションをデバッグした後、Delphiの「Run without debugging」で実行されるアプリケーションが、Delphi IDEから環境変数を継承することがわかりました。ここで私は環境変数を抽出する方法である:
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
そして、これは、環境のリストです:
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の「ファイル名を指定して実行デバッグなし」が立ち上げプロセスの環境変数のリストです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リストを比較、あなたは「doesnのBDSINCLUDEとBDSBINのようないくつかの変数があることに気づきますWindowsシェルによって起動されたプロセスに存在しません。 Delphi XEのIDEの環境変数は、Delphi 2007/2010アプリケーションを構築するANTスクリプトに影響を与えました。それらのDelphi IDE環境変数がプロセスに表示されない場合、私の問題は解決するはずです。
Delphi IDEの環境変数を継承しないDelphi IDEからプロセスを起動することができますか(デバッグなしで実行するか、実行しないか)。
プラットフォーム、これはRad XEの新しいものだと思います。 –