11

Windowsサービスのインストーラーを使用しようとしていますが、InstallUtil.exeの使用を避けたいと思います。インストーラーは正しく機能しているように見えますが(実行可能ファイルとdllは正しいディレクトリにあります)、サービスはコンピューターの管理の下に表示されません。

これが私がこれまでにしたことです:

サービスクラス名はデフォルトです-Service1。

プロジェクトインストーラーでは、サービスインストーラーのServiceNameはクラス名(Service1)と一致します。

カスタムアクションの下で、サービスのプライマリ出力がインストール、コミット、ロールバック、およびアンインストールに追加されました。

http://support.microsoft.com/kb/816169を参照として使用しています。

何か案は?

4

3 に答える 3

16

サービスプロジェクトにはインストーラークラスがありますか?次のようなものが必要です。

[RunInstaller(true)]
public partial class Service1Installer : Installer
{
    public Service1Installer()
    {
        InitializeComponent();
        ServiceProcessInstaller process = new ServiceProcessInstaller();
        process.Account = ServiceAccount.LocalSystem;

        ServiceInstaller serviceAdmin = new ServiceInstaller();
        serviceAdmin.StartType = ServiceStartMode.Manual;
        serviceAdmin.ServiceName = "Service1";
        serviceAdmin.DisplayName = "Service1";
        serviceAdmin.Description = "Service1";

        Installers.Add(serviceAdmin);
    }
}
于 2009-07-27T21:13:09.433 に答える
3

サービスプロジェクトにServiceInstallerクラスとServiceProcessInstallerクラスが作成されていることを確認してください。(詳細については、このリンクを確認してください)。

コンピューターの管理と[サービス]ウィンドウを閉じ、インストーラーを再度実行して、[サービス]ウィンドウを再度開きます。

それでも問題が解決しない場合は、コンピューターを再起動してください。一部のファイルがロックされている可能性があります。

言うまでもなく、これを正しく機能させるには、マシンの管理者権限が必要になる可能性があります。

于 2009-07-27T20:06:42.627 に答える
0

私はそれを理解したと思います。Designerコードのバグであるか、ステップを逃した可能性があります。

デザイナコードのInitializeComponent()メソッドでは、次のものを追加することになっていると思います。

this.Installers.AddRange(new System.Configuration.Install.Installer[] {this.serviceProcessInstaller1, this.serviceInstaller1});

そこにはなかったので、ProjectInstallerコンストラクターにこれを追加しました。

Installers.Add(serviceInstaller1);
Installers.Add(serviceProcessInstaller1);

インストールすると、コンピュータの管理にサービスとして表示されます。

于 2009-07-27T21:06:12.507 に答える