Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为windows service c创建安装程序#_C#_Windows_Service - Fatal编程技术网

C# 为windows service c创建安装程序#

C# 为windows service c创建安装程序#,c#,windows,service,C#,Windows,Service,我创建了一个c#windows服务 当我将VisualStudio置于调试模式并运行它时,它工作正常 但是当我创建一个安装程序并安装它时,它不工作(意味着服务安装正确并启动,但我的代码没有运行)。 (我构建了这样的设置) 这是我的代码: 这是我的代码:dropbox.com/s/eq13fng88gk714u/myTelephone.zip?dl=0 static class Program { /// <summary>

我创建了一个c#windows服务 当我将VisualStudio置于调试模式并运行它时,它工作正常 但是当我创建一个安装程序并安装它时,它不工作(意味着服务安装正确并启动,但我的代码没有运行)。 (我构建了这样的设置) 这是我的代码:
这是我的代码: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
    }

你问之前有没有试过用谷歌搜索


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

由于您除了“它不工作”之外没有提供任何内容,我将尝试假设:

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

    //为启动过程请求额外的4秒
    此。请求额外时间(4000);
    

    或者将访问SQL数据库的代码移出该方法,例如,创建一个新线程并在那里执行所有操作。

    我认为您正在尝试通过单击ICG exe文件来安装此程序。这是不对的。 请尝试下一步:

  • 打开命令

  • 使用myTelephone.exe将cd刻录到目录

  • 下一步

    sc create myTelephone binpath=“myTelephone.exe”start=auto

    网络启动我的电话

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

    net stop $(ProjectName)
    sc delete $(ProjectName)
    exit /b 0
    
    sc create $(ProjectName) binpath= "$(TargetPath)" start= auto
    net start $(ProjectName)
    
    作为生成后事件:

    net stop $(ProjectName)
    sc delete $(ProjectName)
    exit /b 0
    
    sc create $(ProjectName) binpath= "$(TargetPath)" start= auto
    net start $(ProjectName)
    

    在每个构建中,您都将安装服务。

    问题涉及的SQL server在哪里?如果没有必要,移除标签。什么不起作用?你有什么错误吗?Stacktrace?我确信没有任何错误,因为在调试模式下,当我运行我的程序时,它工作正常,并将数据保存在sql Server中。请阅读并详细说明“不工作”。检查事件日志中的错误。项目中是否有安装程序?请看这里:“它不工作”表示服务已正确安装并启动,但我的代码未运行这是我的代码:dropbox.com/s/eq13fng88gk714u/myTelephone.zip?dl=0是否尝试从Visual Studio将调试器附加到服务?不幸的是,我无法从当前位置访问dropbox,因此无法在那里查看您的代码…我可以收到您的电子邮件吗?这是一个非常糟糕的服务开发工作流,根本无法回答OP的问题。OP想在他们的服务项目中添加一个安装程序。这是一种尝试服务可操作性的方法。正如我从discussio OP中了解到的,它将安装程序添加到项目中。这是调试服务的可怕方式。有很多方法可以更好地做到这一点。Бκ,建议一下!这总比批评好