我们正在开发SaaS解决方案,并希望自动创建和删除系统实例。此过程的一个步骤是删除IIS站点,但事实证明它非常困难。
问题是我们为所有站点使用通配符SSL证书,如果您尝试以正常方式删除站点的HTTPS绑定,它将删除所有站点的绑定。这是因为绑定有两个组件,其中一个组件在所有站点之间共享。这就是IIS的工作原理。根据网络,你可以通过手动编辑applicationHost文件或使用appcmd.exe控制台应用删除网站来解决这个问题,因为它不使用IIS所依赖的WMA API。
我正在尝试开始工作的解决方案是从我的管理网站中运行命令行应用程序,但我已经碰壁了。下面的代码显示了我正在尝试做的事情,但我总是得到ERROR_NOT_FOUND的错误代码1168。我不确定这意味着什么,但是如果我直接在控制台中运行相同的命令,它会按预期工作。
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);
}
}
}
所以问题是三重的。是否有更好的整体解决方案(必须完全自动化)?如果没有,我在上面的代码中做错了什么?如果所有其他方法都失败了,我可以做些什么来调试控制台应用程序中的错误代码?