2012-07-20 62 views
42

hi tôi nhận được lỗi nàydịch vụ Windows bắt đầu thất bại: Không thể bắt đầu dịch vụ từ dòng lệnh hoặc debugger

Không thể bắt đầu phục vụ từ dòng lệnh hoặc gỡ lỗi. Dịch vụ winwows đầu tiên phải được cài đặt (sử dụng installutil.exe) và sau đó bắt đầu với công cụ ServerExplorer, Windows Services Afministrators hoặc lệnh NET START.

và tôi không hiểu tại sao tôi nhận được lỗi này. Và đây là mã của tôi:

{ 
    string Hash = ""; 
    string connectionstring = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString; 
    SqlConnection myConnection = new SqlConnection(connectionstring); 
    SqlCommand myCommand = new SqlCommand("GetNullHash", myConnection); 
    myCommand.CommandType = CommandType.StoredProcedure; 
    myConnection.Open(); 
    SqlDataReader rdr = myCommand.ExecuteReader(); 

    while (rdr.Read()) 
    { 
     string filename = @"\\" + rdr.GetString(3); 
     filename = System.IO.Path.Combine(filename, rdr.GetString(2)); 
     filename = System.IO.Path.Combine(filename, rdr.GetString(1)); 
     Hash = rdr.GetString(0); 
     Hash = computeHash(filename); 

    } 
    myConnection.Close(); 
    return Hash; 
} 

Trả lời

52

Xem this video, tôi có cùng một câu hỏi. Ông cũng chỉ cho bạn cách gỡ lỗi dịch vụ.

Dưới đây là hướng dẫn của anh ấy bằng cách sử dụng mẫu C# Windows Service cơ bản trong Visual Studio 2010/2012.

Bạn thêm video này vào file Service1.cs:

public void onDebug() 
{ 
    OnStart(null); 
} 

Bạn thay đổi chính của bạn() để gọi dịch vụ của bạn theo cách này nếu bạn đang ở trong DEBUG Cấu hình Giải pháp tích cực.

static void Main() 
{ 
    #if DEBUG 
    //While debugging this section is used. 
    Service1 myService = new Service1(); 
    myService.onDebug(); 
    System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); 

    #else 
    //In Release this section is used. This is the "normal" way. 
    ServiceBase[] ServicesToRun; 
    ServicesToRun = new ServiceBase[] 
    { 
     new Service1() 
    }; 
    ServiceBase.Run(ServicesToRun); 
    #endif 
} 

Hãy nhớ rằng đây là cách tuyệt vời để gỡ lỗi dịch vụ của bạn. Nó không gọi OnStop() trừ khi bạn gọi nó tương tự như cách chúng tôi gọi là OnStart(null) trong chức năng onDebug().

+0

Ai đó cũng cung cấp cho tôi một mẹo" duh "cho biết: Phát triển lớp của bạn như bạn sẽ làm một cách bình thường ứng dụng debuggable sau đó nhập nó vào dịch vụ của bạn khi bạn cảm thấy lớp đã sẵn sàng. – Cesar

+0

Những gì tôi làm đã được đặt các chức năng mà tôi cần phải gỡ lỗi trong phương pháp OnStart sau khi Timer.Start() ;, vì vậy mà tôi có thể gỡ lỗi. –

0

Mã của bạn không liên quan gì đến việc cài đặt dịch vụ, không có vấn đề gì.

Để kiểm tra dịch vụ, bạn phải cài đặt nó như được chỉ định.

Để biết thêm thông tin về cài đặt dịch vụ của bạn: Installing and Uninstalling Services

25

Để cài đặt dịch vụ của bạn bằng tay

Để cài đặt hoặc gỡ bỏ cài đặt dịch vụ cửa sổ bằng tay (được tạo ra sử dụng .NET Framework) sử dụng tiện ích InstallUtil.exe. Công cụ này có thể được tìm thấy trong đường dẫn sau (sử dụng số phiên bản khung thích hợp).

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe

Để cài đặt

installutil yourproject.exe 

Để gỡ bỏ cài đặt

installutil /u yourproject.exe 

Xem: How to: Install and Uninstall Services(MSDN)

Cài đặt dịch vụ programmaticall y

Để cài đặt dịch vụ theo lập trình bằng C#, hãy xem lớp sau ServiceInstaller(c-sharpcorner).

+0

này đã làm việc một cách hoàn hảo, tôi đã có một máy chủ có vấn đề và cần dịch vụ này để chạy khẩn trương, tôi đã sử dụng bước này để cấu hình dịch vụ trên máy cục bộ của tôi, hãy đảm bảo định cấu hình nó với đúng người dùng với các quyền bắt buộc. – kolexinfos

+4

Sau khi chạy 'installutil' nó nói nó đã thành công, nhưng tôi vẫn không thể khởi động dịch vụ hoặc nhìn thấy nó trong service manager – Bassie

0

Tôi sẽ đề xuất tạo dự án thiết lập vì các lý do trong khi triển khai điều này có vẻ là sự thuận tiện nhất, không bị đau đầu sao chép tệp theo cách thủ công. Theo dõi Windows service setup creation tutorial và bạn biết cách tạo. Và trường hợp này là dành cho vb.net nhưng nó là như nhau đối với bất kỳ loại nào.

0

Để cài đặt mở CMD và gõ {YourServiceName} -i lần loại cài đặt nó trong NET START {YourserviceName} để bắt đầu dịch vụ của bạn

để gỡ bỏ cài đặt

Để gỡ bỏ cài đặt mở CMD và gõ NET STOP {YourserviceName} loại một lần dừng lại ở {YourServiceName} -u và nó nên được gỡ bỏ

-1

Chuyển đến App.config

Tìm

<setting name="RunAsWindowsService" serializeAs="String"> 
    <value>True</value> 
    </setting> 

Set False

+0

Có tài liệu trực tuyến nào cho cài đặt này không? Tôi sẽ thêm nó ở đâu? Tôi đã thử applicationSettings và nó không có hiệu lực. – bornfromanegg

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