我有一个运行良好的Windows服务,但我必须在一个特殊的用户帐户下运行。
目前我进入服务并更改登录部分,但是为了部署,必须更专业地完成。
我是否可以通过编程方式或在服务的安装过程中将其作为自定义用户帐户登录?
答案 0 :(得分:4)
当您打开服务控制管理器(SCM)时,当然有一个标签为Logon的标签..在那里,您可以指定它应在哪个域或机器帐户下运行...
但是以编程方式。如果您在代码中使用Service Installer类,则可以在那里指定它..
public class MyServiceInstaller : Installer
{
private ServiceInstaller servInst;
private ServiceProcessInstaller servProcInst;
public MyServiceInstaller () { InitializeComponent(); }
#region Component Designer generated code
private void InitializeComponent()
{
servInst = new ServiceInstaller();
servProcInst = new ServiceProcessInstaller();
// -----------------------------------------------
servProcInst.Account = ServiceAccount.LocalSystem; // or whatever accnt you want
servProcInst.Username = null; // or, specify a specifc acct here
servProcInst.Password = null;
servProcInst.AfterInstall +=
new InstallEventHandler(this.AfterServProcInstall);
servInst.ServiceName = "MyService";
servInst.DisplayName = "Display name for MyService";
servInst.Description = " Description for my service";
servInst.StartType = ServiceStartMode.Automatic;
servInst.AfterInstall +=
new InstallEventHandler(this.AfterServiceInstall);
Installers.AddRange(new Installer[] { servProcInst, servInst });
}
#endregion
}
private void AfterServiceInstall(object sender, InstallEventArgs e) { }
private void AfterServProcInstall(object sender, InstallEventArgs e) { }
答案 1 :(得分:1)
查看CreateService函数,尤其是lpServiceStartName
参数。这是“服务应运行的帐户的名称。”
答案 2 :(得分:0)
你是如何安装的?这是一个.net服务(在这种情况下,我认为您可以在安装程序对象上指定帐户)。
通常,安装程序技术允许您更改凭据(可能的例外是COM的服务注册)
如果您正在进行xcopy注册,然后在第一次运行时注册,则可以使用ChangeServiceConfig(...,ServiceName,Password,...)来修复注册。
答案 3 :(得分:0)
碰到了这一点,并认为我也会投入一个Powershell选项,因为我把它弄得很方便,它可以帮助别人:
$svc = gwmi win32_service -computername <computer name> -filter "name='<name of your service>'"
$inParams = $svc.psbase.getMethodParameters("change")
$inParams["StartName"] = '<domain\username>'
$inParams["StartPassword"] = '<password>'
$null = $svc.invokeMethod("change", $inParams, $null)