2011-06-21 21 views
3

私のexeに組み込むバージョン/ビルド番号を生成するようにプレビルドイベントを設定しました。このイベントは、実際の作業を行うバッチファイルへの呼び出し(パラメータがバッチファイルに渡されます)から構成されます。バッチファイルは、Windows XPコンピュータを含め、試したすべてのコンピュータで動作するはずです。また、Windows 7を実行している3台のコンピュータ上で事前ビルドイベントとして正常に動作します。ただし、Windows XPでは、事前ビルドイベントは失敗します。 Delphiはエラーコードを返すので、どこにでも参照することはできません "20018"。PrebuildイベントはWindows 7で動作し、XPでは失敗します

私はバッチファイルを幸運なことなく呼び出す方法をいくつか試しました。誰が何が起こっているのか考えているのですか?次のように

ビルドイベントは次のとおりです。

call "..\..\Build Tools\PreBuild.bat" "$(PROJECTDIR)" 

UPDATE: それは実際の問題には関連性がなかったので、私は、バッチファイルのソースを削除しました。

+5

Jason、あなたが提供しているものよりも何も間違っているかもしれないことを誰かが教えてくれるでしょうか?バッチファイルに含まれるもの、フォルダの場所、XP(管理者、パワーユーザー、限定ユーザー)などの権利に関する何か、その他役立つものはわかりません。答えるすべての試みは単に推測に過ぎず、それは役に立たない。この問題を解決するには、より多くの情報を提供する必要があります。覚えておいて、ここから画面が見えず、あなたの質問にあなたが提供した情報だけを持っていることを覚えておいてください。 –

+4

あなたの質問に答えるにはビルド前のイベントのコンテキストでエラーコード20018を認識した人は、いくつかの洞察を持っているかもしれません。そういうわけで、誰かがOPに何が間違っているかもしれないかを教えてくれるかもしれない。その特定のエラーコードを認識していない人には、より多くの情報が役立つだろうが、私は、高い手渡しをして批判的なコメントが元の質問よりも情報を引き出すのに効果的であるとは確信していないその情報なしで答えてください。我々は、我々の経験を覚えようとするべきです。 (DelphiまたはSOで)普遍的ではありません。 – Deltics

+1

@ Jason - Kenが少し違って言ったように:)、そのエラーコードにGoogleのヒットがないと、問題はバッチファイルやそれが実行されている環境の何かに非常に固有のものであることが示唆されます。問題のXPマシンでバッチファイルを単独で実行しようとしましたか? (あなたの質問からあなたが持っていることは100%明確ではありません)。もしそうなら(そうでなければそうしてください)、結果はどのような結果になりますか?バッチファイルに含まれる内容の詳細をいくつか教えてください。より多くの情報を共有すれば、誰かを助けることができる可能性が高くなります。 – Deltics

答えて

2

[OK]を、私は最終的にここに答えが見つかりました: http://delphi.about.com/od/devutilities/a/pre_post_build.htm

問題が呼び出されるバッチファイルへのパスにスペースでした。ここでは、リンクからの重要なビットだ

call ..\..\BuildTools\PreBuild.bat "$(PROJECTDIR)" 

:どうやらこれは、Windows 7の問題

ビルドツールディレクトリ内のスペースを削除し、次の固定問題への事前ビルドイベントを変更することではありません:

コマンドライン:これはすべての中で最も難しいですが、1つの作業を済ませたら、すべて簡単です。ここでのトリックは、プログラムの名前に引用符を使用するのではなく、ウィンドウSFN(ショートファイル名)を使用することです。その理由は、引用符を使用してファイルのパスを囲む必要がある場合、IDEはあまりにも多くの引用符で混乱してしまうからです。

します。C:\ Program Files \ SoftwarePassport \ Armadillo.exe D:\ Devの\マイプログレ\ Prot.arm/P

「C:だから、これらは上記のようコマンドラインを追加する間違った方法です\ Program Files \ SoftwarePassport \ Armadillo.exe "D:\ Dev \ MyProg \ Prot.arm/P

