我有两个用C#编写的Windows服务,遵循相同的模式和方法.
这两项服务都针对在Windows Server 2008 VM上测试的Windows 7 VM和QA进行了开发测试.这两种服务在这些测试环境下已经安装和卸载多次,没有问题,但是在生产环境(Windows Server 2008)中安装后,两种服务中的一种拒绝启动.
要安装服务,我们使用InstallUtil.exe,ServiceInstaller和ServiceProcessInstaller组件附加到服务.
从各方面来看,失败的服务安装成功.InstallUtil.exe报告成功,服务显示在服务管理单元中.您还可以在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Blah Blah下的注册表中找到该服务.但是,如果您尝试启动该服务,则会获得以下内容:
net start blah.blah.exe"服务名称无效."
...或者通过服务管理单元..."Windows无法在本地计算机上启动"Blah Blah"服务.错误1053:服务没有及时响应启动或控制请求."
我已经将一些事件记录添加到服务类失败服务的构造函数中,但它似乎没有被调用.
由于这是一个生产盒,因此盒子上没有Visual Studio,远程调试是不可能的.
有没有其他方法让我获得有关失败服务未启动的原因的调试信息?
我有没有其他明显的理由可以看到这种问题?
编辑:我也应该提到.. Windows事件查看器中唯一的其他问题证据是来自服务控制管理器的系统日志中的两条消息:
"等待Blah Blah服务连接时达到超时(30000毫秒).
"由于以下错误,Blah Blah服务无法启动:服务未及时响应启动或控制请求."
编辑:已解决 此问题最终是一个配置错误和隐藏它的错误的组合.有关详细信息,请参阅下面的答案.
假设我有一个分配一些任意成员数据的类.我见过两种常见的方法(我知道还有其他方法):
class A
{
public:
A();
~A();
//Accessors...
private:
B *mB;
}
A::A()
{
mB = new B();
}
A::~A()
{
delete B;
}
Run Code Online (Sandbox Code Playgroud)
与...
class A
{
public:
//Accessors...
private:
B mB;
}
Run Code Online (Sandbox Code Playgroud)
假设A本身将由消费者代码在堆上分配.
在一般情况下,哪种方法更受欢迎?我意识到特定的情况确实鼓励这种或那种方式,但如果没有这些要求,是一种优先选择的方式吗?有什么权衡?