Здесь есть пара вещей, на которые стоит обратить внимание, и я думаю, что вы, возможно, не понимаете некоторые аспекты служб Windows:
OnStart
неместо для размещения любой логики.Это событие есть, чтобы вы могли инициализировать службу.Например, запуск фонового рабочего потока, который будет выполнять основную логику службы и отвечать на внешние запросы.Например - запуск прослушивателя TCP или инициализация .NET Remoting или WCF.
OnStart
вызывается только один раз при запуске службы.
OnStart
должен вернуться в течение 30 секунд, хотя ваш код инициализации может запросить дополнительное время .
Вы вызываете PowerShell и надстройку WebAdministration длясоздавать сайты.Хотя это выполнимо, это неуклюже, возможно, вам следует подумать о вызове непосредственно в управляемый API IIS7:
Microsoft.Web.Administration Namespace
Вот пример создания сайта с использованием управляемого API:
using (ServerManager serverManager = new ServerManager())
{
Site site = serverManager.Sites.Add("My Web Site", "C:\\inetpub\\wwwroot\test", 80);
site.Bindings.Clear();
site.Bindings.Add("*:8080:", "http");
serverManager.CommitChanges();
}
Следует также отметить, что любые задачи по настройке, выполняемые в IIS, требуют, чтобы учетная запись, выполняющая это, имела повышенные привилегии, т.е. была администратором или, если этослужба запускается под учетной записью SYSTEM
.