Dưới đây là của tôi Windows/.NET an ninh ngăn xếp:Làm thế nào để Bắt đầu/Dừng một dịch vụ Windows từ một ứng dụng ASP.NET - An ninh phát
- Một dịch vụ Windows chạy như LocalSystem trên Windows Server 2003 hộp.
- Một Website .NET 3.5 chạy trên cùng một hộp, dưới "mặc định" sản xuất máy chủ IIS cài đặt (như vậy có lẽ là NETWORKSERVICE sử dụng?)
Về môi trường VS2008 DEV mặc định của tôi, tôi có một phương pháp này, mà được gọi từ ứng dụng ASP.NET, mà hoạt động tốt:
private static void StopStartReminderService() {
ServiceController svcController = new ServiceController("eTimeSheetReminderService");
if (svcController != null) {
try {
svcController.Stop();
svcController.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(10));
svcController.Start();
} catch (Exception ex) {
General.ErrorHandling.LogError(ex);
}
}
}
Khi tôi chạy trên các máy chủ sản xuất, tôi nhận được lỗi sau từ ServiceController:
Sourc e: System.ServiceProcess -> System.ServiceProcess.ServiceController -> IntPtr GetServiceHandle (Int32) -> System.InvalidOperationException Message: Không thể mở dịch vụ eTimeSheetReminderService trên máy tính '.'.
Tại sao điều này xảy ra và cách khắc phục sự cố?
EDIT:
Câu trả lời là bên dưới, chủ yếu là trong các ý kiến, nhưng để làm rõ:
- Vấn đề này có liên quan an ninh, và xảy ra do tài khoản NETWORKSERVICE không có đủ quyền để Bắt đầu/Dừng dịch vụ
- Tôi đã tạo Tài khoản người dùng cục bộ và thêm nó vào nhóm PowerUsers (nhóm này có quyền quản trị)
- Tôi không muốn toàn bộ Web App của tôi để mạo danh người dùng đó mọi lúc, vì vậy tôi mạo danh chỉ trong phương thức mà tôi thao tác dịch vụ. Tôi làm điều này bằng cách sử dụng các nguồn lực sau đây để giúp tôi làm điều đó trong mã:
MS KB article và this, just to get a better understanding
LƯU Ý: Tôi không mạo danh thông qua web.config, tôi làm điều đó trong mã. Xem MS KB Article ở trên.
Loại ngoại lệ nào? Một 'System.InvalidOperationException'? – Phaedrus
@Phaedrus: vâng, vâng, đúng vậy. Tôi đã thêm một số thông tin lỗi trong bản chỉnh sửa của mình. cổ vũ – andy