首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

打造專屬 IP 切換工具:結合 netsh 與 Process 實現一鍵網路環境切換

     編輯:關於C#

專案背景

頻繁在公司、客戶端、家庭間移動,需反覆修改 IP、子網路遮罩、預設閘道、DNS。手動操作「網路連線」介面步驟繁瑣,開發一個 WinForms 小工具,下拉選單選擇預設配置,一鍵套用。

核心架構:批次檔 + Process 啟動


┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  WinForms   │────▶│  批次檔     │────▶│  netsh.exe  │
│  介面選擇   │     │  組裝參數   │     │  系統工具   │
└─────────────┘     └─────────────┘     └─────────────┘

步驟 1:撰寫 netsh 批次檔範本

以記事本建立 home.bat:

@echo off
echo 正在切換至家庭環境...
netsh interface ip set address "區域連線" static 192.168.1.100 255.255.255.0 192.168.1.1 1
netsh interface ip set dns "區域連線" static 8.8.8.8
echo 完成!按任意鍵關閉...
pause
  • static 表示靜態 IP;依序為 IP、遮罩、閘道、度量
  • 介面名稱:中文系統為「區域連線」,英文為「Local Area Connection」
  • 需系統管理員權限執行

步驟 2:WinForms 介面與檔案掃描


public partial class MainForm : Form
{
    private const string ConfigFolder = @"config\";

    public MainForm()
    {
        InitializeComponent();
        LoadConfigs();
    }

    private void LoadConfigs()
    {
        string path = Path.Combine(Application.StartupPath, ConfigFolder);
        if (Directory.Exists(path))
        {
            foreach (var file in Directory.GetFiles(path, "*.bat"))
            {
                cboProfiles.Items.Add(Path.GetFileNameWithoutExtension(file));
            }
            if (cboProfiles.Items.Count > 0) cboProfiles.SelectedIndex = 0;
        }
    }
}

步驟 3:Process 啟動批次檔(需管理員權限)


private void btnApply_Click(object sender, EventArgs e)
{
    if (cboProfiles.SelectedItem == null) return;

    string batPath = Path.Combine(Application.StartupPath, ConfigFolder,
                                  cboProfiles.SelectedItem + ".bat");

    if (!File.Exists(batPath))
    {
        MessageBox.Show("找不到設定檔!");
        return;
    }

    var psi = new ProcessStartInfo
    {
        FileName = batPath,
        UseShellExecute = true,          // 必須為 true 才能觸發 UAC 提升權限
        Verb = "runas",                  // 要求以系統管理員身分執行
        WindowStyle = ProcessWindowStyle.Normal
    };

    try
    {
        Process.Start(psi);
    }
    catch (Exception ex)
    {
        MessageBox.Show($"啟動失敗:{ex.Message}");
    }
}

關鍵點:UseShellExecute=true + Verb="runas" 才能正確提權執行 netsh。

進階功能擴充

  • 動態新增設定檔:表單輸入 IP/遮罩/閘道/DNS → 自動產生 .bat → 重新整理下拉選單
  • 目前網路狀態顯示:呼叫 netsh interface ip show config 解析輸出
  • DHCP/靜態切換:netsh interface ip set address "名稱" dhcp
  • 多網卡支援:掃描 NetworkInterface.GetAllNetworkInterfaces() 讓使用者選擇目標介面

部署與使用

  1. 建置專案輸出 IPHelper.exe
  2. 同目錄建立 config\ 資料夾,放入 company.bat、home.bat、client.bat
  3. 以系統管理員身分執行 IPHelper.exe
  4. 選擇配置 → 按「套用」 → 完成

總結

此方案利用 Windows 內建 netsh 確保相容性,透過 Process.Start 跨程序執行,以最少程式碼解決實際痛點。同樣架構可擴充至任何命令列工具自動化(如 ipconfig、diskpart、robocopy 等)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved