2011-06-29 28 views
8

cách chương trình trong chương trình C++/C/C# thay đổi nội dung tệp của máy chủ trong cửa sổ? Tôi biết điều này nghe có vẻ như lừa đảo, thành thật không.Làm cách nào để thay đổi tệp máy chủ trong chương trình cửa sổ?

+2

"Lời hứa của Ngài" có nghĩa là gì? Ngoài ra ... tại sao bạn muốn làm điều đó? –

+2

Bằng tiếng Anh, xin vui lòng? – Jon

+0

bạn không muốn làm điều đó, hãy đọc về cách sử dụng DNS để giải quyết tên máy chủ – Alex

Trả lời

4

Tệp máy chủ chỉ là văn bản thuần túy. Định dạng là mỗi dòng chứa IP và tên máy chủ mà IP cần giải quyết, được phân tách bằng khoảng trắng. # biểu thị nhận xét.

Ví dụ:

# This is a comment- 
127.0.0.1 mysuperhost.com 

Các tập tin nằm ở đây: C:\Windows\system32\drivers\etc\hosts. Bạn sẽ (với lý do chính đáng), cần đặc quyền quản trị viên để ghi vào nó.

8

Tệp thường được đặt tại C:\Windows\System32\drivers\etc\hosts. Thay vì mã hóa cứng phần C:\Windows, bạn nên sử dụng Environment.GetEnvironmentVariable("SystemRoot") để xác định thư mục gốc của hệ thống một cách an toàn.

Nếu không, bạn có thể ghi vào nó như bất kỳ tệp nào khác, giả sử bạn có quyền thích hợp.

10

Hosts tập tin có định dạng rất đơn giản mà mỗi dòng có thể chứa "ip host" hồ sơ

Tất cả bạn cần là thường xuyên tập tin phụ thêm:

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

Ghi chú rằng theo mặc định bạn sẽ cần phải đặc quyền nâng cao để ghi vào tệp máy chủ ...

Để hoàn nguyên, hãy sao lưu tệp và khôi phục tệp sau khi bạn hoàn tất.

+0

Làm cách nào để xóa các mục nhập khi cần? – Volatil3

11

Trước tiên, bạn nên yêu cầu để được quản trị viên cho phép từ người dùng. Bạn có thể thực hiện việc này thông qua lớp Chương trình trong ứng dụng của mình. Đoạn mã dưới đây sẽ yêu cầu người dùng truy cập quản trị, sau đó người dùng có tùy chọn cho phép hoặc từ chối nó. Nếu họ từ chối nó, ví dụ này không chạy ứng dụng.

Khi ứng dụng của bạn chạy ở chế độ quản trị, văn bản thuần tuý của nó có định dạng đơn giản. Bạn thậm chí không cần tất cả các bình luận của Microsoft được đưa vào tệp, và việc phân tích cú pháp chuỗi đơn giản sẽ làm tốt. Các ý kiến ​​của MSFT trong tệp HOSTS là tất cả các tài liệu mà bạn thực sự cần đến chừng nào tệp HOSTS của chính nó đi.

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

Lưu ý rằng bằng cách sao chép mã của bạn ở đây nó được phát hành hiệu quả theo CC-Wiki. Khối bản quyền không hiệu quả.Không chắc chắn nếu bạn muốn xóa khối bản quyền hoặc toàn bộ câu trả lời .... –

+0

Tôi sở hữu DCOM Productions và tôi chỉ sao chép toàn bộ nội dung của tệp để có câu trả lời nhanh. Dù bằng cách nào nó không quan trọng, chỉ cần sử dụng nó để cho anh ta một cách tiếp cận cho câu hỏi của mình. Nếu tôi không muốn anh ấy sử dụng mã tôi sẽ không đăng tải chút nào. ;) –

+0

OK. :) Chỉ cần không muốn bạn vô tình phát hành IP của bạn theo một giấy phép ít hạn chế hơn bạn dự định. –

3

Cách chính xác nhất của việc tìm kiếm vị trí file HOSTS là đọc phím HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath registry, và phụ thêm hosts đến cùng.

Điều này sẽ luôn trỏ đến vị trí chính xác cho cấu hình máy hiện tại và hoạt động cho tất cả nền tảng dựa trên Windows NT kể từ Windows NT 4.0.

+0

Thật không may điều này dường như không phải là trường hợp với các hệ điều hành hiện đại hơn. Cụ thể trên Windows 7, nếu bạn thay đổi giá trị DataBasePath, nó sẽ không sử dụng vị trí mới. –

+2

Việc thay đổi giá trị có ảnh hưởng đến nó hay không, hoặc không phải là một vấn đề. Câu hỏi là làm thế nào để chỉnh sửa các tập tin host hiện tại, tôi chỉ đơn giản là đưa ra cách đáng tin cậy nhất để tìm tập tin đã nói. (Giả sử bạn đã không được rối tung trong registry.) Với mục đích đã cho, phương pháp này có giá trị từ Windows NT 4.0 lên đến và bao gồm Windows 8.1 Update 1 –

0

Là một chàng trai đấu tranh với vấn đề này, cách dễ dàng, sao chép tệp lưu trữ vào thư mục tạm thời, sửa đổi và sao chép lại bằng ghi đè. Chạy ứng dụng dưới dạng quản trị viên, sẽ là ứng dụng tốt nhất.

+0

... Câu trả lời này giống như đi vào một diễn đàn sửa chữa xe hơi và nói với OP, "Cách dễ nhất là bắt đầu đi bộ đến các điểm đến của bạn thay vì sửa xe của bạn". – Shadoninja

Các vấn đề liên quan