2008-09-20 10 views
27

Có khung công tác nào có thể được sử dụng để bật Dịch vụ C# Windows để tự động kiểm tra phiên bản mới hơn và tự nâng cấp không? Tôi chắc chắn có thể viết mã để thực hiện điều này, nhưng tôi đang tìm một khung công tác đã được triển khai và (quan trọng nhất) được thử nghiệm.Tôi muốn Dịch vụ Windows C# của tôi tự động cập nhật chính nó

[sửa] Đây là một liên kết đến một câu hỏi tương tự với các liên kết đến các dự án hiện đại giúp thực hiện điều này: Auto-update library for .NET?

+0

tôi chỉ tìm thấy một bài đăng blog "Tạo ra một ứng dụng tự động cập nhật trong .NET/C# "(http://www.nerdparadise.com/tech/csharp/autoupdatingapp/) với liên kết tới mã. Nó là cho một ứng dụng, chứ không phải là một dịch vụ, nhưng tôi đặt cược nó có thể dễ dàng được cập nhật để làm việc. –

Trả lời

16

Cách duy nhất để loại bỏ loại là phá hủy appdomain. Để làm điều này sẽ yêu cầu tách lớp lưu trữ của bạn khỏi mã dịch vụ thực thi của bạn - điều này khá phức tạp. Có thể dễ dàng hơn để a) chạy một tác vụ hàng loạt hoặc b) phát hiện các bản cập nhật trong dịch vụ sau đó khởi chạy một quá trình riêng biệt để dừng dịch vụ, cập nhật các hội đồng vv, sau đó khởi động lại nó.

Nếu bạn quan tâm đến trước đây, các mẫu MSDN và thực hành dân gian đã viết một khối cập nhật ứng dụng mà bạn thích ứng với dịch vụ của bạn.

http://msdn.microsoft.com/en-us/library/ms978574.aspx

+0

Tôi ngạc nhiên vì hôm nay, không có giải pháp dễ dàng sau 3 năm. Cảm ơn stepbu. – Sauleil

+0

Dỡ một loại là rất khó. Nó sẽ liên quan đến việc giải phóng tất cả các cá thể của loại đó trong bộ nhớ, cộng với bất kỳ tham chiếu nào đến ví dụ đó, ví dụ: thành viên và tài sản trong các trường hợp khác. Một tác dụng phụ có thể là ứng dụng phức tạp không thể đoán trước được. Giải nén các bước bên giải pháp appdomain mà vấn đề thay vì làm mất hiệu lực tất cả bộ nhớ trong appdomain đó. Để lại cho bạn để đối phó với chỉ một (mặc dù lớn hơn, nhưng xác định) vấn đề. – stephbu

+0

Tôi biết đây là một câu hỏi cũ, nhưng tôi cũng muốn nói thêm rằng tại các công ty hiện tại có đủ nguồn lực để làm mọi thứ "đúng cách," như Adobe và Google, cũng đã giải quyết trên dịch vụ riêng biệt- mẫu chỉ cần kiểm tra-cập nhật. Họ có thể không sử dụng C# và dự án của họ có thể không giống với dự án của bạn, nhưng tôi nghĩ rằng ít nhất là hữu ích để thừa nhận rằng đây là giải pháp thực sự với lợi ích thực sự, không chỉ là một bản hack tốt-đủ-cho-bây giờ. – GrandOpener

-1

Ông có thể làm rõ câu hỏi của bạn một chút? Tôi là một chút bối rối, bởi vì theo như tôi biết, bạn luôn có thể ghi đè lên các DLL dịch vụ sử dụng. Việc sao chép và khởi động lại dịch vụ có thể dễ dàng được thực hiện trong quá trình xây dựng của bạn.

+0

Xin lỗi vì sự nhầm lẫn. Tôi muốn một cách để dịch vụ của tôi thăm dò ý kiến ​​cập nhật và tự cài đặt chúng khi tìm thấy. Tôi có nhiều dịch vụ trên nhiều máy chủ sản xuất (kiểm soát truy cập) và rất mệt mỏi vì sự vội vã và rủi ro của các can thiệp thủ công. –

3

Tôi không biết bất kỳ Khung nào tạo điều kiện giải pháp cho vấn đề cụ thể này.

Những gì bạn có thể thử mặc dù đang tách logic nghiệp vụ của dịch vụ khỏi mã dịch vụ thực tế thành các hội đồng khác nhau. Để assembly dịch vụ kiểm tra các bản cập nhật cho assembly logic kinh doanh theo các khoảng thời gian đều đặn, sao chép nó từ một nguồn từ xa nếu cần thiết, tháo dỡ cụm BL cũ (và có thể xóa), và sau đó nạp động phiên bản mới. một nhiệm vụ tầm thường).

2

Một giải pháp khả thi là để có một dịch vụ riêng biệt chạy, dừng một cách khác, nếu có một bản cập nhật, và sau đó cập nhật các dịch vụ. Bạn không thể tự cập nhật dịch vụ vì tệp .dll đang chạy sẽ không dừng.

Việc tách lớp logic kinh doanh sẽ là một tùy chọn tốt. Bạn cũng có thể viết lại dịch vụ chính để chạy dưới sự phản ánh của một dịch vụ chủ hoặc kiểm soát. Điều này tương tự như phân tách logic nghiệp vụ, và nó sẽ chỉ yêu cầu dừng một luồng và bắt đầu lại nó.

Tôi biết không có khuôn khổ đã biết nào thực hiện việc này. Tôi đã làm điều này bản thân mình, nhưng đó không phải là một khuôn khổ công cộng.

1

Trong trường hợp bất kỳ ai khác đang tìm kiếm điều này; Tôi thấy liên kết này thú vị. Tôi đã không thực hiện giải pháp này, nhưng có vẻ như nó có thể làm việc cho tôi

http://www.eggheadcafe.com/articles/20041204.asp

2

Tôi đã sử dụng WyBuild để cập nhật ứng dụng của tôi (bao gồm cả các dịch vụ Windows) và nó khá tuyệt vời. Thực sự dễ sử dụng và rất dễ tích hợp với các ứng dụng hiện có. Đó là một khuôn khổ Tự động cập nhật khá tuyệt vời ...

http://wyday.com/wybuild/help/automatic-updates/windows-services-console-apps.php http://wyday.com/wybuild/help/silent-update-windows-service.php

Lưu ý rằng nó là một khuôn khổ trả (giấy phép mỗi nhà phát triển, thử nghiệm miễn phí được bao gồm)

+1

Bất kỳ cơ hội nào bạn liên kết với sản phẩm được đề cập? –

+1

Không, tôi chỉ là người dùng thông thường ... (Xin lỗi vì trả lời muộn!) – Omaer