2013-08-23 52 views
12

Tôi có thể bắt đầu hoặc ngừng dịch vụ từ xa từ dự án .net.Cách khởi động lại dịch vụ từ xa?

ConnectionOptions options = new ConnectionOptions(); 
options.Username = @"192.168.36.22\test"; 
options.Password = "test"; 
ManagementScope scope = new ManagementScope(@"\\192.168.36.22\root\cimv2", options); 
scope.Connect(); 


ManagementOperationObserver Stop = new ManagementOperationObserver(); 
Stop.Completed += new CompletedEventHandler(Stop_CallBack); 
try 
{ 
    string NameServices = "ArcGIS Server"; 
    WqlObjectQuery query = new WqlObjectQuery("SELECT * FROM Win32_Service WHERE Name=\"" + NameServices + "\""); 
    ManagementObjectSearcher find = new ManagementObjectSearcher(scope, query); 
    foreach (ManagementObject spooler in find.Get()) 
    { 
     spooler.InvokeMethod("StopService", new object[] { }); 
     spooler.InvokeMethod(Start, "StopService", new object[] { }); 
    } 
} 
.... 

Tôi làm cách nào để khởi động lại dịch vụ này?

+0

Bạn có thể sử dụng dừng và sau đó bắt đầu. Nó là như nhau. – FelProNet

Trả lời

16

Bạn có thể sử dụng lớp ServiceController như vậy:

ServiceController sc = new ServiceController("ArcGIS Server", "192.168.36.22"); 

sc.Start(); 
sc.Stop(); 

này giúp bạn tiết kiệm phải viết tất cả những gì mã để tương tác với WMI. Lưu ý để sử dụng lớp ServiceController, bạn sẽ phải thêm một tham chiếu đến assembly System.ServiceProcess.

+0

Tôi có thể khởi động lại dịch vụ bằng ManagementObject không? – novicegis

+0

Vâng, nếu bạn muốn sử dụng ManagementObject thì bạn chỉ cần chuyển "StartService" sang InvokeMethod –

+1

Khi tôi sử dụng ServiceController, tôi có ngoại lệ "Không thể mở Trình quản lý điều khiển dịch vụ trên máy tính 'MAPSERVER'. Thao tác này có thể yêu cầu các đặc quyền khác" – novicegis

-3

Tôi gặp phải vấn đề tương tự khi cố kết nối, chỉ cần thêm tên máy của bạn làm quản trị viên trong nhóm 'người dùng' của máy đích và bạn sẽ có thể tìm nạp dữ liệu.