2009-03-31 53 views
12

Tôi có một ứng dụng Windows Forms chạy cục bộ trên màn hình của người dùng. Cách duy nhất để truy cập Internet là bằng cách thực hiện System.Diagnostics.Process.Start (url) để khởi động trình duyệt mặc định của người dùng và trỏ nó tới các URL khác nhau (để kiểm tra các bản cập nhật, liên hệ với chúng tôi, v.v.). Và không có điều gì xảy ra nếu người dùng yêu cầu một cách rõ ràng bằng cách nhấp vào một mục hoặc nút menu.Điều gì khiến Windows Firewall chặn ứng dụng?

Trên máy của tôi, thỉnh thoảng tôi nhận được thông báo cảnh báo của Windows Firewall khi khởi động chương trình, nói rằng Windows Firewall đã "chặn một số tính năng" của chương trình để bảo vệ máy. Tôi cũng thỉnh thoảng nhận được cảnh báo này khi chạy chương trình của tôi trong Visual Studio (và hộp thoại cảnh báo nói rằng vshost đã bị chặn từ mạng). Nó không xảy ra mọi lúc.

Tôi chưa được nghe từ bất kỳ khách hàng nào của tôi rằng điều này đã xảy ra trên máy tính của họ, nhưng điều đó không có nghĩa là không. Và đó là một cảnh báo hơi đáng sợ đối với người dùng ít hiểu biết về kỹ thuật, vì vậy tôi muốn tìm ra cách loại bỏ nó nếu có thể.

Chương trình của tôi có thể làm gì để kích hoạt cảnh báo này?

Chỉnh sửa: Điều duy nhất không bình thường mà chương trình của tôi đang thực hiện khi khởi động là nó sử dụng lớp Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase để thực thi một ứng dụng cá thể đơn lẻ. Tôi biết điều này có một số phép thuật luồng đằng sau hậu trường để phát hiện các phiên bản mới và chuyển hướng chúng. Có thể nó đang lắng nghe trên mạng vì một lý do nào đó không?

Trả lời

7

Tường lửa của Windows sẽ chỉ được kích hoạt nếu chương trình của bạn đang nghe trên cổng - hoạt động hiệu quả với tư cách máy chủ. System.Diagnostics.Process.Start sẽ không kích hoạt Windows Firewall.

Thay vào đó, WindowsFormsApplicationBase có khả năng gây ra cảnh báo tường lửa, vì WindowsFormsApplicationBase sử dụng điều khiển từ xa để cảm nhận các trường hợp khác của chính nó. Sử dụng phản xạ, tôi thấy mã này trong WindowsFormsApplicationBase.Run():

TcpChannel channel = this.RegisterChannel(secureChannel); 
RemoteCommunicator communicator = new RemoteCommunicator(this, this.m_MessageRecievedSemaphore); 
string uRI = applicationInstanceID + ".rem"; 
new SecurityPermission(SecurityPermissionFlag.RemotingConfiguration).Assert(); 
RemotingServices.Marshal(communicator, uRI); 
CodeAccessPermission.RevertAssert(); 
string uRL = channel.GetUrlsForUri(uRI)[0]; 
this.WriteUrlToMemoryMappedFile(uRL); 
this.m_FirstInstanceSemaphore.Set(); 
this.DoApplicationModel(); 

Chừng nào bạn sử dụng cho tính năng WindowsFormsApplicationBase singleInstance của nó, tôi không biết cách nào để khắc phục này.

+0

Đó là điều - không có gì rõ ràng là nghe trên bất kỳ cổng nào. Cảnh báo xảy ra cả trong Visual Studio và khi tôi chạy tệp thực thi đã cài đặt. –

+0

Có một điều bất thường là tôi sử dụng Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase để thực thi một ứng dụng cá thể đơn lẻ. Điều này không luồng công cụ đằng sau hậu trường; Tôi tự hỏi nếu nó có thể được lắng nghe trên mạng cho các công cụ quá trình từ xa. –

+1

Mở dấu nhắc lệnh và chạy "netstat -b" trong khi chương trình đang chạy để xem nó có đang nghe trên bất kỳ cổng nào không. – Greg

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