Мы работаем над решением SaaS и хотели бы автоматизировать создание и удаление системных экземпляров. Одним из шагов в этом процессе является удаление сайта IIS, но это оказалось довольно сложным.
Проблема заключается в том, что мы используем подстановочный SSL-сертификат для всех сайтов, и если вы попытаетесь удалить привязку HTTPS для сайта обычным способом, она удалит привязку для всех сайтов. Это связано с тем, что привязка имеет два компонента, один из которых используется всеми сайтами. Так работает IIS. Согласно Интернету, вы можете решить эту проблему, отредактировав файл applicationHost вручную или с помощью консольного приложения appcmd.exe для удаления сайта, поскольку он не использует API-интерфейс WMA, на который опирается IIS.
Решением, которое я пытаюсь заставить работать, является запуск приложения командной строки на моем административном веб-сайте, но я столкнулся с проблемой. Следующий код показывает, что я пытаюсь сделать, но я всегда получаю код ошибки 1168 для ERROR_NOT_FOUND. Я не уверен, что это значит, но если я запускаю ту же команду прямо в консоли, она работает как положено.
internal void DeleteSite(string iisName)
{
// Impersonation of system admin user
using (Permission.Elevate())
{
ProcessStartInfo start = new ProcessStartInfo();
start.Arguments = string.Format(@"delete site ""{0}""", iisName);
start.FileName = @"C:\Windows\System32\inetsrv\appcmd.exe";
start.WindowStyle = ProcessWindowStyle.Hidden;
start.CreateNoWindow = true;
using (Process proc = Process.Start(start))
{
proc.WaitForExit();
var exitCode = proc.ExitCode;
if (exitCode > 0)
throw new Exception("Error code " + exitCode);
}
}
}
Итак, вопрос в три раза. Есть ли лучшее общее решение (должно быть полностью автоматизировано)? Если нет, что я делаю не так в приведенном выше коде? И если ничего не помогает, что я могу сделать для отладки кодов ошибок из консольных приложений в целом?