C:¥Program Files¥SoftwarePassport¥Armadillo.exe" D:¥Dev¥My Prog¥Prot.arm "/P

"C:\プログラムファイル\ SoftwarePassport \ Armadillo.exe" "D:\ Devの\マイプログレ\ Prot.arm"/P

この最後の1つの寿IDEがそれと混同されていないかどうかは分かりません。 C:\ Progra〜1 \ Softwa〜1 \ Armadillo.exe「D:\ Dev \ My Prog \ Prot.arm」/ P C:\ Progra〜1 \ SoftwarePassport \ Armadillo.exe "D:\ Dev \ My Prog \ Prot.arm"/P

2

あなたは私が投票に投票するように誘惑されているという情報をほとんど与えませんでした。代わりに私は野生の推測を試みます。ビルド後の手順でコマンドをポストする必要があります。

どの回線に障害が発生しているのかわからない場合は、最初の回線だけを試して残りの部分を取り外し、その回線が通過するかどうかを確認してください。

たとえば、ビルド後の手順でXCOPYコマンドを使用してXPマシンで問題が発生することがよくあります。これらのコマンドでは、実際には奇妙なエラーコードが発生し、その意味を診断できません。したがって、XCOPYコマンドを使用している場合は、XCOPYをビルド環境の内外で試し、そのWindows XPボックスで動作するかどうかを確認する必要があります。

コマンドは、マクロ展開された形式で、Rad Studio IDEの「出力」タブからコマンドをコピーし、メモ帳に貼り付けてバッチファイルとして実行し、なぜ彼らはWindows XPで動作しません。

ここでは、XCOPYを使用した回避策の例を示します。これはXP上で失敗した場合、それが動作するまで、私はそれを微調整:私はそれをこのように修正しなければならなかった

XCOPY SourceDir DestDir 

:別の場合

XCOPY.exe SourceDir DestDir 

を、私はそれをこのように修正するために持っていたことが分かりました:

call XCOPY SourceDir DestDir 

あなたは、不思議なバッチファイルを実行しているだけで、それが何であるかは言及していません。だから私はこのようなバッチファイルを実行すると、私は時々このようなXP上の問題、持って....我々はポストビルドステップからバッチファイルを実行するために別々に何ができるか、見てみましょう:

batchfilename.cmd 

をしかし、私は違っそれを実行したとき、私はそれがXP上で働いていた見つけたが、私は、コマンドライン出力を失う:

call batchfilename.cmd 

によって解決することができIDEでビルド後の手順を実行しているときに奇妙な何かが起こっていたようでしたIDEの外でさまざまな形式でコマンドを試してみてください。

あなたが言及した数字(20018)は、グーグルに行くのはちょっとばかげています。バッチファイルで実行しているツールのERRORLEVEL(コマンドシェルへの戻り値)でしょう。実行中のツールについて何も教えてくれなかったので、そのバッチファイルをそのXPマシン上のIDEの外側で実行すると何が起きるのかを調べる基本的なステップを完了しているのだろうかと思います。私の推測では、自分のバッチファイルから来ていないと、それはMSBUILD自体の奥深くから来ているということです。これは、デルファイの人々がソースコードを知っていることです。 MicrosoftからMSBuild機能を提供するバイナリ)。私はMSBUILDのビルド後やビルド前の作業を行うためのタスクは、特にこのような問題をデバッグする場合には、改善が必要なIDEの領域であることに気付きました。しかし、あなたはIDEの外でそれらを実行して、それがそのように機能するかどうかを確認して、上記のように試してみることができます。

thisがバッチファイルの場合... RADのMSBUILDでいくつかの奇妙な依存関係の問題が発生する可能性があるため、依存関係の問題により、RCファイルを変更するためにバッチファイルのテクニックを使用したくない場合があります。/Delphiビルドタスク。私は、私が再現できなかったXP上で、いくつかの奇妙なBRCC32の失敗を見たことがあります。

関連する問題