none
Службы Windows RRS feed

  • Вопрос

  • Доброго времени суток. Подскажите такой вопрос, пожалуйста. Служба Windows спокойно работает в Windows XP, но не хочет даже устанавливаться в Windows 8.1. Пишет что нет привилегий на установку службы, хотя установщик запущен от имени администратора. Установщик адванс инсталлер. Кто занимается разработкой служб под Windows 8 и выше подскажите что и где искать и какие изменения в процесс разработки нужно внести.  Все ссылки на сайте тут старые и прочитаны давно.

    Спасибо.

    15 января 2014 г. 19:35

Ответы

  • Сам дурак. Не указал все нужные модулям ДЛЛ во время сборки установщика. Все работает. Спасибо всем, кто откликнулся.

    • Помечено в качестве ответа Little_Cat_2003 6 февраля 2014 г. 18:38
    6 февраля 2014 г. 18:38

Все ответы

  •  хотя установщик запущен от имени администратора.

    В Win8-8.1 контроль учетных записей не отключается совсем (отключить, конечно, можно, но тогда не будут работать приложения для магазина). Поэтому важно, как запускается установщик. Если просто двойным щелчком, то всех прав он может и не получить. Попробуйте нажать правую кнопку и выбрать пункт "Запуск от имени администратора".
    16 января 2014 г. 12:15
  • Спасибо за ваше внимание к теме.  Получается следующая проблема. Служба создана с использованием Autofac. При этом используется MEF для разделения ее на отдельные компоненты. Служба  -клиент сервера OPC, и так как задолбался переписывать парсеры конфиг файлов  и репозитории то решил разделить ее таким способом. В Autofac используется MEF Integration библиотека. Пример:

    Модуль 1
    
          [Export(typeof(IClass1))]
          public class Class1 : IClass1
          {
                public void Show()
                {
                      Console.WriteLine("Hallo from Class1");
                }
          }
    
    Модуль 2
    
          [Export(typeof(IClass2))]
          public class Class2 : IClass2
          {
                public void Show()
                {
                      Console.WriteLine("Hallo from Class2");
                }
          }
    
    Классы интеграции в приложение-пример
          class Program
          {
                private static IContainer Container { get; set; }
    
                static void Main(string[] args)
                {
    
                      // Create your builder.
                      var builder = new ContainerBuilder();
    
                      /** ищем модули */
                      var catalog = new DirectoryCatalog(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\modules", "*Module.dll");
    
                      /** регистрируем найденные модули */
                      builder.RegisterComposablePartCatalog(catalog);
    
                      
                      builder.RegisterType<MyClass>().As<IMyClass>().SingleInstance();
    
                      Container = builder.Build();
    
                      var cls = Container.Resolve<IMyClass>();
    
                      cls.Show();
    
                      Console.WriteLine("Class ready. Press Enter");
                      Console.ReadKey(true);
                }
          }
    
    
          class MyClass: IMyClass
          {
                private readonly IClass1 _class1;
                private readonly IClass1 _class3;
    
    
                private readonly IClass2 _class2;
                private readonly IClass2 _class4;
    
                public MyClass(IClass1 class1, IClass2 class2)
                {
                      _class1 = class1;
                      _class2 = class2;
    
                      _class3 = class1;
                      _class4 = class2;
                }
    
                public void Show()
                {
                      _class1.Show();
                      
                      Console.WriteLine("Class1 ready. Press Enter");
                      Console.ReadKey(true);
    
                      _class2.Show();
                      
                      Console.WriteLine("Class1 ready. Press Enter");
                      Console.ReadKey(true);
                }
          }
    
          internal interface IMyClass
          {
                void Show();
          }


    немного много кода, но пытаюсь обьяснить свою мысль. В этом тестовом консольном приложении все работает замечательно. Так-же организован сервис. В тестовом запуске из студии с использованием Service.Helper ( рекомендую - классная штука из NuGet) все работает. Но вот боевой сервис установленный в систему не запускается. Как я понял местом приткновения является именно инициализация модулей MEF. Вот в этом месте 

    /** регистрируем найденные модули */
    builder.RegisterComposablePartCatalog(catalog);

    Служба не может загрузить ниодного модуля. Нет доступа к каталогу. Вопрос к тем, кто сталкивался - с удовольствием выслушаю критику и рекомендации по организации службы модулями, если мой пример неверен. Но что делать в данном конкретном случае не могу понять. Помогите, кто сталкивался. Спасибо.


    18 января 2014 г. 11:16
  • Сам дурак. Не указал все нужные модулям ДЛЛ во время сборки установщика. Все работает. Спасибо всем, кто откликнулся.

    • Помечено в качестве ответа Little_Cat_2003 6 февраля 2014 г. 18:38
    6 февраля 2014 г. 18:38