2011-01-19 8 views
2

x64を対象とするWindowsサービスの展開パッケージを作成しようとしています。VS2010での64ビットWindowsサービスの展開パッケージ

セットアッププロジェクト自体がx64をターゲットにしていますが、実際にサービスを登録/登録解除するカスタムアクションを追加する必要があります。

ただし、カスタムアクションを追加してインストーラを実行しようとすると、私のサービスの実行可能ファイルが壊れていることを示すBadFormat例外が発生します。

私はissue mentioned hereに入っていますが、それを証明することはできません。

このWindowsサービスは、自動ビルドとデプロイメント、継続的な統合などのために、TFSを使用して、はるかに大きなアプリケーションの一部として開発されています - GUIの使用を必要とするツールを使用してバイナリファイルのビットを手動で微調整することは、いいえ。

だから私が知る必要があるのは、 VS2010で64ビットWindowsサービスの展開パッケージを自動的にビルドすることは可能ですか?もしそうなら、どのように?

+1

32をターゲットにして、64が問題であることを確認できますか? – Nick

+0

現在のプロジェクトにはありません - 複数の依存関係があり、そのうちのいくつかは自分自身によって制御されず、すべてがx64です。ダミーのx86サービスを試してみることもできますが、違いがたくさんあるので、それが実現するものはわかりません。 x64の依存関係を失うのに十分なコメントを書き込めるかどうか確認してください。 – Basic

+0

「Orca」を使ってカスタムアクションを手動で設定し、64ビット版のInstallUtilLib.dllを指すようにしました。インストール先 – Basic

答えて

5

これは、サービスまたはいずれかのアセンブリが、ターゲットプラットフォームの設定がx86に変更されて構築された場合に発生します。この場合、適切なバージョンのInstallutil.exeを使用してサービスを登録する必要があります。 c:\ windows \ microsoft.net \ frameworkと\ framework64には、それぞれ32ビット版と64ビット版の2つがあります。あなたが前者が必要なことは、良いことです。セットアッププロジェクトを作成した場合は、TargetPlatformプロパティをx86に変更します。

また、ターゲットプラットフォームを設定する必要があるかどうかを確認するには、COMサーバーなどのアンマネージコードに依存する場合にのみ行います。 C#の設定はProject + Properties、Compileタブにあります。 VS2010のデフォルトはx86です。このような依存関係がない場合はAnyCPUに反転してください。

+0

64ビットWebアプリケーション(MVC2)と共有されるコンポーネントを使用して、64ビット環境にインストールしています。すべてのアセンブリは、64ビットとして構築されるように構成されています。私は、サービスを登録するためにinstallutilを使うことができましたが、インストーラの中にすべてをラップするという点を打ちのめすのですか?セットアップターゲットプラットフォームをx86に変更するのはなぜですか?私がそれを行うと、私のアセンブリがx64であると不平を言う。 – Basic

+0

私が説明しようとしたように、問題の原因はあなたのプロジェクトの1つのターゲットプラットフォーム設定である。あなたはまだそれを見つけましたか? Corflags.exeユーティリティを使用することは、ビルド後に設定を確認する別の方法です。 x64のターゲット設定は便利ではありません。AnyCPUをターゲットにして、コードをどこでも実行できるようにしてください。デバッグとリリースの設定では、設定値が異なる可能性があるので、正しい設定を選択してください。 –

+0

問題のサービスは、MVCアプリケーションの一部であるアセンブリをコピーし、いくつかのメソッドを実行する前にリフレクションによって新しいアプリケーションドメインにロードします。私はウェブサイト(x64に設定されている)を支配していません。 「Any CPU」を選択した場合、x64として優先的に実行されますか?そうでなければ、32ビットフレームワーク=例外を使用して64ビットアセンブリをロードしようとしています。このシナリオでは、アドバイスはまだ成立していますか? – Basic

関連する問題