При установке моей службы Windows, как я могу программно заставить ее использовать конкретную учетную запись домена - PullRequest
1 голос
/ 18 декабря 2008

У меня есть служба Windows, которая работает нормально, но мне нужно, чтобы она работала под специальной учетной записью пользователя.

В настоящее время я захожу в службы и изменяю раздел входа в систему, но для развертывания это должно быть сделано более профессионально.

Можно ли как-нибудь сделать так, чтобы он входил в систему как пользовательская учетная запись программно или в процессе установки службы?

Ответы [ 4 ]

4 голосов
/ 18 декабря 2008

Когда вы открываете Service COntrol Manager, (SCM), конечно же, появляется вкладка «Вход в систему». Там вы можете указать, под какой учетной записью домена или компьютера он должен работать ...

Но программно. если вы используете класс 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 голос
/ 18 декабря 2008

Посмотрите на функцию CreateService , особенно на аргумент lpServiceStartName. Это «имя учетной записи, под которой должна работать служба».

0 голосов
/ 24 мая 2011

Наткнулся на это и подумал, что я тоже добавлю вариант 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)
0 голосов
/ 18 декабря 2008

Как вы устанавливаете? Это сервис .net (в этом случае, я думаю, вы можете указать учетную запись на объекте установщика).

Как правило, технология установщика позволяет изменять учетные данные (с возможным исключением регистрации службы COM)

Если вы регистрируетесь в xcopy, а затем регистрируетесь при первом запуске, вы можете использовать ChangeServiceConfig (..., ServiceName, Password, ...) для исправления регистрации.

...