2011-06-29 18 views
8

C++/C/c#程序中的程序如何更改Windows中的hosts文件內容? 我知道這聽起來像網絡釣魚,說實話不。如何更改Windows程序中的hosts文件?

+2

「他的promittion」是什麼意思?另外...你爲什麼想這樣做? –

+2

英語中,請嗎? – Jon

+0

你不想這樣做,請閱讀使用DNS解析主機名 – Alex

回答

4

hosts文件只是純文本。格式是每行包含IP和IP應解析到的主機名,用空格分隔。 #表示評論。

實施例:C:\Windows\system32\drivers\etc\hosts

# This is a comment- 
127.0.0.1 mysuperhost.com 

該文件位於這裏。您將(有充分的理由)需要管理員權限來寫入。

8

該文件通常位於C:\Windows\System32\drivers\etc\hosts。儘管如此,您應該使用Environment.GetEnvironmentVariable("SystemRoot")安全地確定系統根目錄,而不是硬編碼C:\Windows部分。

否則,您可以像寫入任何其他文件一樣寫入它,前提是您擁有適當的權限。

10

Hosts文件中有一個非常簡單的格式,其中每行可能含有「IP主機」記錄

所有你需要的是普通文件追加:

using (StreamWriter w = File.AppendText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "drivers/etc/hosts"))) 
{ 
    w.WriteLine("123.123.123.123 FQDN"); 
} 

要注意的是在默認情況下,你需要提升的權限寫入主機文件...

爲了恢復,最好備份文件並在完成後恢復。

+0

如何在需要時刪除條目? – Volatil3

11

首先,您應該要求請求以獲得用戶的管理權限。您可以在應用程序中通過您的Program課程來完成。下面的代碼將要求用戶進行管理訪問,然後用戶可以選擇允許或拒絕它。如果他們否認它,這個例子不運行該應用程序。

一旦您的應用程序在管理模式下運行,其純文本格式簡單。你甚至不需要包含在文件中的所有微軟評論,簡單的字符串解析就可以。在HOSTS文件中MSFT的評論是你真正需要的所有文件,只要HOSTS文件本身就是這樣。

namespace Setup { 
    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Windows.Forms; 
    using Setup.Forms; 
    using System.Security.Principal; 
    using System.Diagnostics; 

    static class Program { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 

      WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); 
      bool administrativeMode = principal.IsInRole(WindowsBuiltInRole.Administrator); 

      if (!administrativeMode) { 
       ProcessStartInfo startInfo = new ProcessStartInfo(); 
       startInfo.Verb = "runas"; 
       startInfo.FileName = Application.ExecutablePath; 
       try { 
        Process.Start(startInfo); 
       } 
       catch { 
        return; 
       } 
       return; 
      } 

      Application.Run(new ShellForm()); 
     } 
    } 
} 
+2

請注意,通過在此處複製您的代碼,它將在CC-Wiki下有效發佈。版權塊是無效的。不確定是否要刪除版權區塊或整個答案.... –

+0

我擁有DCOM Productions,我只是複製了文件的全部內容以便快速回答。無論哪種方式都沒有關係,只是用它來給他一個解決他的問題的方法。如果我不想讓他使用我根本不會發布的代碼。 ;) –

+0

好的。 :)只是不想讓你無意中在比你想要的限制較少的許可下釋放你的IP。 –

3

找到HOSTS文件位置的最準確的方法是閱讀HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath註冊表項,並附加hosts到底。

這將始終指向當前機器配置的正確位置,並適用於自Windows NT 4.0以來的所有基於Windows NT的平臺。

+0

不幸的是,對於更現代的操作系統似乎並不是這樣。特別是在Windows 7上,如果更改DataBasePath值,它將不會使用新位置。 –

+2

更改值是否會影響它(或者如果Microsoft甚至支持這樣做)不是問題。 問題是如何編輯當前主機文件,我只是給出了找到所述文件的最可靠的方法。 (假設你沒有在註冊表中搞亂)。 對於給定的目的,這種方法是有效的從Windows NT 4.0直到幷包括Windows 8.1 Update 1 –

0

作爲一個努力解決這個問題的人,簡單的解決辦法是,將主機文件複製到臨時文件夾中,修改它並將其複製並覆蓋。以管理員身份運行應用程序將是最好的。

+0

...這個答案就像去汽車維修論壇和告訴OP,「簡單的出路是開始步行到達目的地,而不是固定你的車。」 – Shadoninja

相關問題