我正在试图build立几个Windows服务来做不同的事情。 例如,我需要Windows服务,将:
我需要Windows服务做的任务是截然不同的,所以我不太喜欢把它们都放在一个服务中的想法。
我到目前为止是Visual Studio 2008中的一个项目。我已经创build了一个Windows服务,我已经在OnStart事件上设置了一个计时器(它只是为了testing目的每5秒写一个文本文件)。 然后我添加一个安装程序到项目中,当我运行InstallUtil.exe时,一切工作正常。
当我将第二个Windows服务添加到同一个项目时,问题就出现了。 我再次设置了OnStart代码,使用相同的日志信息(略有不同,所以我可以告诉哪个服务正在写入日志)。 随着第二个Windows服务,我改变了Program.cs中的主要事件:
static void Main(string[] args) { ServiceBase[] ServicesToRun = new ServiceBase[] { new Service1() }; ServiceBase.Run(ServicesToRun); }
至:
static void Main(string[] args) { ServiceBase[] ServicesToRun = new ServiceBase[] { new Service1(), new Service2() }; ServiceBase.Run(ServicesToRun); }
在这一点上,没有编译时错误,但Service2服务从不做任何事情…日志logging任务不会触发。
我将其缩小到第二个服务没有与之关联的“安装者”的事实。 然后,我尝试按照第一个服务的方式添加安装程序(即,右键单击服务devise器,然后单击“添加安装程序”)。 现在,当我去到ProjectInstaller.cs文件,那里有另一个serviceInstaller(serviceInstaller2)。
现在,当我build立项目,并尝试安装服务,我去“服务”控制面板窗口,我尝试启动Service1,我得到以下错误信息:
Windows无法在本地计算机上启动Service1服务。
错误1083:此服务被configuration为运行的可执行程序不执行该服务。
如果我尝试启动Service2,也会得到相同的错误消息(当然,错误消息标识Service2的情况除外)。
有没有什么我想要从一个EXE运行两个服务运行?
我已经想出了如何有一个可执行文件,但两个服务。 每个服务都以自己的名字安装到服务管理器,并可以启动/停止。 我想这就是你想要的,对吗? 这是我做的:
你可以在这里找到演示代码:
http://code.google.com/p/multi-service-install/
我想你们已经解决了这个问题,但是如果有其他问题需要解决,我会在这个问题上回答这个问题,这个问题今天花了我几个小时。 解决方案不是添加另一个项目安装程序,而是一个服务安装程序,它是项目安装程序中的一个组件。 新添加的服务安装程序必须配置第二个服务名称。
我今天有类似的问题,并设法解决它。
首先,我确定每个服务都有一个有意义且唯一的ServiceName属性。 发电机给了两个服务相同的名称,这将不会有帮助。
然后,我删除并重新生成了ProjectInstaller类,并为每个类添加了安装程序。 我确定它们都是在静态Main方法中实例化的。
我现在可以安装这两个服务与一个DLL,但不幸的是,当我启动其中一个服务似乎执行本身和其他服务的功能。 也就是说,两个服务都在运行(即使在计算机管理器中只有一个服务显示为“已启动”)。 我仍然试图找出一个…
我实际上正在构建与你所想的非常相似的东西。 我决定做的(迄今为止)是所有我的'服务'(虽然他们不是服务,一个'控制器')是实现一个特定的接口(与init()和execute()操作作为FREQUENCY枚举)。
控制器是windows服务,它在运行时从xml设置文件中读取程序/ dll的列表,并将它们加载到列表中,并以他们定义的任何频率调用其execute()方法(如果适用)。
在我的情况下,每个程序还包含一个用户控件,它被加载到控制器的标签页中,允许用户控制/修改它。 如果你有兴趣,我会发布代码。
不知道是否清楚。 我其实从另一个SO用户那里得到了这个想法,他们实现了类似的东西,但我现在找不到这个帖子。
我用sc.exe来轻松完成。 http://support.microsoft.com/kb/251192
例如: sc create "My Display Service Name" binpath= "c:\app\mysvc.exe --service"
注意:每个相等的值都应该在它的值之前,因为你可以看到“binpath”
我今天有同样的问题,并设法解决这个问题。 在我的情况下,我只需要打开我的服务的* .designer.cs文件,并确保服务名称设置正确。 更重要的是,应该在* Installer.Designer.cs中使用相同的名称,如果你在* Installer.cs中有代码。
我认为这个错误只是由于名称不匹配而发生的。
希望这有助于
在一个可执行文件中安装2个独立和不相关的服务对我来说有一种有趣的味道 虽然有可能使它起作用,但它并不是正确的。
从听起来像,你需要在不同的时间间隔执行一些不同的任务,你的任务可能会或可能不相关。 你看过Quartz.NET吗? 这听起来很适合你的需求。