私は.NET 3.5 Windowsサービスを提供しています。私はmsbuildスクリプトの一部として構築されたサービス用のインストーラパッケージを作成しましたが、サービスの各味ができるようにインストーラをビルドできるようにする必要があります同じマシンにインストールされます。誰もがこれを行うための最善の方法を知っていますか?複数のバージョンのWindowsサービスを同じPCにインストールする
おかげ
私は.NET 3.5 Windowsサービスを提供しています。私はmsbuildスクリプトの一部として構築されたサービス用のインストーラパッケージを作成しましたが、サービスの各味ができるようにインストーラをビルドできるようにする必要があります同じマシンにインストールされます。誰もがこれを行うための最善の方法を知っていますか?複数のバージョンのWindowsサービスを同じPCにインストールする
おかげ
おそらくthis articleは助けになるでしょうか?
問題
リフレクターを使用して
ServiceInstaller
クラスを確認するとき、あなたは はCreateService
でServiceInstaller.Install
メソッドへのWin32呼び出しを行い、それが表示されます。方法は 既にインストールされたサービスとを一致serviceName
またはdisplayName
パラメータで呼び出されるたびCreateService
はERROR_DUPLICATE_SERVICE_NAME
リターンコードが返されます。これは です。Win32Exception
は上記のウィンドウにスローされた になり、 は最終的に2回目のインストール を失敗させます。 CreateService ファンクションhereで完全な のマニュアルを表示できます。この問題を回避するには、行うことが に必要があるのは、動的に値がサービスのインスタンスごとに 異なっていることを確認するために、既知の値と に設置し、 サービスの起動時に サービス名を設定することですあなた をインストールしてください。
ソリューション
行われる必要があるのは、各サービス インストールインスタンスの名前が一意であることを を確認することです。その後、 あなたは持っている サービスインスタンスごとに インストールディレクトリのコピーを持っている必要があります。 最後に、 のインストールと起動時にサービス名を動的に に設定する必要があります。これは、app.configファイルを使用して簡略化された になります。
この記事では、同じマシン上に.NET Windowsサービスの複数のインスタンスをインストールする方法を段階的に説明します。
なぜ同じマシン上で同時にデバッグとリリースのバージョンを実行する必要があるのでしょうか?
記事Cody gray referencesのコメントに注目したいと思っただけです。著者とコメント者は、scを使用する簡単な方法があることに同意したようです。次のようなexe:
sc \\myserver create NewService binpath= c:\nt\system32\NewServ.exe
sc create NewService binpath = "pathtoservice.exe"が私たちのために働いていました。ありがとうございました。 –
ありがとうございます。これを必要とする理由は...私の考えではなく、率直に言って、私はそれが必要だとは思わない。私たちのシニア開発者によると、なぜ私は完全にはわからないが、私たちはビルドの一部としてそれを行う必要があります! – TabbyCool
@TabbyCool:それは本当に奇妙な要件です。ビルドのリリース版をテストすることは良いアイデアです(コンパイラの最適化でバグが発生しないようにする)が、同時に実行する必要はありません。エンドユーザーがその構成で実行されていないことを考慮すると、私はそれだけですべてのデバッグを難しくすることを期待しています。リリースビルドをデバッグできるようにする必要がある場合は、両方を実行するのではなく、リリースビルド用のPDBシンボルを生成することをお勧めします。とにかく、喜んで助けてください。 –
ライブ・システムと同じサーバー上でUAT環境を実行する必要がある場合に備えて、サーバーの問題のためにライブ・データベースをUATと同じサーバーに移動しなければならないと考えています。理想的ではありませんが、予算が削減されており、多くのサーバーが余裕を持っているわけではありません。 – TabbyCool