C#からIISの操作 (WMI編)
適当なのはこっちも一緒
・WMIを使ってる。
・ローカルマシンのIISをいじることしか考えていない
・仮想ディレクトリを作ったら、ついでにASP.NET2.0を有効にしている
using System; using System.Collections.Generic; using System.Text; using System.Management; namespace xxx { public class IisWmiController :IIisContoller { private string siteId_; private bool stopComplete_; private bool startComplete_; private bool deleteComplete_; private bool createComplete_; //仮想ディレクトリの作成 public void CreateVirdir(string virdirName, string dir) { ConnectionOptions co = new ConnectionOptions(); string mn = "localhost"; ManagementScope ms = new ManagementScope(@"\\" + mn + @"\root\MicrosoftIISV2", co); ms.Connect(); ManagementPath mp = new ManagementPath("IIsWebVirtualDirSetting"); ManagementClass mc = new ManagementClass(ms, mp, null); ManagementObject virDir = mc.CreateInstance(); virDir.Properties["Name"].Value = siteId_ + "/Root/" + virdirName; virDir.Properties["Path"].Value = dir; virDir.Put(); CreateVirdirInternal(virdirName, dir); for (int i = 0; i < value = "False" value =" virdirName;" value =" 1073741886;" createcomplete_ =" false;" mn = "localhost" co =" new" ms =" new" searcher =" new" name =" '" createmoo =" new" svc =" searcher.Get();" createcomplete_ =" true;" i =" 0;" deletecomplete_ =" false;" mn = "localhost" co =" new" ms =" new" searcher =" new" name =" '" deletemmo =" new" svc =" searcher.Get();" deletecomplete_ =" true;" mn = "localhost" co =" new" ms =" new" searcher =" new" name =" '" virdir =" searcher.Get();"> 0; } //匿名アカウントの取得 public string GetAnonymousUserName() { string mn = "localhost"; ConnectionOptions co = new ConnectionOptions(); ManagementScope ms = new ManagementScope(@"\\" + mn + @"\root\MicrosoftIISV2", co); ManagementObjectSearcher searcher = new ManagementObjectSearcher( ms, new ObjectQuery("SELECT AnonymousUserName FROM IIsWebServerSetting Where Name = '" + siteId_ + "'"), null); ManagementObjectCollection setting = searcher.Get(); foreach (ManagementObject mo in setting) { return (string)mo.Properties["AnonymousUserName"].Value; } return string.Empty; } //Webサイトのルートディレクトリを取得 public string GetRootPath() { string mn = "localhost"; ConnectionOptions co = new ConnectionOptions(); ManagementScope ms = new ManagementScope(@"\\" + mn + @"\root\MicrosoftIISV2", co); ManagementObjectSearcher searcher = new ManagementObjectSearcher( ms, new ObjectQuery("SELECT Path FROM IIsWebVirtualDirSetting Where Name = '" + siteId_ + "/Root'"), null); ManagementObjectCollection setting = searcher.Get(); foreach (ManagementObject mo in setting) { return (string)mo.Properties["Path"].Value; } return string.Empty; } //Webサイトの一覧を取得 public WebSiteInfo[] GetWebSiteInfo() { //string mn = System.Environment.MachineName; List<websiteinfo> list = new List<websiteinfo>(); string mn = "localhost"; ConnectionOptions co = new ConnectionOptions(); ManagementScope ms = new ManagementScope(@"\\" + mn + @"\root\MicrosoftIISV2", co); ManagementObjectSearcher searcher = new ManagementObjectSearcher(ms, new ObjectQuery("SELECT name FROM IIsWebServer"), null); ManagementObjectCollection sites = searcher.Get(); foreach (ManagementObject mo in sites) { string id = mo.Properties["Name"].Value.ToString(); list.Add(new WebSiteInfo( id, GetWebSiteComment(id))); } return list.ToArray(); } private string GetWebSiteComment(string name) { //string mn = System.Environment.MachineName; string mn = "localhost"; ConnectionOptions co = new ConnectionOptions(); ManagementScope ms = new ManagementScope(@"\\" + mn + @"\root\MicrosoftIISV2", co); ManagementObjectSearcher searcher = new ManagementObjectSearcher( ms, new ObjectQuery("SELECT ServerComment FROM IIsWebServerSetting Where Name = '" + name + "'"), null); ManagementObjectCollection comments = searcher.Get(); foreach (ManagementObject mo in comments) { return (string)mo.Properties["ServerComment"].Value; } return string.Empty; } //操作するWebサイトをセット public void SetControlWebsiteId(string siteId) { siteId_ = siteId; } //IISの開始 public void Start() { StartInternal(); for (int i = 0; i < 60; i++) { lock (this) { if (startComplete_) { return; } } System.Threading.Thread.Sleep(1000); } } private void StartInternal() { startComplete_ = false; string mn = "localhost"; ConnectionOptions co = new ConnectionOptions(); ManagementScope ms = new ManagementScope(@"\\" + mn + @"\root\MicrosoftIISV2", co); ManagementObjectSearcher searcher = new ManagementObjectSearcher( ms, new ObjectQuery("SELECT * FROM IIsWebServer Where Name = '" + siteId_ + "'"), null); ManagementOperationObserver stopmoo = new ManagementOperationObserver(); stopmoo.Completed += new CompletedEventHandler(startmoo_Completed); ManagementObjectCollection svc = searcher.Get(); foreach (ManagementObject mo in svc) { mo.InvokeMethod(stopmoo, "Start", null); return; } } void startmoo_Completed(object sender, CompletedEventArgs e) { lock (this) { startComplete_ = true; } } //IISの停止 public void Stop() { StopInternal(); for (int i = 0; i < 60;i++) { lock (this) { if (stopComplete_) { return; } } System.Threading.Thread.Sleep(1000); } } private void StopInternal() { stopComplete_ = false; string mn = "localhost"; ConnectionOptions co = new ConnectionOptions(); ManagementScope ms = new ManagementScope(@"\\" + mn + @"\root\MicrosoftIISV2", co); ManagementObjectSearcher searcher = new ManagementObjectSearcher( ms, new ObjectQuery("SELECT * FROM IIsWebServer Where Name = '" + siteId_ + "'"), null); ManagementOperationObserver stopmoo = new ManagementOperationObserver(); stopmoo.Completed += new CompletedEventHandler(stopmoo_Completed); ManagementObjectCollection svc = searcher.Get(); foreach (ManagementObject mo in svc) { mo.InvokeMethod(stopmoo, "Stop", null); return; } } void stopmoo_Completed(object sender, CompletedEventArgs e) { lock (this) { stopComplete_ = true; } } } }