2015-10-20 209 views
7

我写了一个Windows服务它它的工作原理和在大多数操作系统中运行良好。我已经缩小了Windows 10从Windows 8升级导致的问题,即在服务设置为自动时服务在重新启动时无法启动的问题。 我发现延迟启动确实工作。 想知道是否有人知道完整的从零开始的安装和可能指向在这个难以捉摸的问题上缩小的升级之间的细微差别。Windows服务未启动Windows 10升级

当它不起作用时,不会生成日志或事件。它似乎没有尝试和失败 - 只是没有运行(开始)。


我刚刚遇到安装,它工作正常,操作系统从Win 8升级。似乎有一些依赖是不同的。该服务是针对.Net Framework 4.0 x86编写的。 该服务手动启动就好了。自动(启动时)启动不起作用。我即将说它失败 - 但情况并非如此,因为它似乎甚至没有尝试。

+0

好像你的前提是_“如果你升级Windows 8到Windows 10的自行安装服务被设置为‘自动’重新启动机器时不启动” _,这当然是不正确的。如果是这样,那将是其他人在你面前遇到的一个大问题。我几乎不相信没有生成单个事件日志消息。你确定吗? – CodeCaster

+0

没有生成事件。 – Jeff

+0

我有完全相同的问题,尚未设法在哪种情况下重现。 Windows日志显示超时错误,但是我的log4net日志都没有生成。 – msshapira

回答

1

我们有一个类似的问题,其中一个服务(.net)在升级到Windows 10后在某些情况下不会自动启动。此外,在更新到Windows版本10.0.10240后,问题已解决;不是每一种情况。事件日志中也没有错误。

更新:在某些情况下延迟启动似乎也有效。

3

我们在Windows 10中遇到了类似的问题,其中大多数基于.Net的服务在启动时会失败,但以后可能会手动启动。出于某种原因,使用.NET编写的服务需要较长的时间才能在Windows 10中启动。默认情况下,如果某个服务需要超过30秒的时间才能启动而不作出响应,则该服务将由Windows终止。这是不是延迟启动,但增加了服务启动后响应服务的时间。

我能够在注册表中将该行为更改为60秒。转到:

HKLM \系统\ CurrentControlSet \控制\

如果它不存在,创建一个DWORD名为 “ServicesPipeTimeout”(减号引号)(32位)键。将其值设置为60000(十进制)。这与毫秒中的60秒相关。

我甚至创造了一个REGFILE自动完成:

Windows注册表编辑器5.00

版[HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \控制] “ServicesPipeTimeout”= DWORD:0000ea60

只需粘贴到记事本并保存为.reg文件。

这解决了我们在多台机器上的问题。让我知道这是否有帮助。不幸的是,我仍然不知道为什么.NET服务需要很长时间才能开始终止。但是,我觉得这是一个微软的bug,并不一定是我们的用户做错了什么......

+1

而不是自己更改注册表,如果使用延迟启动不适用于您,您可以去服务的属性,并尝试服务恢复。在恢复选项卡下,您可以选择在服务无法启动时要执行的操作。实际上你可能会尝试延迟重启(“X分钟后重启服务”)。 –

0

我们也有一个我们创建的C++ windows服务的问题。自动启动对大多数人来说工作正常。但是现在我们有5个实例,客户的服务工作正常,现在不会自动启动。

似乎工作的唯一的事情就是设置延迟启动,但这不是一个好的选择,因为我们希望服务立即开始。我们也尝试添加NetLogon的服务依赖 - 这是行不通的。

另外请注意,这是为客户和在某些时候(Windows更新也许?)罚款,它只是停止自动启动。

客户也能够进入服务并手动启动服务,并且它可以工作。我会跟随此线程,希望得到比延迟开始更好的解决方案。

0

什么固定它对于我们来说,如果你可以改变服务可执行自己:

在项目文件更改的身高32位的标记,然后重新安装该服务。

CorFlags.exe检查您的服务。该32BITREQ和32BITPREF应该是0

Version : v4.0.30319 
CLR Header: 2.5 
PE  : PE32 
CorFlags : 0x1 
ILONLY : 1 
32BITREQ : 0 
32BITPREF : 0 
Signed : 0