【发布时间】:2011-03-09 18:22:32
【问题描述】:
我构建了一个 Windows 服务,针对 VS 2008 中的 .NET 2.0。我将它作为控制台应用程序运行以对其进行调试。
控制台应用运行良好。我把它作为服务放在我的本地计算机上,在调试模式下编译,仍然运行良好。我现在准备发布,突然,当我将它设置为发布模式时,服务编译并安装,但没有任何反应。 (服务中的代码根本没有运行)。
我意识到发布与调试模式是属性配置设置,但似乎在发布模式下,即使我选中定义调试常量,取消选中优化代码,并将调试信息设置为“完整”,它仍然什么都不做.
将其重新设置为调试,它再次像魅力一样工作。
(作为旁注,我尝试将目标框架重置为 3.5 以确保这也不是问题)
所以我的问题(按重要性排序)如下:
以任何方式使用我的“调试”版本会导致任何问题吗?
除了我已经尝试更改的三个设置之外,调试和发布之间还有哪些不同?
这对我来说似乎是一个奇怪的错误,并激起了我的好奇心。知道是什么原因造成的吗?
编辑: 应该提一下,我已经在使用自定义安装程序。基本上我会编译程序(无论是调试还是发布),然后使用相应的安装程序进行安装。
【问题讨论】:
-
您确定在发布模式下该服务正在安装(并且安装正确)?
-
您需要为您的 Windows 服务安装安装程序和自定义操作。更多信息:msdn.microsoft.com/en-us/library/d56de412(VS.80).aspx
-
服务是否进入Running状态?事件日志中的任何内容?
-
@Robert Harvey:我有一个安装程序。我所做的是在“调试”模式下构建项目,然后我使用创建的安装程序将服务安装到我的本地机器。然后我使用 services.msc 来停止、启动和重新启动。 @Josh E:鉴于我每次都以相同的方式安装它,无论我如何编译它,我都看不出哪里出错了? @Stephen Cleary:我可以访问事件查看器,但不确定我在寻找什么?
-
使用
System.ServiceProcess.ServiceBase.EventLog实例在您的服务启动时将消息写入事件查看器。例如,在OnStart()回调中,写一条消息表明你至少已经做到了。这将帮助您缩小问题发生的范围。很有可能,您的服务正在触发将其关闭的异常。如果是这样,在您的服务的Main()函数中放置一个 try-catch 块,并在包含堆栈跟踪的 catch 块中向事件查看器写入一条消息,将准确地显示问题发生的位置。
标签: c# visual-studio windows-services properties release