最近,我继承了几个作为windows服务运行的应用程序,我在提供gui (从系统托盘中的上下文菜单访问)时遇到了问题。
windows服务需要gui的原因是为了能够重新配置windows服务的行为,而不需要停止/重新启动。
我的代码在调试模式下运行良好,并显示上下文菜单,所有操作都正确等等。
当我使用命名帐户(即,不是本地系统帐户)通过"installutil“安装服务时,服务运行良好,但没有在系统托盘中显示图标(我知道这是正常行为,因为我没有”与桌面交互“选项)。
但问题是,当我选择"LocalSystemAccount“选项,并检查”与桌面交互“选项时,该服务需要很长时间才能启动,没有明显的原因,我只是不断地得到
无法启动..。本地计算机的服务。错误1053:服务没有及时响应启动或控制请求。
顺便说一句,我通过注册表攻击将windows服务超时从默认的30秒增加到了2分钟(参见http://support.microsoft.com/kb/824344,在第3节中搜索TimeoutPeriod ),但是服务的启动仍然超时。
我的第一个问题是-为什么“本地系统帐户”登录比使用非LocalSystemAccount登录服务时花费的时间要长得多,从而导致windows服务超时?这两种行为在一开始就会有什么不同呢?
第二,退一步,我想要实现的只是一个为配置提供gui的windows服务--如果我能够让服务与桌面交互(即从系统托盘中获得一个可用的上下文菜单),我很乐意使用非本地系统帐户(带有命名用户/pwd)运行。这有可能吗?如果可能的话,怎么做?
任何对上述问题的指点将不胜感激!
发布于 2011-09-30 14:12:40
在与这条消息斗争了几天之后,一位朋友告诉我,您必须使用版本构建。当我InstallUtil调试构建时,它会给出以下消息。发行版构建可以很好地启动。
发布于 2013-09-20 20:39:28
我面临这个问题,因为在运行我的服务的盒子上缺少了一个框架。这个盒子有.NET 4.0,服务写在.NET 4.5之上。
我在盒子上安装了以下下载,重新启动,服务启动良好:http://www.microsoft.com/en-us/download/details.aspx?id=30653
发布于 2008-10-01 17:00:36
要调试服务的启动,请将以下内容添加到服务的OnStart()
方法的顶部:
while(!System.Diagnostics.Debugger.IsAttached) Thread.Sleep(100);
这将暂停服务,直到您使用调试->附加手动附加Visual调试器来处理.
备注:一般情况下,如果您需要一个用户与您的服务交互,最好将组件拆分为一个单独的应用程序,当用户登录时运行该应用程序。然后使用类似于命名管道或其他形式的IPC来在GUI应用程序和服务之间建立通信。事实上,在Windows中,这是唯一可行的方法。
https://stackoverflow.com/questions/158371
复制相似问题