Tôi đã xây dựng một dịch vụ Windows, bây giờ tôi muốn nó tự động cập nhật. Tôi đã đọc về việc tạo ra một dịch vụ thứ hai để làm điều đó hoặc chương trình khác nhau, không thể sử dụng bấm vào một, những gì về myBuild? Có ai biết không? cách tốt nhất là gì? Tôi có thể thay đổi hội đồng không?Cập nhật âm thầm một dịch vụ Windows
5
A
Trả lời
5
Nếu bạn muốn dịch vụ của bạn để chạy trong khi bạn đang thực hiện một bản cập nhật, đây là những gì tôi đã làm trước đây để đạt được điều này:
- Đặt Logic updateble của bạn thành một DLL riêng biệt.
- Tạo một AppDomain trong dịch vụ của bạn.
- Tạo màn hình tập tin kích hoạt sự kiện bất cứ khi nào bạn sao chép tập tin đó (bạn có thể sử dụng MSFT Ent Lib cập nhật)
- Dỡ bỏ dll cũ trong khi chặn (hàng đợi) các chủ đề mà thực thi công cụ từ dll mà
- tải trong tệp dll mới vào miền ứng dụng.
- Để chủ đề của bạn biết tiếp tục xử lý.
3
- Tải xuống exe mới và bất kỳ hội đồng bổ sung nào.
- Đổi tên nhóm lắp ráp hiện tại của bạn.
- Sao chép trong hội đồng mới của bạn.
- Khởi động lại dịch vụ. Bạn có thể xây dựng các chức năng khởi động lại dịch vụ vào exe dịch vụ chính của bạn.
- Khi dịch vụ bắt đầu kiểm tra các tệp được đổi tên từ bước 2 và xóa chúng để làm sạch.
Để khởi động lại dịch vụ của bạn làm
System.Diagnostics.Process.Start
(System.Reflection.Assembly.GetEntryAssembly().Location)
Sau đó, trong dịch vụ của bạn làm
private const string _mutexId = "MyUniqueId";
private static Mutex _mutex;
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
try
{
bool alreadyRunning = false;
try
{
Mutex.OpenExisting(_mutexId);
alreadyRunning = true;
}
catch (WaitHandleCannotBeOpenedException)
{
alreadyRunning = false;
}
catch
{
alreadyRunning = true;
}
if (alreadyRunning)
{
using (ServiceController sc = new ServiceController("MyServiceName"))
{
sc.Stop();
sc.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 120));
sc.Start();
}
return;
}
}
catch
{
}
_mutex = new Mutex(true, _mutexId);
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MyService()
};
// Load the service into memory.
ServiceBase.Run(ServicesToRun);
_mutex.Close();
}
1
Bạn có thể sửa đổi dịch vụ Windows của bạn để nó chỉ đơn giản là một Á hậu cho các ứng dụng chính của bạn, và có chức năng cập nhật ứng dụng chính của bạn.
Vì vậy, bạn sẽ có:
Service.exe: Chạy Application.exe, giám sát vị trí xa các bản cập nhật để Application.exe. Gửi sự kiện bắt đầu/dừng tới Application.exe
Application.exe: Điều gì đã từng là Service.exe của bạn. Nhận các sự kiện khởi động/dừng.
Các vấn đề liên quan
- 1. Cập nhật dịch vụ cập nhật không hoạt động
- 2. Cập nhật MusicPlayer SeekBar trong Dịch vụ
- 3. Lỗi cập nhật dịch vụ lõi tridion
- 4. Dịch vụ WCF và Dịch vụ Windows
- 5. TSQL khiến kích hoạt không âm thầm
- 6. sleep() âm thầm ho CPU CPU
- 7. Tôi muốn Dịch vụ Windows C# của tôi tự động cập nhật chính nó
- 8. imagecreatefromjpeg là âm thầm chấm dứt các kịch bản
- 9. Nhiều dịch vụ Windows trong một exe
- 10. Dịch vụ Windows: lỗi 5: Truy cập bị từ chối
- 11. Cập nhật dịch vụ cập nhật nhấn mạnh vào việc thêm Soap12 vào Config.
- 12. Dịch vụ và hoạt động cập nhật RESTful
- 13. Windows không thể bắt đầu dịch vụ
- 14. Dịch vụ Windows trên EC2?
- 15. Mở rộng các Dịch vụ Windows
- 16. Dịch vụ Windows chạy liên tục
- 17. Làm thế nào để âm thầm bắt đầu Sinatra + Thin?
- 18. pandas python: pivot_table âm thầm giảm chỉ số với nans
- 19. hg-git đẩy âm thầm không thành công
- 20. Sửa nhúng dữ liệu excel âm thầm, trong PowerPoint 2010
- 21. Nhà môi giới dịch vụ SQL và Dịch vụ Windows .NET - Các phương pháp hay nhất?
- 22. Cập nhật giao diện người dùng từ một dịch vụ (sử dụng trình xử lý?)
- 23. Truy cập dịch vụ Azure MySQL
- 24. Dự án thiết lập Dịch vụ Windows - chạy dịch vụ với tư cách quản trị viên
- 25. Ví dụ về việc gửi một biểu mẫu POST (CSRF) một cách âm thầm
- 26. Bắt đầu một dịch vụ windows và khởi động cmd
- 27. Lệnh gọi phương thức trong một dịch vụ Windows
- 28. "sử dụng net" lệnh trong một dịch vụ Windows
- 29. Đối số dòng lệnh của Dịch vụ Windows Delphi
- 30. Cách tạo Dịch vụ Windows Celery?
... xin lỗi, có thể không được giải thích một cách khủng khiếp. Viết câu trả lời SO lúc 3 giờ sáng có lẽ không phải là ý tưởng hay nhất;) –