web-dev-qa-db-ja.com

.exeはWindows上で有効なWin32アプリケーションではありませんXP

Visual Studio 2012 Professionalを使用しており、高度なインストーラー(サードパーティ)を使用してインストーラーを作成しています。

インストールされている.exeをWindowsXPで実行すると、次のメッセージが表示されます。

<appName> .exeは有効なWin32アプリケーションではありません。

インストールされた実行可能ファイルは、Windows7と8の両方で正常に動作します。

プログラムをWindowsXPで動作させるにはどうすればよいですか?

9
Rahul Shirphule

Visual Studioのコマンドプロンプトから、次のコマンドを実行します。

 Dumpbin.exe /headers c:\where\you\put\it\setup.exe

ここで、「setup.exe」は、インストーラーの作成者によって作成されたセットアップEXEです。ここで重要な情報の例を投稿します。

OPTIONAL HEADER VALUES
             10B magic # (PE32)
            ...
            4.00 operating system version
            0.00 image version
            6.00 subsystem version              // <=== here!!
               0 Win32 version
            ...

サブシステムのバージョン番号は重要です。 VS2012は、この値をVistaのバージョン番号である6.00に設定し始めたVisualStudioの最初のバージョンです。以前のバージョン、および.NET 4.0以前を対象とする場合のVS2012では、このバージョン番号が4.00に設定されます。

それ以外の点では、これは重要な前進であり、XPのサポートを段階的に廃止することの一部です。 Windowsバージョン6.00以降、Vista、Win7、およびWin8は、この番号に注意を払っています。彼らはあなたのプログラムが後のWindows機能を認識しておらず、いくつかのappcompatシムをオンにする必要があると想定します。最も注目すべきものは、Aeroのappcompatです。これは、マウスで簡単にクリックできる太い境界線のあるウィンドウを表示するデスクトップテーマです。ウィンドウはそれらの境界線について嘘をつき、ウィンドウが実際よりも小さいことを通知します。ウィンドウを互いに整列させようとするプログラマーにとっては、大きな混乱の原因となります。

6.00が表示された結果、セットアッププログラムをXPで実行できなくなります。バージョン5.02です。

したがって、最初に必ず実行してくださいnotターゲット.NETバージョン4.5、XPでは使用できません。代わりに4.0を使用してください。それでも問題が解決しない場合は、ベンダーのサポートに連絡して、ツールが作成するsetup.exeファイルでその番号を制御する方法を尋ねてください。回避策は、/ SUBSYSTEMオプションを指定してEditbin.exeを実行し、番号を変更することです。

16
Hans Passant

実際、.NET 4.5フレームワークはWindow 6.0以降のバージョンと互換性がある[〜#〜] exe [〜#〜]。そしてあなたの場合XPはWindowsバージョン5.0に属しているので、このエラーが発生します。 T

簡単な解決策は、.NET4.0以下をターゲットにすることです。

Hans Passantに感謝

私はVisualStudioを初めて使用するため、以下のオプションが最近追加されたかどうかはわかりませんが、Visual Studio 2013には、ターゲットリストにWin_XPを組み込むための下位互換性オプションがあります。以下の画像が役立ちます:

Visual Studio Configuration


そして、dumpbinコマンドを実行すると、以下の結果が得られました。

enter image description here


これで、通常の状況では、アプリケーションをWindowsXPで実行できるようになりました。
これがお役に立てば幸いです。

0
sjsam