使用C# .NET 4和VS2010编写的Windows服务无法在Server 2008 R2 Enterprise上安装。

10
我已经编写了许多版本的Windows服务并将它们安装在运行Server 2008 R2 Enterprise的64位系统上,使用这个指南创建服务:
http://msdn.microsoft.com/en-us/zt39148a.aspx
"Walkthrough: Creating a Windows Service Application in the Component Designer"。我在Win 7笔记本电脑上(c#, vs2010 SP1, .NET 4)创建.msi和相应的setup.exe。测试完Windows服务后,在我的笔记本电脑上复制.msi和setup.exe到win2008 R2企业服务器上的文件夹中(通过远程桌面复制和粘贴)。然后我使用服务器的控制面板卸载,右键单击.msi并选择安装,然后按照设置向导进行操作。大多数情况下都没有问题。
异常情况:安装运行时间可能长达15分钟或更长时间,但从未完成,最终弹出对话框显示"(?) Installer is no longer responding.",并提供[重试]或[取消]选项。此时,进度条长度极短,位于"Please wait..."的"P"下方。

点击重试没有帮助。自从我点击了重试,进度条甚至没有前进一像素,已经过去30分钟以上了。

更多信息

(a) 该服务在另一台服务器上(Win 2008 R2 Web版)安装时没有任何问题。
(b) 如上所述,Windows服务在我的Win 7开发和测试环境中安装和工作正常。

历史/推测

几周前,我无法从Win 2008 R2企业版服务器安装服务。即使.msi声称已安装,服务仍然出现在services.msc控制台中,但我在控制面板/卸载中找不到它。即使禁用服务也没有帮助。因此,我克隆了代码,稍微更改了服务名称,并成功安装了那个服务,它已经运行了一段时间而没有出现问题。

今天,发生了类似的事件,唯一的区别是我可以在控制面板卸载中看到该服务。因为它无法卸载,我尝试了同样的克隆技巧,但这次失败了。

下一步:使用上述步骤,我创建了一个什么都不做的Windows服务,并通过从原始C#项目文件中导入客户端类使其有用。

重新构建的Windows服务在我的笔记本电脑上按设计工作,但拒绝在R2企业版服务器上安装。

有什么想法吗?

谢谢。

附言:我在stackoverflow上发布了这篇文章,因为我认为开发人员在将代码交给系统管理员之前更有可能遇到这种情况。

顺便说一句,在stackoverflow上我找不到任何相关的内容;谷歌也是如此。


你能从安装日志或事件查看器中添加更多信息吗?除了更改服务名称,您是否还更改了安装中的GUID?尝试过清理失败的安装的任何工具吗?这可能很难诊断,我感同身受。 - quentin-starin
@qes "痛苦"描述得很好,幸运的是在这种情况下我已经找到了问题。我希望最终能找到根本原因,尽管它可能最终只是一个未解之谜。据我所知,安装本身并没有出现问题(因为它们似乎从来没有进行到那一步),但卸载留下了一些碎片,幸运的是现在可以忽略这些碎片(至少现在)。非常感谢您的宝贵意见。 - gerryLowry
2个回答

3
在这种情况下,可能是某些非常奇怪的服务器权限问题。
更多信息:
尽管我的服务器帐户不是管理员,但我是这个2008 R2框的本地和域管理员成员。
我尝试了许多想法,包括创建演练中的示例并尝试它。没有运气。
框架管理员能够使用installutil.exe安装我的服务,因此我尝试了installutil.exe,但只有在使用管理员凭据时才能为我工作。
因此,我怀疑可能是权限问题,因此我尝试使用我的凭据将演练示例安装在H:\驱动器上。成功。接下来,我尝试在C:中的不同位置安装麻烦的Windows服务。再次成功。
最奇怪的是,这个问题的许多时间我都没有问题,然后突然出现了一个问题阻止了我的开发工作。
Windows服务将安装的迹象是,在启动安装后几乎立即出现请求继续的对话框。另一个成功的线索是能够通过控制面板成功卸载任何先前版本。
感谢大家帮助我解决这个问题。谢谢。

2
我曾经遇到过与我的MSI(不仅是服务)以及Win2k3和Win2k8上的第三方MSI类似的经历。我从未完全解决它,除非重新安装操作系统。
就像您一样,我也猜测操作系统内部(注册表、文件系统、系统还原)可能存在某些问题。
我知道这不是您想听到的,但如果可能的话,重新安装操作系统可能会解决问题。

谢谢你;幸运的是,在这种情况下,这是不必要的,因为特定的2008 R2服务器是一个生产服务器,目前还没有克隆来填补在重新安装期间可能出现的空白。 - gerryLowry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接