How do I debug Windows services in Visual Studio?

后端 未结 17 777
梦毁少年i
梦毁少年i 2020-11-28 03:56

Is it possible to debug the Windows services in Visual Studio?

I used code like

System.Diagnostics.Debugger.Break();

but it is givi

17条回答
  •  半阙折子戏
    2020-11-28 04:13

    Try Visual Studio's very own post-build event command line.

    Try to add this in post-build:

    @echo off
    sc query "ServiceName" > nul
    if errorlevel 1060 goto install
    goto stop
    
    :delete
    echo delete
    sc delete "ServiceName" > nul
    echo %errorlevel%
    goto install
    
    :install
    echo install
    sc create "ServiceName" displayname= "Service Display Name" binpath= "$(TargetPath)" start= auto > nul
    echo %errorlevel%
    goto start
    
    :start
    echo start
    sc start "ServiceName" > nul
    echo %errorlevel%
    goto end
    
    :stop
    echo stop
    sc stop "ServiceName" > nul
    echo %errorlevel%
    goto delete
    
    :end
    

    If the build error with a message like Error 1 The command "@echo off sc query "ServiceName" > nul so on, Ctrl + C then Ctrl + V the error message into Notepad and look at the last sentence of the message.

    It could be saying exited with code x. Look for the code in some common error here and see how to resolve it.

    1072 -- Marked for deletion → Close all applications that maybe using the service including services.msc and Windows event log.
    1058 -- Can't be started because disabled or has no enabled associated devices → just delete it.
    1060 -- Doesn't exist → just delete it.
    1062 -- Has not been started → just delete it.
    1053 -- Didn't respond to start or control → see event log (if logged to event log). It may be the service itself throwing an exception.
    1056 -- Service is already running → stop the service, and then delete.
    

    More on error codes here.

    And if the build error with message like this,

    Error    11    Could not copy "obj\x86\Debug\ServiceName.exe" to "bin\Debug\ServiceName.exe". Exceeded retry count of 10. Failed.    ServiceName
    Error    12    Unable to copy file "obj\x86\Debug\ServiceName.exe" to "bin\Debug\ServiceName.exe". The process cannot access the file 'bin\Debug\ServiceName.exe' because it is being used by another process.    ServiceName
    

    open cmd, and then try to kill it first with taskkill /fi "services eq ServiceName" /f

    If all is well, F5 should be sufficient to debug it.

提交回复
热议问题