为 Windows 服务 C# 创建安装程序

本文关键字:安装 程序 创建 Windows 服务 | 更新日期: 2023-09-27 18:31:06

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

为 Windows 服务 C# 创建安装程序

在询问之前,您甚至尝试过用谷歌搜索一下吗?

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

由于除了"它不起作用"之外,您没有提供任何内容,因此我将尝试假设:

  1. 您的 Windows 服务未安装,然后查看"您的服务可执行文件".exe。安装日志文件位于"您的服务可执行文件"所在的同一文件夹中;
  2. 或者 Windows 服务已成功安装,但它没有启动 - 然后转到事件查看器并查找与您的服务相关的错误消息。如果是这种情况,那么很可能是因为您的 OnStart 方法超时。在这种情况下:

在方法中请求额外的时间:

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

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

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

  1. 打开厘米目录

  2. cd 到目录与我的电话.exe

  3. 运行下一个

    sc create myTelephone binpath= "myPhone.exe" start= auto

    网络启动我的电话

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

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

作为构建后事件:

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

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