为Windows服务创建设置c#

时间:2016-01-19 08:36:33

标签: c# windows service

我创建了一个c#windows服务 当我将我的visual studio置于调试模式并运行它时,它可以正常工作 但是当我创建并安装它时,它不起作用(意味着服务正确安装并启动,但我的代码没有运行)。 (我建立了这样的设置https://support.microsoft.com/en-us/kb/816169) 这是我的代码:  这是我的代码:dropbox.com/s/eq13fng88gk714u/myTelephone.zip?dl=0

 static class Program

        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            static void Main()
            {


    #if DEBUG
                myTelephone myService1 = new myTelephone();
                myService1.onDebug();
                System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);

    #else


               ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
                { 
                    new myTelephone() 
                };
                ServiceBase.Run(ServicesToRun);

    #endif
    }

  public partial class myTelephone : ServiceBase
    {
        public myTelephone()
        {
            InitializeComponent();
        }   public void onDebug()
        {
            OnStart(null);
        }
        protected override void OnStart(string[] args)
        {

            //////save some data in sql server
}}

3 个答案:

答案 0 :(得分:0)

你有没有想过在问之前谷歌这个?

无论如何,只需通过nuget使用Topshelf。这样,您总是在调试时和安装时执行相同的代码。

答案 1 :(得分:0)

由于除了'它不起作用'之外你没有提供任何东西,我会试着假设:

  1. 您的Windows服务未安装 - 然后在“您的服务可执行文件”所在的同一文件夹中查看“您的服务可执行文件”.exe.InstallLog文件;
  2. 或Windows服务已成功安装但未启动 - 然后转到事件查看器并查找与您的服务相关的错误消息。如果是这种情况那么很可能是因为你的OnStart方法进入超时状态。在这种情况下:
  3. 要么在方法中请求额外的时间:

        // request additional 4 seconds for the start-up process
        this.RequestAdditionalTime(4000);
    

    或将访问SQL数据库的代码移出方法,例如,创建一个新线程并在那里完成所有员工。

答案 2 :(得分:-1)

我认为您正在尝试通过clickicg exe文件安装它。这是不正确的。 尝试下一步:

  1. 打开cmd

  2. 使用myTelephone.exe

  3. cd到目录
  4. 运行下一个

    sc创建myTelephone binpath =“myTelephone.exe”start = auto

    net start myTelephone

  5. 或者您也可以添加到预构建事件:

    net stop $(ProjectName)
    sc delete $(ProjectName)
    exit /b 0
    

    作为后期制作活动:

    sc create $(ProjectName) binpath= "$(TargetPath)" start= auto
    net start $(ProjectName)
    

    在每个版本中,您都将安装服务。