91网首页-91网页版-91网在线观看-91网站免费观看-91网站永久视频-91网站在线播放

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

【C#】自動檢測Windows Server服務器是否已經安裝并配置IIS管理器的ASP和ASP.NET(.aspx)支持代碼

admin
2025年6月11日 9:19 本文熱度 237

以下是完整的C#代碼,用于Windows Server服務器自動安裝并配置IIS的ASP(經典ASP)和ASP.NET(.aspx)支持。代碼包含功能檢測,只有在未安裝時才執行安裝操作:

using System;

using System.Diagnostics;

using Microsoft.Web.Administration;


class IISFullSupportInstaller

{

    static void Main()

    {

        try

        {

            Console.WriteLine("正在檢測IIS功能安裝狀態...");

            

            bool needRestart = false;

            

            // 安裝缺失的功能

            if (!IsASPInstalled())

            {

                Console.WriteLine("檢測到經典ASP功能未安裝");

                InstallIISFeature("IIS-ASP");

                needRestart = true;

            }

            

            if (!IsASPNETInstalled())

            {

                Console.WriteLine("檢測到ASP.NET功能未安裝");

                InstallIISFeature("IIS-ASPNET45");

                needRestart = true;

            }

            

            // 配置IIS

            if (needRestart)

            {

                Console.WriteLine("需要重啟后繼續配置,按任意鍵重啟計算機...");

                Console.ReadKey();

                RestartComputer();

            }

            else

            {

                ConfigureIIS();

                Console.WriteLine("ASP和ASP.NET支持已成功配置!");

            }

        }

        catch (Exception ex)

        {

            Console.WriteLine($"操作失敗: {ex.Message}");

            Console.WriteLine("請以管理員身份運行此程序");

        }

    }


    // 檢查經典ASP是否已安裝

    static bool IsASPInstalled()

    {

        using (ServerManager serverManager = new ServerManager())

        {

            try

            {

                // 嘗試獲取ASP配置部分,如果拋出異常說明未安裝

                var aspSection = serverManager.GetApplicationHostConfiguration().GetSection("system.webServer/asp");

                return true;

            }

            catch

            {

                return false;

            }

        }

    }


    // 檢查ASP.NET是否已安裝

    static bool IsASPNETInstalled()

    {

        using (ServerManager serverManager = new ServerManager())

        {

            try

            {

                // 檢查.NET Framework處理程序是否存在

                var config = serverManager.GetApplicationHostConfiguration();

                var runtimeSection = config.GetSection("system.webServer/runtime");

                return true;

            }

            catch

            {

                return false;

            }

        }

    }


    // 安裝IIS功能

    static void InstallIISFeature(string featureName)

    {

        ProcessStartInfo startInfo = new ProcessStartInfo

        {

            FileName = "dism.exe",

            Arguments = $"/Online /Enable-Feature /FeatureName:{featureName} /All /NoRestart",

            RedirectStandardOutput = true,

            RedirectStandardError = true,

            UseShellExecute = false,

            CreateNoWindow = true

        };


        using (Process process = new Process { StartInfo = startInfo })

        {

            Console.WriteLine($"正在安裝 {featureName} ...");

            process.Start();

            string output = process.StandardOutput.ReadToEnd();

            string error = process.StandardError.ReadToEnd();

            process.WaitForExit();


            if (process.ExitCode != 0)

            {

                throw new Exception($"{featureName} 安裝失敗 (代碼 {process.ExitCode}): {error}");

            }

            

            if (!output.Contains("操作成功完成"))

            {

                throw new Exception($"{featureName} 安裝未完成: " + output);

            }

            

            Console.WriteLine($"{featureName} 安裝成功");

        }

    }


    // 配置IIS支持ASP和ASP.NET

    static void ConfigureIIS()

    {

        using (ServerManager serverManager = new ServerManager())

        {

            Console.WriteLine("正在配置IIS支持...");

            

            // 1. 配置經典ASP支持

            if (!IsASPConfigured(serverManager))

            {

                Console.WriteLine("配置經典ASP支持");

                ConfigureClassicASP(serverManager);

            }

            

            // 2. 配置ASP.NET支持

            if (!IsASPNETConfigured(serverManager))

            {

                Console.WriteLine("配置ASP.NET支持");

                ConfigureASPNET(serverManager);

            }

            

            // 3. 保存所有更改

            serverManager.CommitChanges();

            Console.WriteLine("配置保存成功");

        }

    }


    // 檢查經典ASP是否已配置

    static bool IsASPConfigured(ServerManager serverManager)

