2009-06-17 189 views
2

設定:Windows server 2008 x64。XXX.exeは有効なWin32アプリケーションではありません

ソフトウェアはクロスプラットフォームのC++ 64bitです。

以前のインストーラは

Cにインストールするためにユーザに尋ねるにデフォルト設定:\プログラムファイル(x86の)最後のリリースのために\会社\バージョン

私はにインストールするには、パスのオーバーライドを使用してインストーラを変更しました

C:\プログラムファイル\のサブプロセスが開始されません。私たちのためのテストを行います\プログラムファイル\会社\バージョン

人は新しいとCにインストールすることを言いました。 C:\ Program Files(x86)\ xxxにインストールを上書きするとすべて正常に動作します。 cmd.exeを実行してC:\ Program Files \ xxxから実行すると、「yyy.exeは有効なWin32アプリケーションではありません」というエラーが表示されます。これもc:¥Program Files(x86)では問題ありません。

顧客もデフォルトの場所にインストールされ、同じエラーが発生します。

ビルド/ devマシンにこれらのエラーは表示されません。それは決して更新されず再起動されないサーバー2008のデモ版(およびVisual Studio Express)を実行します。

"x86"について特別なことがありますか?プログラムファイルに貼り付けられていますか?

注:

これは、サーバ2008 x86_64版である私のdevのマシン上の問題ではありません。

ダンビン/ヘッダーは、これらのプログラムが64ビットであることを明確に示しています。

この時点では答えはありません。 回避策は、Program Files(x86)またはそれ以外の場所にインストールして実行するだけです。ユーザーがプログラムファイルにインストールすべきでないFAQを掲載する予定です(プログラムが核になる場合にはよく見る)。

これはインストーラの問題である可能性があります。これは "quack.exe"の古典的なケースですが、 "Program Files"に適用されます。私が一般的に窓を嫌う理由は十分です。

+0

xxx.exe - hmm - どのような実行ファイルを作成していますか? gahooa

+0

悪意のある場所のexeファイルを依存関係ビューアで確認してみてください。どのDLLが利用できないのかを教えてください。また、procmonなどを使用して起動時にプロセスを監視し、実行時に何が失敗するかを確認してください。それはあなたに何が欠けているかについてのよりよい考えを与えるはずです。 – eran

+0

ユーザーはcmd.exeからプログラムを実行します。エラーは上記を示すダイアログです。 私が怒っているのは、私自身はこのエラーを絶対に再現できないということです。私はsp2以降に更新しました。 – Brian

答えて

0

これはアプリケーションのマニフェストに関連していると思います。何とかこれを変更しましたか?私はコンパイラ間を行き来するときに同じエラーが発生しました。 vc9(vs2008)は.net 2003でコンパイルするときに通常使用しないマニフェストを作成しました。

+0

このアプリケーションにはマニフェストはありません。 私はmsvc9(express 2008)、cygwin、jam、fltk、pcre、gdal、およびjpegライブラリをすべて静的にリンクして使用しています。 – Brian

+0

Expressについてはわかりませんが、VS2008 Proではデフォルトで自動的に生成されたマニフェストが表示されます。 –

+0

正確には、そのマニフェストは実行可能ファイルに埋め込まれています。 – MSalters

4

Program Files(x86)ディレクトリは、32ビットプログラムがインストールされているディレクトリです。 32ビットアプリケーションが実行されている場合、%ProgramFiles%環境変数はsetからC:\ Program Files(x86)\(デフォルトでは、これは実際には別のドライブに存在する可能性があります)です。

このプログラムが64ビットとしてコンパイルされていることは間違いありませんか?

+0

絶対に64ビット。これは大量のデータを処理する高性能なプロダクトプロセッサであり、各プロセスがすべてのRAMと仮想メモリを使い果たしていることを明確に見ることができます。 – Brian

+0

また、2つの独立したビルド環境を維持する必要があります。いくつかのユーティリティアプリケーションがコンパイルされ、パートナに32ビットとして与えられます。ビルド環境を64ビットから32ビットに切り替えることは深刻な苦痛です。 32ビットapsは常に* .x86_32.exeと表示されます。 – Brian

+1

Hmm ...デフォルトのインストールパスから判断すると、インストーラは32ビットです。多分それはいくつかの問題を引き起こしているのでしょうか?他のファイルシステムのリダイレクト(32ビットアプリケーションではsystem32にリダイレクトされるsystem32など)やレジストリリダイレクト(HKEY_LOCAL_MACHINE \ SOFTWARE \)などがあります。 – Powerlord

1

多分、exeは特定の設定で何とか32ビットでdllを見つけますか?例えば。 sbが32ビットのdllで64ビットのディレクトリを台無しにしてしまったとき。

起動時にloadlibrarieddllもロードされないことに注意してください。

関連する問題