Windowsサービスのインストール時の資格情報
VisualStudio.Net展開プロジェクトを使用してC#Windowsサービスプロジェクトをインストールしようとしています。
展開プロジェクトを実行するには、右クリックしてコンテキストメニューから[インストール]を選択します。インストールウィザードが実行され、最終的にユーザー名とパスワードを要求する[サービスログインの設定]ダイアログが表示されます。
コマンドラインからscユーティリティを使用してサービスをインストールする場合、資格情報を提供する必要はありません。
このサービスのためだけにログインを作成する必要がありますか?他のサービスと同じように、「ローカルシステム」または「ネットワークサービス」(違いはわかりません)を使用したいと思います。
このコードを、Windowsサービスプロジェクトの_projectInstaller.Designer.cs
_ファイルのprivate void InitializeComponent()
メソッドに追加します。
_this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
_
プロセスインストーラの定義が次の場合:
_private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
_
このリンクを確認してください: http://msdn.Microsoft.com/en-us/library/zt39148a(v = vs.110).aspx
このセクションに注意してください:サービスのインストーラーを作成するには
ServiceProcessInstallerに変更を加えます:
デザイナーで、Visual Basicプロジェクトの場合はServiceProcessInstaller1をクリックし、Visual C#プロジェクトの場合はserviceProcessInstaller1をクリックします。アカウントプロパティをLocalSystemに設定します。これにより、サービスがインストールされ、ローカルサービスアカウントで実行されます。
サービスを含むプロジェクトで、インストーラークラスを追加します。次のようにします。
[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
)がインストール時に実行されます。他のカスタムアクションが必要な場合は、追加のメソッド(Install
、Rollback
、Uninstall
)を追加できます。
- ProjectInstallerを開きます
- ProcessInstallerを右クリックして、プロパティを選択します
- [アカウント]ドロップダウンの[その他]で、サービスを実行するアカウントを選択します
さまざまなアカウントとその特権の詳細については、次のリンクを参照してください。
http://msdn.Microsoft.com/en-us/library/system.serviceprocess.serviceaccount.aspx