Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инсталяция windows службы, Разрешить взаимодействие с рабочим столо 
:(
    Опции темы
markowww
Дата 22.11.2006, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 27.2.2003
Где: В Вологде-где

Репутация: нет
Всего: нет



Пишу службу на C#. Добавил в проект инсталлятор, служба работает под аккаунтом LocalSystem. В виндовой консоли services.msc есть такая фишка: разрешить взаимодействие с рабочим столом. Если она не включена, то служба не сможет запускать оконные приложения, точнее запускать сможет, но без окна ;) Вопрос в том, как с помощью студийного инсталлятора включить эту опцию?
PM MAIL   Вверх
mr.DUDA
Дата 22.11.2006, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Добавить обработчик на событие Commited объекта ServiceProcessInstaller и отредактировать нужный флаг с пом. WMI-класса Win32_Service.DesktopInteract


--------------------
user posted image
PM MAIL WWW   Вверх
markowww
Дата 22.11.2006, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 27.2.2003
Где: В Вологде-где

Репутация: нет
Всего: нет



4 часа читал всякую документацию и родил следующее
Код

      private void serviceProcessInstaller1_Committed(object sender, InstallEventArgs e)
      {
         ManagementObjectSearcher Services = new ManagementObjectSearcher(new SelectQuery("Win32_Service"));

         foreach (ManagementObject Service in Services.Get())
            if (Service["Name"] == "MyService")
            {

               object[] args = new object[11];
               args[0] = Service["DisplayName"];
               args[1] = Service["PathName"];
               args[2] = Service["ServiceType"];
               args[3] = Service["ErrorControl"];
               args[4] = Service["StartMode"];
               args[5] = true;
               args[6] = Service["StartName"];
               args[7] = Service["StartPassword"];
               args[8] = Service["LoadOrderGroup"];
               args[9] = Service["LoadOrderGroupDependencies"];
               args[10] = Service["ServiceDependencies"];

               Service.InvokeMethod("change", args);

            }
      }


Эффект нулевой, хотя ошибки тоже нет. Что не так?

Это сообщение отредактировал(а) markowww - 22.11.2006, 23:58
PM MAIL   Вверх
mr.DUDA
Дата 23.11.2006, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Проверил, всё работает если:

1. В свойствах serviceProcessInstaller (в дизайнере) поставить Account = LocalSystem, т.к. для других типов входа в систему флаг "взаимодействие с рабочим столом" просто недоступен;
2. Код переписать так:

Код
        private void serviceInstaller1_Committed(object sender, InstallEventArgs e)
        {
            string serviceName = "Service1"; // изменить на display name (отображаемое имя) сервиса
            ManagementObjectSearcher ms = new ManagementObjectSearcher("SELECT * FROM Win32_Service WHERE DisplayName = '" + serviceName + "'");
            foreach (ManagementObject mo in ms.Get())
            {
                ManagementBaseObject inParams = mo.GetMethodParameters("Change");
                inParams["DesktopInteract"] = true;
                mo.InvokeMethod("Change", inParams, null);
                break;
            }
        }



--------------------
user posted image
PM MAIL WWW   Вверх
markowww
Дата 23.11.2006, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 27.2.2003
Где: В Вологде-где

Репутация: нет
Всего: нет



Премного благодарен!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0427 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.