Проблема с установкой службы Windows с помощью AssemblyInstaller - PullRequest
3 голосов
/ 30 декабря 2010

@ Марк Гравелл привел отличный пример того, как установить Службу Windows здесь . Я пошел и реализовал это, и все было хорошо.

Затем я перезагрузил компьютер ... и внезапно я начал получать исключения безопасности, когда пытался установить! Я получаю SecurityException: «Запрошенный доступ к реестру не разрешен». Я подумал, может быть, проблема началась с перезагрузки, поэтому, как в мультфильмах, где второй удар по голове излечивает амнезию, я попытался перезагрузиться снова ... но оказывается, что жизнь не похожа на мультфильмы ...: (

ОК, поэтому я решил проблему и нашел предложения по предоставлению прав на ключ реестра HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog моей сетевой службе. Это тоже не сработало. Я дал все права всем - и уРА! Теперь я получаю другое исключение! InvalidOperationException: «Невозможно открыть Service Control Manager на компьютере». 'Для этой операции могут потребоваться другие права. " (Внутреннее исключение Win32Exception: «Доступ запрещен».) Извините? Я пытаюсь установить на локальный компьютер! Что там делает «компьютер»?

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

Вот мой код, который выполняет установку (скопировано и адаптировано из образца Марка Гравелла):

using (var inst = new AssemblyInstaller(typeof(MyNamespace.Program).Assembly, new string[] { })) {
  IDictionary state = new Hashtable();
  inst.UseNewContext = true;
  try {
    if (uninstall) {
      inst.Uninstall(state);
    } else {
      inst.Install(state);
      inst.Commit(state);
    }
  } catch {
    try {
      inst.Rollback(state);
    } catch { }
    throw;
  }
}

Код установщика:

[RunInstaller(true)]
public sealed class MyServiceInstallerProcess : ServiceProcessInstaller {
  public MyServiceInstallerProcess() {
    this.Account = ServiceAccount.NetworkService;
  }
}

[RunInstaller(true)]
public sealed class MyServiceInstaller : ServiceInstaller {
  public MyServiceInstaller() {
    this.Description = "My service desc";
    this.DisplayName = "My service name";
    this.ServiceName = "My service name";
    this.StartType = ServiceStartMode.Automatic;
  }
}

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

1 Ответ

8 голосов
/ 30 декабря 2010

Запустите ваш установщик как администратор / с повышенными привилегиями.Предоставить всем доступ к системному ключу реестра и прочему ОЧЕНЬ НЕПРАВИЛЬНО.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...