C# - サービスを登録していないWindowsサービスのインストーラ
-
19-09-2019 - |
質問
私は、Windowsサービスのインストーラを使用しようとしている、とInstallUtil.exeを使用しないようにしたいと思います。インストーラが正常に動作しているように見えます(実行ファイルやDLLが正しいディレクトリにある)が、サービスはコンピュータの管理の下に表示されません。
ここで私がこれまで行ってきたものです。
サービスクラス名がデフォルトである - 。Service1の
サービス1 -プロジェクトインストーラでは、サービスインストーラのServiceNameが、クラス名と一致します。
カスタムアクションの下では、サービスの主な出力は、ロールバック、およびアンインストールをインストールコミットするために追加されました。
私が使用している http://support.microsoft.com/kb/816169 のよう参照。
任意のアイデア?
解決
あなたのサービスプロジェクトは、インストーラクラスを持っていますか?あなたはこのようになりますものを持っている必要があります:
[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);
}
}
他のヒント
あなたのサービスプロジェクトでのServiceInstallerとServiceProcessInstallerクラスを作成しました確認してください。 (詳細はこのリンクを確認してください)。
を閉じるコンピュータの管理とサービス]ウィンドウ、もう一度インストーラを実行し、[サービス]ウィンドウを開きます。
それでも解決しない場合は、は、コンピュータを再起動します。あなたは、いくつかのファイルがロックされている場合があります。
これが正しく動作するために、あなたはおそらく、マシンの管理者権限が必要であることは言うまでもない。
私は、私はそれを考え出したと思います。これは、デザイナーのコードのバグかもしれない、または多分私はステップを逃しています。
私はのInitializeComponent()メソッドでは、デザイナーのコードで考えて、それが追加になっています:
this.Installers.AddRange(new System.Configuration.Install.Installer[] {this.serviceProcessInstaller1, this.serviceInstaller1});
それはありませんでしたので、私はProjectInstallerコンストラクタでこれを追加しました:
Installers.Add(serviceInstaller1);
Installers.Add(serviceProcessInstaller1);
これでインストールの上、それはコンピュータの管理でのサービスとしてリストされています。