@ Марк Гравелл привел отличный пример того, как установить Службу 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;
}
}
Что здесь может быть не так? И почему все вдруг начало ухудшаться после того, как они заранее заработали?