最近有個小想法,想要自己作一個Website的Installer
所以在透過程式碼建立IIS站台以及應用程式集區上,就是這個Installer必備的功能了
要透過C#建立IIS站台以及應用程式集區很簡單
程式碼很少也很單純,照著下面的步驟說明以及程式碼進行實作就可以了
1.加入[Microsoft.Web.Administration]的參考
2.建立應用程式集區的程式碼,請透過下面的方式進行建立
// 定義iisManager物件
ServerManager iisManager = new ServerManager();
// 設定AppPool
if (!IsApplicationPoolExists([應用程式集區的名稱]))
{
ApplicationPool objPool = iisManager.ApplicationPools.Add([應用程式集區的名稱]);
// Runtime的版本有分兩種,v2.0與v4.0
objPool.ManagedRuntimeVersion = [應用程式集區Runtime版本];
iisManager.CommitChanges();
}
/// <summary>
/// 確認應用程式集區是否存在
/// </summary>
/// <param name="strAppPool">應用程式集區</param>
/// <returns></returns>
public bool IsApplicationPoolExists(string strAppPool) => iisManager.ApplicationPools.Where(x => x.Name == strAppPool).Any();
3.建立Website站台的方式,程式碼就比較多一點,不過還是很好理解的
// 定義iisManager物件
ServerManager iisManager = new ServerManager();
// 確認IIS站台是否有相同名稱或是相同的Port
string strWebsite = [站台名稱];
string strAppPool = [應用程式集區名稱];
string strHostName = [Host名稱 (option)];
string strIP = [使用IP (option)];
string strBindingInfo = strIP + $":{txtPort.Value}:" + strHostName;
// 確認站台是否存在
if (!IsWebsiteExists(strWebsite))
{
Site mySite = iisManager.Sites.Add(strWebsite, "http", strBindingInfo, [站台對應的實體路徑]);
mySite.ApplicationDefaults.ApplicationPoolName = strAppPool;
iisManager.CommitChanges();
}
/// <summary>
/// 確認網站名稱是否存在
/// </summary>
/// <param name="strWebsite">站台名稱</param>
/// <returns></returns>
public bool IsWebsiteExists(string strWebsite)=> iisManager.Sites.Where(x => x.Name == strWebsite).Any();
由於這個應用程式在建立站台時需要Administrator的權限,所以在執行這個應用程式時就必須以系統管理員的角色啟動,所以必須要再專案中加入下面的內容
3.於專案中加入[應用程式資訊清單檔案],預設為app.manifest
4.開啟app.manifest,並將[requestedExecutionLevel]的Level更改為[requireAdministrator]
5.當執行應用程式的時候,會跳出更高權限認證的請求,這時候只要重新啟動Visual Studio就可以了正常執行了
透過C#撰寫管理IIS的程式碼,不用再像以前一樣必須去呼叫WMI的API,現在已經有很好用的類別庫可以使用,對於軟體佈署與更新就能夠有更大的自主性與彈性了
參考資料
[C#] [WinForm] 強迫使用系統管理員(administrator)開啟程式
Microsoft.
Create an application pool that uses .NET 4.0