2009-10-09 64 views
18

Tôi đang cố viết một ứng dụng và dịch vụ theo dõi một tập hợp dịch vụ nhất định và a) đảm bảo chúng đang chạy và b) dựa trên các tiêu chí nhất định, khởi động lại chúng khi cần.Dừng/Bắt đầu dịch vụ bằng mã trong Windows 7

Tôi tiếp tục chạy vào lỗi truy cập bị từ chối.

Nếu tôi chỉ đơn giản lặp thông qua các quá trình trên hệ thống, tìm ra một tôi muốn như vậy:

foreach (ServiceController sc in ServiceController.GetServices()) 
    {     
     if(sc.ServiceName == "MyServiceName") 
     { 
      sc.Stop(); 
      sc.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 60)); 
      sc.Start(); 
     }    
    } 

tôi nhận được:

InnerException: System.InvalidOperationException 
     Message="Cannot open My Service service on computer '.'." 
     Source="System.ServiceProcess" 
     StackTrace: 
      at System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess) 
      at System.ServiceProcess.ServiceController.Stop() 
      at lib.ListServices() in D:\lib.cs:line 552 
      at lib.Init() in D:\lib.cs:line 56 
    InnerException: System.ComponentModel.Win32Exception 
      Message="Access is denied" 
      ErrorCode=-2147467259 
      NativeErrorCode=5 
      InnerException: 

Tôi đã cố gắng để mạo danh một người sử dụng, tôi có đã cố gắng thực hiện cùng một mã từ một dịch vụ khác đang chạy dưới dạng dịch vụ hệ thống. Không ai trong số đó thực sự có thể ảnh hưởng đến dịch vụ. Nếu nó bắt đầu, tôi không thể dừng lại. Nếu nó dừng lại, tôi không thể bắt đầu nó. Tôi biết điều này là tất cả liên quan đến quyền tôi chỉ không tìm thấy một cơ chế mà thực sự cho phép tôi kiểm soát dịch vụ.

Bất kỳ hỗ trợ nào sẽ được đánh giá rất nhiều.

Trả lời

0

Chính sách bảo mật .net có ngăn chặn ứng dụng của bạn kiểm soát dịch vụ không?

Theo MSDN, lắp ráp của bạn cần sự tin tưởng đầy đủ để hoạt động.

10

Tôi nghĩ rằng đây là lỗi UAC ... Hãy thử chạy exe bằng nhấp chuột phải và "Chạy với tư cách quản trị viên". Nếu điều đó giúp, bạn có thể muốn thêm tệp kê khai vào dự án thực thi của bạn với cấp = "requireAdministrator".

0

Bạn phải đặt ứng dụng để chạy với tư cách quản trị viên. Nếu bạn nhìn vào menu thuộc tính tệp. Trên tab tương thích, có một tùy chọn Privilige Level, để cho chương trình chạy với tư cách quản trị viên. Nó làm việc với khay hệ thống của riêng tôi trong cửa sổ 7.

10

ñoaùn:


UAC thực sự là vấn đề. Ứng dụng của bạn yêu cầu quyền người dùng cao. Đó là lý do tại sao "chạy như quản trị viên" hoạt động bên ngoài IDE.

Một số trang web đề xuất vô hiệu hóa UAC. Vì đây không phải là một khả năng trong môi trường của tôi, tôi quyết định yêu cầu quyền người dùng nâng cao thông qua mã. Wikipedia cung cấp sự trợ giúp mà tôi cần. Phần "Yêu cầu nâng cao" cung cấp giải pháp.

Các giải pháp trong ngắn hạn:


Chỉnh sửa ứng dụng của bạn file manifest để phản ánh yêu cầu của bạn.


1.1. Nhấp chuột phải vào dự án của bạn
1.2. Nhấp vào "Thuộc tính"
1.3. Chọn tab "Ứng dụng" - trang mặc định
1.4. Nhấp vào "Xem Cài đặt UAC" - Nút này mở tệp kê khai ứng dụng (app.manifest)
1.5.Tìm phần "Tùy chọn kê khai UAC"
1.6. Xóa hoặc nhận xét mục nhập hiện tại - {requestedExecutionLevel level = "asInvoker" uiAccess = "false"}
1.7. Thay đổi thành {requestedExecutionLevel level = "requireAdministrator" uiAccess = "false"}. MS cung cấp 3 tùy chọn của bạn như là một phần của phần bình luận.

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