Visual Studio 2010で新しいWindowsサービスを作成すると、InstallUtilとnet startを使用してサービスを実行するというメッセージが表示されます。
以下の手順を試してみました:
**ステップ4の出力
トランザクションインストールの実行。 >; インストールのインストールフェーズを開始しています。 >; ログファイルの内容を見てください。 ログファイルの内容を参照してください。 2010Projects\TestService ■obj¦x86¦Debug¦TestService.exe アセンブリの進捗。 >; ファイルはC:¥Users¥Username¥Documents¥Visual Studioにあります。 2010Projects にあります。 >; アセンブリをインストールしています。 2010Projects¥TestService¥TestService¥obj¥x86¥Debug¥TestService.exe'. >; 影響を受けるパラメータは以下のとおりです: >; 以下のパラメータです。 ログファイル
logfile = C:¦Visual Studio 2010Projects EstService アセンブリパス assemblypath = C:¥Users¥Username¥Documents¥Visual Studio 2010Projects¥TestService¥obj¥x86¥Debug¥TestService.exe i; RunInstallerAttribute.Yes 属性を持つパブリックインストーラが見つかりませんでした。 RunstallerAttribute.Yes 属性を持つ公開インストーラがC:³³³に見つかりました。 2010Projects CzechTestService CzechTestSe rvice Czechobj Czechx86 CzechDebug CzechTestService.exe アセンブリ。 インストールフェーズが正常に終了しました; Installフェーズが正常に完了し、Commitフェーズが 開始します。 >; のログファイルの内容を参照してください。 のログファイルの内容を参照してください。 2010Projects CzechTestService CzechTestService Czechobj Czechx86 CzechDebug CzechTestService.exe アセンブリの進捗。 >; ファイルはC:¥Users¥Username¥Documents¥Visual Studioにあります。 2010Projects にあります。 >; アセンブリのコミット 'C:¥Users¥Username¥Documents¥Visual Studio 2010Projects\TestService\objx86\Debug\TestService.exe'. >; 影響を受けるパラメータは以下のとおりです: >; 以下のパラメータです。 ログファイル logfile = C:¦Visual Studio 2010Projects EstService アセンブリパス assemblypath = C:¥Users¥Username¥Documents¥Visual Studio 2010Projects¥TestService¥obj¥x86¥Debug¥TestService.exe i; RunInstallerAttribute.Yes 属性を持つパブリックインストーラが見つかりませんでした。 RunstallerAttribute.Yes 属性を持つ公開インストーラがC:³³³に見つかりました。 2010Projects CzechTestService CzechTestSe rvice Czechobj Czechx86 CzechDebug CzechTestService.exe アセンブリ。 アセンブリを削除する; インストーラがないので、InstallStateファイルを削除。 インストーラがないので、InstallStateファイルを削除します; コミットフェーズが正常に終了しました。 >; トランザクションインストールが完了しました。
**ステップ5の出力
サービス名が無効です。
NET HELPMSG 2185と入力すると、より詳しいヘルプが表示されます。
デザイナーでService.csファイルを開き、右クリックしてメニューからAdd Installer"を選択します。
インストーラクラスを最初に作成する必要があります。
サービスインストーラに関する参考文献:。
サービスアプリケーションにインストーラを追加する方法を参照してください。
かなり古いですが...これは私が話していることです:
C#でWindowsサービス:インストーラを追加する(その3)。
こうすることで、自動的にProjectInstaller.cs
が作成されます。これをダブルクリックして、デザイナーに入り、コンポーネントを設定します:
serviceInstaller1にはサービス自体のプロパティがあります:
Description、
DisplayName、
ServiceName、
StartType`が最も重要です。
serviceProcessInstaller1` にはこの重要なプロパティがある:これはサービスが実行されるアカウントである。
例えば
this.serviceProcessInstaller1.Account = ServiceAccount.LocalSystem;
見ている:
RunInstallerAttribute.Yes 属性を持つパブリックインストーラが、C:³³Projects³³TestService³³TestSevice³³obj³³x86³³Debug³³TestService.exeアセンブリに見つかりませんでした。
コードにインストーラ・クラスがないようです。 これは Installer
を継承したクラスで、実行ファイルをサービスとしてインス トールする方法を installutil
に伝えます。
P.s.私自身の小さなセルフインストール/デバッグ可能なWindowsサービステンプレートがここにあります:デバッグ可能なセルフインストールWindowsサービス。
インストーラーを作成してそのエラーメッセージを取り除く別の方法を次に示します。 また、VS2015 Expressには「インストーラーの追加」メニュー項目がないようです。
クラスを作成して、以下のコードを追加し、参照System.Configuration.Install.dllを追加するだけです。
using System.Configuration.Install;
using System.ServiceProcess;
using System.ComponentModel;
namespace SAS
{
[RunInstaller(true)]
public class MyProjectInstaller : Installer
{
private ServiceInstaller serviceInstaller1;
private ServiceProcessInstaller processInstaller;
public MyProjectInstaller()
{
// Instantiate installer for process and service.
processInstaller = new ServiceProcessInstaller();
serviceInstaller1 = new ServiceInstaller();
// The service runs under the system account.
processInstaller.Account = ServiceAccount.LocalSystem;
// The service is started manually.
serviceInstaller1.StartType = ServiceStartMode.Manual;
// ServiceName must equal those on ServiceBase derived classes.
serviceInstaller1.ServiceName = "SAS Service";
// Add installer to collection. Order is not important if more than one service.
Installers.Add(serviceInstaller1);
Installers.Add(processInstaller);
}
}
}
つの典型的な問題がある:
1.ProjectInstallerクラスがない(@MiguelAngeloが指摘しているように)。 2.コマンドプロンプトは "管理者として実行**"しなければならない。
別の考えられる問題(私が遭遇した):
ProjectInstaller
クラスが public
であることを確認してください。 正直なところ、どのように正確に実行したかはわかりませんが、次のようなイベントハンドラを ProjectInstaller.Designer.cs
に追加しました。
this.serviceProcessInstaller1.BeforeInstall + = new System.Configuration.Install.InstallEventHandler(this.serviceProcessInstaller1_BeforeInstall);
。
ProjectInstaller.cs
でハンドラー関数を作成する自動プロセス中に、クラスの定義が変更されたと思います。
パブリッククラスProjectInstaller:System.Configuration.Install.Installer
。
に。
部分クラスProjectInstaller:System.Configuration.Install.Installer
。
置換「パブリック」キーワードを「部分」に置き換えます。 したがって、それを修正するには、そうでなければなりません。
パブリックパーシャルクラスProjectInstaller:System.Configuration.Install.Installer
。
Visual Studio 2013 Community editionを使用しています。
VS 2010および.NET 4.0以降のステルス変更。
.NETにはエイリアスの変更またはコンパイラのクリーンアップがあり、特定のケースに対するこの小さな調整が明らかになる場合があります。
次のコードがある場合...
RunInstaller(true) // old alias
更新する必要がある場合があります。
RunInstallerAttribute(true) // new property spelling
これは、コンパイル時または実行時にカバーの下で変更されたエイリアスのようなものであり、このエラー動作を取得します。 上記のRunInstallerAttribute(true)への明示的な変更により、すべてのマシンのすべてのインストールシナリオで修正されました。
プロジェクトまたはサービスのインストーラーを追加したら、「古い」RunInstaller(true)を確認し、新しいRunInstallerAttribute(true)に変更します。