Windows Service
От: Аноним  
Дата: 04.10.07 18:53
Оценка:
Создаю сервис:

    public partial class HostService : ServiceBase
    {   
        public HostService()
        {
            InitializeComponent();

            this.ServiceName = "RemoteAdmin";
            this.EventLog.Log = "RemoteAdmin LOG";
        }

        static void Main(string[] args)
        {
            ServiceBase.Run(new HostService());
        }       

        private static RemoteServer Host;
        
        protected override void OnStart(string[] args)
        {
            Host = RemoteServer.Start();
            base.OnStart(args);
        }

        protected override void OnStop()
        {
            if (Host != null)
            {
                Host.OnStop();
            }
            base.OnStop();
        }   
    }

    [RunInstaller(true)]
    public partial class RemoteAdminInstaller : Installer
    {
        public RemoteAdminInstaller()
        {
            InitializeComponent();

            ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
            ServiceInstaller serviceInstaller = new ServiceInstaller();

            serviceProcessInstaller.Account = ServiceAccount.LocalService;
            serviceProcessInstaller.Username = "";
            serviceProcessInstaller.Password = "";
            
            serviceInstaller.DisplayName = "RemoteAdmin";            
            serviceInstaller.StartType = ServiceStartMode.Automatic;

            serviceInstaller.ServiceName = "RemoteAdmin Service";

            this.Installers.Add(serviceProcessInstaller);
            this.Installers.Add(serviceInstaller);
        }
    }


И зарускаю его так:

ServiceController[] services = ServiceController.GetServices();

            foreach (ServiceController service in services)
            {
                if (service.DisplayName == "RemoteAdmin")
                {
                    if (service.Status != ServiceControllerStatus.Running)
                    {
                        service.Start();

                        Console.WriteLine("Service RemoteAdmin start");
                        Console.WriteLine("For quit press any key ...");
                        Console.ReadKey();
                    }
                }                
            }


При запуске ошибка: отказ в доступе, я так понимаю это настройки политики безопасности не дают запустить сервис, как и где их настраивать

Спасибо
Re: Windows Service
От: _d_m_  
Дата: 05.10.07 00:24
Оценка:
Здравствуйте, Аноним, Вы писали:


А>При запуске ошибка: отказ в доступе, я так понимаю это настройки политики безопасности не дают запустить сервис, как и где их настраивать


Например: Администрирование / Локальные параметры безопасности / Параметры безопасности / Локальные политики / Назначение прав пользователям / Загрузка и выгрузка драйверов устройств
Re[2]: Windows Service
От: Аноним  
Дата: 05.10.07 01:28
Оценка:
Это то в принципе понятно что руками можно, хотелось бы програмными средствами есть у кого работающий пример установки-запуска службы с настраиванием политики безопасности.

Спасибо
Re: Windows Service
От: DarkSmile  
Дата: 05.10.07 05:49
Оценка:
Здравствуйте, Аноним, Вы писали:


попробуй LocalSystem
Re[2]: Windows Service
От: Аноним  
Дата: 05.10.07 06:40
Оценка:
Пробовал:

LocalSystem
LocalService
NetworkService

При User тербует авторизацию, ввожу правильный логин пароль — тогда служба запускается.

Но мне нужно, что была LocalService (по логике работы)
Re[2]: Windows Service
От: _d_m_  
Дата: 05.10.07 06:42
Оценка:
Здравствуйте, DarkSmile, Вы писали:

DS>Здравствуйте, Аноним, Вы писали:


DS>попробуй LocalSystem


Разговор двух подруг:
— Тань, а ты тампаксы пробовала?
— Пробовала, мне сникерсы больше нравятся.

Re[3]: Windows Service
От: _d_m_  
Дата: 05.10.07 06:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Это то в принципе понятно что руками можно, хотелось бы програмными средствами есть у кого работающий пример установки-запуска службы с настраиванием политики безопасности.


ServiceController[] services = ServiceController.GetServices();

            foreach (ServiceController service in services)
            {
                if (service.DisplayName == "RemoteAdmin")
                {
                    if (service.Status != ServiceControllerStatus.Running)
                    {
                        service.Start();

                        Console.WriteLine("Service RemoteAdmin start");
                        Console.WriteLine("For quit press any key ...");
                        Console.ReadKey();
                    }
                }                
            }

Программа установки запускается под аккаунтом пользователя и соответсвенно с привилегиями этого аккаунта. Так вот, если пользователь имеет привилегию менять политики безопасности, то с вероятностью 99.9% он имеет привилегию запускать службы. И наоборот — если пользователь не имеет привилегию запускать службу, то навряд ли он сможет что-либо изменить в политиках безопасности, будь то стандартные средства администрирования, будь то самописные тулзы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.