    {

        try

        {

            var config = serverManager.GetApplicationHostConfiguration();

            var restrictions = config.GetSection("system.webServer/security/isapiCgiRestriction").GetCollection();

            

            foreach (var item in restrictions)

            {

                if (item["path"].ToString().EndsWith("asp.dll", StringComparison.OrdinalIgnoreCase) && 

                    (bool)item["allowed"])

                {

                    return true;

                }

            }

            return false;

        }

        catch

        {

            return false;

        }

    }


    // 配置經典ASP

    static void ConfigureClassicASP(ServerManager serverManager)

    {

        var config = serverManager.GetApplicationHostConfiguration();

        

        // 啟用ASP ISAPI擴展

        var isapiSection = config.GetSection("system.webServer/security/isapiCgiRestriction");

        var restrictions = isapiSection.GetCollection();

        

        ConfigurationElement aspExtension = restrictions.CreateElement();

        aspExtension["path"] = @"%windir%\system32\inetsrv\asp.dll";

        aspExtension["allowed"] = true;

        aspExtension["description"] = "ASP Classic Support";

        restrictions.Add(aspExtension);


        // 配置ASP全局設置

        ConfigurationSection aspSection = config.GetSection("system.webServer/asp");

        aspSection["enableParentPaths"] = true;

        aspSection["bufferingOn"] = true;

        aspSection["scriptErrorSentToBrowser"] = true;


        // 為默認網站添加ASP處理程序映射

        Configuration webConfig = serverManager.GetWebConfiguration("Default Web Site");

        ConfigurationSection handlersSection = webConfig.GetSection("system.webServer/handlers");

        ConfigurationElementCollection handlers = handlersSection.GetCollection();


        ConfigurationElement aspHandler = handlers.CreateElement();

        aspHandler["name"] = "ASPClassic";

        aspHandler["path"] = "*.asp";

        aspHandler["verb"] = "GET,HEAD,POST";

        aspHandler["modules"] = "IsapiModule";

        aspHandler["scriptProcessor"] = @"%windir%\system32\inetsrv\asp.dll";

        aspHandler["resourceType"] = "File";

        handlers.Add(aspHandler);

    }


    // 檢查ASP.NET是否已配置

    static bool IsASPNETConfigured(ServerManager serverManager)

    {

        try

        {

            var siteConfig = serverManager.GetWebConfiguration("Default Web Site");

            var handlers = siteConfig.GetSection("system.webServer/handlers").GetCollection();

            

            foreach (var handler in handlers)

            {

                if (handler["path"].ToString() == "*.aspx" && 

                    handler["type"] != null)

                {

                    return true;

                }

            }

            return false;

        }

        catch

        {

            return false;

        }

    }


    // 配置ASP.NET支持

    static void ConfigureASPNET(ServerManager serverManager)

    {

        // 設置應用程序池使用.NET 4.x

        bool poolExists = false;

        foreach (var pool in serverManager.ApplicationPools)

        {

            if (pool.Name == "DefaultAppPool")

            {

                pool.ManagedRuntimeVersion = "v4.0";

                pool.ManagedPipelineMode = ManagedPipelineMode.Integrated;

                pool.AutoStart = true;

                pool.Enable32BitAppOnWin64 = true; // 根據需求設置

                poolExists = true;

                break;

            }

        }


        if (!poolExists)

        {

            ApplicationPool newPool = serverManager.ApplicationPools.Add("DefaultAppPool");

            newPool.ManagedRuntimeVersion = "v4.0";

            newPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;

        }


        // 確保默認網站使用正確的應用程序池

        Site defaultSite = serverManager.Sites["Default Web Site"];

        if (defaultSite != null)

        {

            defaultSite.ApplicationDefaults.ApplicationPoolName = "DefaultAppPool";

            

            // 添加ASP.NET處理程序映射

            Configuration siteConfig = serverManager.GetWebConfiguration("Default Web Site");

            ConfigurationSection handlersSection = siteConfig.GetSection("system.webServer/handlers");

            ConfigurationElementCollection handlers = handlersSection.GetCollection();

            

            // 檢查是否已存在

            bool handlerExists = false;

            foreach (var handler in handlers)

            {

                if (handler["path"].ToString() == "*.aspx")

                {

                    handlerExists = true;

                    break;

                }

            }

            

            if (!handlerExists)

            {

                ConfigurationElement aspxHandler = handlers.CreateElement();

                aspxHandler["name"] = "ASP.NET";

                aspxHandler["path"] = "*.aspx";

                aspxHandler["verb"] = "*";

                aspxHandler["type"] = "System.Web.UI.PageHandlerFactory";

                aspxHandler["resourceType"] = "Unspecified";

                aspxHandler["requireAccess"] = "Script";

                handlers.Add(aspxHandler);

            }

        }

    }


    // 重啟計算機

    static void RestartComputer()

