将控制台应用程序转换为Windows服务

时间:2014-06-04 18:06:21

标签: c# service signalr

我有一个控制台应用程序,我正在运行SignalR。我正在尝试将其转换为Windows服务应用程序。

我只是用

替换了Main方法
static void Main()
{
    var servicesToRun = new ServiceBase[] 
    { 
        new MyService() 
    };
    ServiceBase.Run(servicesToRun);
}

并添加了一个简单的服务类:

namespace Services
{
    partial class MyService : ServiceBase
    {
        IDisposable SignalR { get; set; }

        public MyService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            const string url = "https://localhost:8080";
            using (SignalR = WebApp.Start<Startup>(url))
            {
                          //TODO: Add Logging
            }
        }

        protected override void OnStop()
        {
            SignalR.Dispose();
        }
          }
}

但是现在当我尝试运行安装程序时,我收到错误:

  

初始化安装时发生异常:   System.BadImageFormatException:无法加载文件或程序集   'file:/// C:\ Code \ MyCode \ Services \ bin \ Debug \ MyService.exe'或   其中一个依赖项。尝试加载程序   格式不正确..

有没有简单的方法来调试此消息?或者有没有人知道我可能错过了什么?

2 个答案:

答案 0 :(得分:3)

您是如何运行安装的?我猜你用64位安装程序注册32位编译应用程序,反之亦然

换句话说,跑步:

%windir%\Microsoft.NET\Framework\v4.0.30319\installutil.exe <My x64 DLL/EXE>

或:

%windir%\Microsoft.NET\Framework64\v4.0.30319\installutil.exe <My x86 DLL/EXE>

答案 1 :(得分:0)

您错过了在服务中创建安装程序 在设计视图中的服务中,右键单击并选择添加安装程序或类似,我的vs是西班牙语。 这为项目ProjectInstaller添加了一个新组件,其中包含serviceProcessInstaller1serviceInstaller1内的两个组件,您必须确定一些属性,这些属性可以确保安装,服务帐户,名称,描述的行为。等 你可以运行installutil.exe进行安装,没有这个installutil什么都不做