web-dev-qa-db-ja.com

Windowsサービスのインストール時の資格情報

VisualStudio.Net展開プロジェクトを使用してC#Windowsサービスプロジェクトをインストールしようとしています。

展開プロジェクトを実行するには、右クリックしてコンテキストメニューから[インストール]を選択します。インストールウィザードが実行され、最終的にユーザー名とパスワードを要求する[サービスログインの設定]ダイアログが表示されます。

コマンドラインからscユーティリティを使用してサービスをインストールする場合、資格情報を提供する必要はありません。

このサービスのためだけにログインを作成する必要がありますか?他のサービスと同じように、「ローカルシステム」または「ネットワークサービス」(違いはわかりません)を使用したいと思います。

51
Keith

このコードを、Windowsサービスプロジェクトの_projectInstaller.Designer.cs_ファイルのprivate void InitializeComponent()メソッドに追加します。

_this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
_

プロセスインストーラの定義が次の場合:

_private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
_
98
anthares

このリンクを確認してください: http://msdn.Microsoft.com/en-us/library/zt39148a(v = vs.110).aspx

このセクションに注意してください:サービスのインストーラーを作成するには

ServiceProcessInstallerに変更を加えます:

デザイナーで、Visual Basicプロジェクトの場合はServiceProcessInstaller1をクリックし、Visual C#プロジェクトの場合はserviceProcessInstaller1をクリックします。アカウントプロパティをLocalSystemに設定します。これにより、サービスがインストールされ、ローカルサービスアカウントで実行されます。

20
David

サービスを含むプロジェクトで、インストーラークラスを追加します。次のようにします。

[RunInstaller(true)]
public class MyServiceInstaller : Installer
{
    public MyServiceInstaller()
    {
        ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
        serviceProcessInstaller.Account = ServiceAccount.LocalSystem; // Or whatever account you want

        var serviceInstaller = new ServiceInstaller
        {
            DisplayName = "Insert the display name here",
            StartType = ServiceStartMode.Automatic, // Or whatever startup type you want
            Description = "Insert a description for your service here",
            ServiceName = "Insert the service name here"
        };

        Installers.Add(_serviceProcessInstaller);
        Installers.Add(serviceInstaller);
    }

    public override void Commit(IDictionary savedState)
    {
        base.Commit(savedState);

        // This will automatically start your service upon completion of the installation.
        try
        {
            var serviceController = new ServiceController("Insert the service name here");
            serviceController.Start();
        }
        catch
        {
            MessageBox.Show(
                "Insert a message stating that the service couldn't be started, and that the user will have to do it manually");
        }
    }
}

次に、ソリューションエクスプローラーで展開プロジェクトを右クリックし、[表示]> [カスタムアクション]を選択します。 [カスタムアクション]を右クリックし、[カスタムアクションの追加...]を選択します。アプリケーションフォルダーを選択し、サービスを含むプロジェクトのプライマリ出力を選択します。これで、カスタムアクション(上記のCommit)がインストール時に実行されます。他のカスタムアクションが必要な場合は、追加のメソッド(InstallRollbackUninstall)を追加できます。

4
fre0n
  1. ProjectInstallerを開きます
  2. ProcessInstallerを右クリックして、プロパティを選択します
  3. [アカウント]ドロップダウンの[その他]で、サービスを実行するアカウントを選択します

さまざまなアカウントとその特権の詳細については、次のリンクを参照してください。

http://msdn.Microsoft.com/en-us/library/system.serviceprocess.serviceaccount.aspx

3
Adam Cooper