Windows services 安装windows服务时,如何通过编程使其使用特定的域帐户

Windows services 安装windows服务时,如何通过编程使其使用特定的域帐户,windows-services,installation,service,Windows Services,Installation,Service,我有一个运行良好的windows服务,但我必须让它在一个特殊的用户帐户下运行 目前,我进入“服务”并更改“登录为”部分,但对于部署,这必须以更专业的方式完成 我是否可以通过编程方式或在服务安装过程中让它以自定义用户帐户登录?当您打开服务控制管理器(SCM)时,当然会有一个标记为“登录”的选项卡。。在那里,您可以指定它应该在哪个域或计算机帐户下运行 但是在程序上。如果在代码中使用服务安装程序类,则可以在那里指定它 public class MyServiceInstaller : Install

我有一个运行良好的windows服务,但我必须让它在一个特殊的用户帐户下运行

目前,我进入“服务”并更改“登录为”部分,但对于部署,这必须以更专业的方式完成


我是否可以通过编程方式或在服务安装过程中让它以自定义用户帐户登录?

当您打开服务控制管理器(SCM)时,当然会有一个标记为“登录”的选项卡。。在那里,您可以指定它应该在哪个域或计算机帐户下运行

但是在程序上。如果在代码中使用服务安装程序类,则可以在那里指定它

 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) { }

当然,当您打开服务控制管理器(SCM)时,会有一个标记为登录的选项卡。。在那里,您可以指定它应该在哪个域或计算机帐户下运行

但是在程序上。如果在代码中使用服务安装程序类,则可以在那里指定它

 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) { }

如何安装?这是一个.net服务(在这种情况下,我认为您可以在installer对象上指定帐户)

通常,安装程序技术允许您更改凭据(COM的服务注册可能除外)


如果您正在进行xcopy注册,然后在第一次运行时注册,则可以使用ChangeServiceConfig(…、ServiceName、Password…)来修复注册。

如何安装?这是一个.net服务(在这种情况下,我认为您可以在installer对象上指定帐户)

通常,安装程序技术允许您更改凭据(COM的服务注册可能除外)


如果您正在进行xcopy注册,然后在第一次运行时进行注册,则可以使用ChangeServiceConfig(…、ServiceName、Password…)来修复注册。

查看该函数,尤其是
lpServiceStartName
参数。这是“服务应在其下运行的帐户的名称”。

请查看该函数,尤其是
lpServiceStartName
参数。这是“服务应在其下运行的帐户名称”。

遇到此问题时,认为我也应该加入一个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)
$svc=gwmi win32_服务-计算机名称-过滤器“名称=“””
$inParams=$svc.psbase.getMethodParameters(“更改”)
$inParams[“StartName”]=''
$inParams[“StartPassword”]=''
$null=$svc.invokeMethod(“更改”,$inParams,$null)

遇到这个问题,我想我也应该加入一个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)
$svc=gwmi win32_服务-计算机名称-过滤器“名称=“””
$inParams=$svc.psbase.getMethodParameters(“更改”)
$inParams[“StartName”]=''
$inParams[“StartPassword”]=''
$null=$svc.invokeMethod(“更改”,$inParams,$null)

我需要这些售后服务代表吗?不太确定。。。试试看,没有。。。这段代码是多年前塞维拉写的,所以我不知道;我不记得为什么了,但在mycode中,它们只是空的代理。。。(补充回答…)谢谢。顺便说一句,我试图从app.config获取用户名/密码时出错,我想我不能在那里存储user/pwd??是的,你可以,你可以在app.config中存储任何东西。。听起来像是另一个问题…我需要这些售后代理吗?不太确定。。。试试看,没有。。。这段代码是多年前塞维拉写的,所以我不知道;我不记得为什么了,但在mycode中,它们只是空的代理。。。(补充回答…)谢谢。顺便说一句,我试图从app.config获取用户名/密码时出错,我想我不能在那里存储user/pwd??是的,你可以,你可以在app.config中存储任何东西。。听起来像是另一个问题。。。