17

MicrosoftがVisualStudioを「進化」させるほど、プロセス全体が無知になることを誓います。

3つのクラスライブラリを含むWindowsサービスがあります。各クラスライブラリのプロパティに移動し、プラットフォームターゲットをx64に設定しました。すべてを検証するために追加したテストコンソールプロジェクトだけでなく、Windowsサービスにも同じことを行いました。

Windows 2008 R2 x64サーバーでコンソールアプリケーションを問題なく実行できますが、愚かなインストーラーが爆撃を続け、イメージが悪いと言ってきます。インストーラーのターゲットプラットフォームをx64に設定したことを確認しました。

このばかげたことが爆撃されて、どんな洞察も本当に感謝するだろうかと私は知りません。私は他のDLLを参照していますが、それらはx86である可能性がありますが、メインライブラリが適切に設定されていれば、うまくいくと思いました...

4

3 に答える 3

29

私はついにこれを理解しました-それはアーキテクチャ、参照、または他のナンセンスとは何の関係もなく、インストーラー自体と関係があります。 この記事で説明しているように、Visual Studioインストーラーはデフォルトで32ビットDLLを使用し、それが失敗の原因です。

この問題を解決するには、次の手順に従ってください。

  1. すべてのプロジェクトの[プロパティ]⇒[ビルド]タブに移動し、ターゲットプラットフォームをx64に設定してください。
  2. インストールプロジェクトの名前をクリックしてから[プロパティ]をクリックし、ターゲットプラットフォームがx64であることを確認します
  3. ソリューションを構築する–ソリューションがコンパイルされない場合は、右クリックして[プロジェクトのアンロード]を選択し、参照が失敗したプロジェクトの[プロジェクトのロード]を選択します。
  4. ここに移動して、7.0INstallerSDKをダウンロードしてインストールします
  5. C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Binフォルダーに移動し、Orca.MsiファイルをダブルクリックしてOrcaをインストールします。
  6. Orcaを実行し、プロジェクトのMSIフォルダーを開きます
  7. バイナリテーブルを選択します
  8. レコードInstallUtilのセル[バイナリデータ]をダブルクリックします
  9. 「ファイル名からバイナリを読み取る」が選択されていることを確認します
  10. [参照]ボタンをクリックします。C:\ Windows \ Microsoft.NET \ Framework64\v4.0.30319に参照します。
  11. InstallUtilLib.dllを選択します
  12. [開く]ボタンをクリックしてから[OK]ボタンをクリックします

つまり、MSIファイルをOrcaに保存してから展開します。x64のインストールは、それ以上問題なく機能するはずです。

于 2012-04-23T13:30:09.447 に答える
1

Visual Studio 2017で、この問題に遭遇しました。長い間x86であったアプリケーションのx64バージョンのインストーラーを構築していました。

ケンの答えが決定的なものであることは間違いありませんが、カスタムアクションはインストールされたアプリケーションではなくインストーラーによって呼び出されるため、少なくとも私の場合は、カスタムを含むプロジェクトは必要ないことに気付きました。そのクラスはアプリケーション自体によってインスタンス化されることはないため、アプリケーションの他の部分と同じビット数を持つアクション。

そこで、そのプロジェクトのプラットフォームだけをx86に戻し、インストーラーを再構築しました。

それはすべて「うまくいった」。

もちろん、これは、ソリューションの他の部分から完全に分離されたカスタムアクションがあるかどうかに依存します。ただし、Orcaを使用する必要がないので非常に安心です。

于 2019-01-31T19:11:15.980 に答える
1

このエラーは、64ビットマシンに.Net4.5+サービスをインストールするときに発生しました。

  • インストーラーはx64に設定されました
  • サービスプロジェクトビルドプラットフォームはx64に設定されました

BadImageFormatExceptionでインストールが失敗します。

私にとっての解決策は、サービスプロジェクトのプロパティに移動し、ビルドプラットフォームを[任意のCPU ]に変更し、デフォルトでオンになっている[ 32ビットを優先する]チェックボックスをオフにすることでした(意味も参照してください)。

于 2021-02-15T11:34:43.023 に答える