首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

WinForm 打包 ASP.NET 網站:實現 IIS 部署與卸載一體化安裝程式

     編輯:程式設計綜合問答

需求背景

開發一個 WinForm 安裝程式,功能包含:

  1. 一鍵將 ASP.NET (B/S) 專案部署到本機 IIS(建立網站、應用程式池、虛擬目錄、權限設定)。
  2. 安裝資料庫(建立 DB、執行 SQL 腳本)。
  3. **新增需求**:提供「卸載」功能,移除 IIS 網站、刪除安裝檔案、Drop 資料庫。

核心技術點

1. IIS 程式化操作

使用 Microsoft.Web.Administration (nuget: Microsoft.Web.Administration) 操作 IIS 設定存儲 (applicationHost.config)。

using Microsoft.Web.Administration;

public void CreateIisSite(string siteName, string physicalPath, string appPoolName, int port) {
    using (ServerManager sm = new ServerManager()) {
        // 1. 應用程式池
        if (sm.ApplicationPools[appPoolName] == null) {
            var pool = sm.ApplicationPools.Add(appPoolName);
            pool.ManagedRuntimeVersion = "v4.0";
            pool.ManagedPipelineMode = ManagedPipelineMode.Integrated;
            sm.CommitChanges();
        }
        // 2. 網站
        if (sm.Sites[siteName] == null) {
            var site = sm.Sites.Add(siteName, "http", $"* :{port}:", physicalPath);
            site.ApplicationDefaults.ApplicationPoolName = appPoolName;
            // 權限:給 IIS_IUSRS 讀取權限
            setFolderPermissions(physicalPath, "IIS_IUSRS", FileSystemRights.ReadAndExecute);
            sm.CommitChanges();
        }
    }
}

public void RemoveIisSite(string siteName, string appPoolName) {
    using (ServerManager sm = new ServerManager()) {
        var site = sm.Sites[siteName];
        if (site != null) {
            sm.Sites.Remove(site);
            sm.CommitChanges();
        }
        var pool = sm.ApplicationPools[appPoolName];
        if (pool != null && pool.Applications.Count == 0) { // 僅無其他應用時刪除
            sm.ApplicationPools.Remove(pool);
            sm.CommitChanges();
        }
    }
}

2. 資料庫卸載

直接執行 DROP DATABASE [DbName],需確保無活動連線:

public void DropDatabase(string connStr, string dbName) {
    using (var conn = new SqlConnection(connStr)) {
        conn.Open();
        // 1. 設定單用戶模式強制斷開連線
        using (var cmd = conn.CreateCommand()) {
            cmd.CommandText = $@"
                ALTER DATABASE [{dbName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
                DROP DATABASE [{dbName}];";
            cmd.ExecuteNonQuery();
        }
    }
}

3. 檔案清理

public void DeleteInstallFolder(string path) {
    if (Directory.Exists(path)) {
        // 避免檔案被佔用,先嘗試釋放
        Directory.Delete(path, true); // 遞歸刪除
    }
}

安裝程式架構建議

  • 介面:兩個 Tab/按鈕 ——「安裝」、「卸載」。
  • 狀態持久化:安裝時將關鍵資訊(網站名、應用程式池名、實體路徑、DB 連線字串、安裝資料夾)寫入登錄表或 JSON 設定檔,卸載時讀取。
  • 權限:安裝/卸載**必須以系統管理員身分執行**(Manifest 設定 requireAdministrator)。
  • 交易性:安裝任一步驟失敗 → 回滾(刪除已建立的 IIS 站點、資料夾、資料庫)。

參考資源

注意事項

  1. IIS 操作需引用 %windir%\\system32\\inetsrv\\Microsoft.Web.Administration.dll 或 NuGet 安裝。
  2. 卸載時先停用網站再刪除,避免檔案鎖定。
  3. 資料庫 Drop 前備份確認,生產環境嚴禁直接 Drop。
  4. 測試環境建議使用獨立應用程式池,避免影響其他站點。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved