Visual Studio 2010 を使用して 64 ビット システムでサービスを開発しました。このサービスは、セカンダリ ライブラリの Start メソッドと Stop メソッドにアクセスする単なるスケルトンです。ライブラリは 64 ビット COM オブジェクトにアクセスし、x64 としてビルドする必要があります。COM オブジェクトは、x64 として個別にビルドされ、64 ビット環境でテストされた dll です。プロジェクトをセットアップし、カスタム アクションを介してサービスをインストールするインストーラーがあります。
サービスをバイパスするテスト アプリでコードをデバッグすると、サービスがアクセスしているライブラリが正しく機能していることを確認できます。
私が抱えている問題は、インストール時の BadImageFormatException です。x64 のターゲット プラットフォームでインストーラーを使用しています。すべてを x64 としてビルドすると、次のメッセージが表示されます。
Error 1001. Exception occured while initializing the installation: System.BadImageFormatException. Could not load file or assembly... or one of its dependencies. An attempt was made to load a program with an incorrect format.
サービスを任意の CPU としてビルドするように設定すると、インストールは機能し、サービスはライブラリにアクセスできますが、COM オブジェクトが見つかりません。サービスをインストールするカスタム アクションを削除しても、インストールは機能します。その後、installutil を使用してサービスを手動でインストールしようとすると、上記と同じエラー メッセージが表示されます。
以下は、私がサービスで使用しているライブラリのリストです。
using System;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using MAPIMail;
using MAPIMail.Logging;
MAPIMail プロジェクトは x64 としてビルドされていることに注意してください。
x64システムに任意のCPUとして問題なくインストールできるのに、なぜサービスをx64としてインストールできないのか、誰もが知っていますか? すべての提案に感謝します。