    {

        ProcessStartInfo startInfo = new ProcessStartInfo

        {

            FileName = "shutdown.exe",

            Arguments = "/r /t 0",

            Verb = "runas", // 管理員權限

            UseShellExecute = true

        };


        try

        {

            Process.Start(startInfo);

            Environment.Exit(0);

        }

        catch (Exception ex)

        {

            throw new Exception($"重啟失敗: {ex.Message}\n請手動重啟計算機以完成安裝");

        }

    }

}

代碼功能說明:

1、智能檢測機制

  • IsASPInstalled():檢查經典ASP功能是否安裝

  • IsASPNETInstalled():檢查ASP.NET功能是否安裝

  • IsASPConfigured():檢查ASP是否配置正確

  • IsASPNETConfigured():檢查ASP.NET是否配置正確

2、安裝功能

  • 使用DISM安裝缺失的IIS功能:

  • IIS-ASP:經典ASP支持

  • IIS-ASPNET45:ASP.NET 4.x支持

  • 自動處理安裝結果和錯誤

?3、配置IIS

 經典ASP配置

  • 啟用asp.dll ISAPI擴展

  • 配置父路徑、緩沖和錯誤顯示

  • 添加*.asp處理程序映射

 ASP.NET配置

  • 設置應用程序池使用.NET 4.0

  • 配置集成管道模式

  • 添加*.aspx處理程序映射

  • 確保默認網站使用正確的應用池

4、重啟管理

  • 需要重啟時提示用戶

  • 自動以管理員權限執行重啟

使用說明:

1、項目配置(.csproj文件):

<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0-windows</TargetFramework> <Platforms>x64</Platforms> <RuntimeIdentifier>win10-x64</RuntimeIdentifier> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Web.Administration" Version="11.1.0" /> </ItemGroup></Project>

2、運行要求

  • 必須以管理員身份運行

  • Windows 7/Server 2008 R2或更高版本

  • 需要互聯網連接以下載IIS組件(如果需要)

3、驗證方法

  • 創建測試文件 C:\inetpub\wwwroot\test.asp

<%@ Language=VBScript %>

<% Response.Write("ASP Works! Time: " & Now()) %>

  • 創建測試文件 C:\inetpub\wwwroot\test.aspx

<%@ Page Language="C#" %>

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)

    {

        lblMessage.Text = "ASP.NET Works! Time: " + DateTime.Now;

    }

</script>

<html>

<body>

    <asp:Label ID="lblMessage" runat="server" />

</body>

</html>

  • 訪問以下URL驗證:

  http://localhost/test.asp

  http://localhost/test.aspx

處理流程:

注意事項:

1、重啟要求

  • 安裝IIS組件后需要重啟才能繼續配置

  • 代碼會自動提示重啟,重啟后需再次運行程序完成配置

2、自定義站點

  • 默認配置"Default Web Site"

  • 如需自定義站點,修改代碼中的站點名稱

3、32位支持

  • 默認啟用32位應用支持(Enable32BitAppOnWin64 = true

  • 對于純64位環境,可設置為false

4、錯誤處理

  • 代碼包含詳細錯誤處理

  • 安裝失敗時會顯示具體原因

  • 權限不足時會提示使用管理員身份運行

此代碼提供了完整的端到端解決方案,從檢測、安裝到配置,全面支持ASP和ASP.NET頁面,確保您的網站能同時處理.asp和.aspx文件。

?

相關教程:

C#自動配置Windows Server系統的IIS網站管理器啟用ASP腳本支持[5]
  http://31682.oa22.cn


該文章在 2025/6/17 12:11:03 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 91精品国产亚洲爽 | 午夜免费日韩小电影 | 韩漫画免费观看 | 国产剧情一区二区 | 国产综合激情精品 | 91国产高清视频 | 国产午夜视频 | 国产精品男人的天堂 | 欧洲乱码伦网站 | 日本色5网站 | 国产大片免费线上观 | 日本福利写真影院 | 9亚洲色 | 国产视频一区四区 | 91青青草 | 福利色导航 | 无码精品国产第一区二区 | 欧美午夜激情影院 | 国内成人免费视频 | 日韩性大 | 无码成人| 日本精品专区在线 | 无码av免费一区二区三区 | 国产日产久 | 午夜日韩高清 | 国产一线在线 | 午夜成人精品网站 | 欧美综合激情网 | 国产高清a | 97精品在线| 国产精品一二三四区 | 欧美在线视频播放 | 中文字幕在线观 | 日韩一级中文字幕 | 日本大片免费一级 | 国产三区四区五区 | 国产特黄 | 日本网站在线看 | 国产每日更 | 国产日本韩国欧美 | 三年片免费观 |