2009-05-27 11 views
15

Tôi đang tạo chương trình (C#) để tải xuống các tệp nhị phân bằng các tệp NZB, chỉ có thể có một phiên bản ứng dụng của tôi chạy bất kỳ lúc nào.C#: làm thế nào để - ứng dụng đơn lẻ chấp nhận tham số mới?

Vì vậy, khi người dùng nhấp đúp vào tệp .nzb và chương trình của tôi không chạy, chương trình sẽ bắt đầu và xử lý nó (dễ dàng, đăng ký tệp). Bây giờ nếu chương trình của tôi đã chạy, tôi KHÔNG muốn khởi chạy phiên bản thứ hai - tôi muốn cá thể đã chạy để nhận tệp được chỉ định.

Làm cho ứng dụng đơn lẻ của bạn có thể được thực hiện bằng cách sử dụng Visual Basic DLL với lừa .IsSingleInstance, nhưng tôi không muốn đến đó.

Cách thích hợp có vẻ là sử dụng mutex để đảm bảo ứng dụng của tôi là một ví dụ, nhưng bây giờ tôi bị kẹt về cách chuyển tham số đã chỉ định (tệp .nzb) sang phiên bản đã chạy.

Trợ giúp sẽ được đánh giá cao! :-)

+0

Có thể bạn đã biết điều này, nhưng bạn có thể đang phát minh lại bánh xe bằng ứng dụng của mình. http://sourceforge.net/projects/sabnzbd/ là một ví dụ – dss539

+1

Yup, và có vô số người khác ;-) Đó là một dự án sở thích chỉ để uốn ngón tay của tôi với C#, và nếu tôi thích kết quả thế giới có thể kết thúc với chỉ một phần mềm miễn phí NZB-downloader! :-) – Led

+2

Tại sao bạn không muốn sử dụng SingleInstanceController từ Microsoft.VisualBasic.dll? Đó là một hội đồng trong khuôn khổ như bất cứ ai khác. Chỉ vì tên là VisualBasic nó sẽ không được sử dụng. Nếu Microsoft đã gọi nó là Microsoft.Foo.dll mọi người sẽ sử dụng nó! – Oliver

Trả lời

2

Hãy thử điều này: Chương trình chính của bạn tạo ra một đường ống có tên hoặc cơ sở truyền thông liên tiến trình khác và lắng nghe trên đó. Bạn tạo một chương trình nhỏ riêng biệt, khi chạy với một tệp NZB làm tham số, mở đường dẫn, cung cấp thông tin tệp vào nó và thoát ra. Chương trình chính của bạn sau đó xử lý tệp mới và tải xuống tệp đó.

0

Tại sao không có một chương trình thêm tệp vào hàng đợi và sau đó khởi chạy chương trình tải xuống nếu chương trình chưa chạy. Chương trình tải xuống đó xem hàng đợi, đó chỉ là một tệp mà bạn thêm tên tệp tải xuống vào.

0

Nhìn vào InitialInstanceActivator tại dự án Genghis

0

Sử dụng một IPC (inter process communication) cơ chế như .net remoting

0

Sử dụng "thực hiện tốt đẹp", tôi đã có thêm một writer.Flush() sau khi WriteLine() để nó hoạt động. Tôi lãng phí một chút thời gian để tìm thấy điều này ...