各位QT朋友大家好,最近小弟在WINDOWS下实现了一个服务,该服务是在qtservice基础上实现的,已基本实现了安装、卸载、启动等服务操作,但在实现过程中发现了奇怪的问题,程序安装和卸载过程可以利用qtcreator进行单步调试,并且利用qxtLog也能正常显示日志,但服务的启动操作qtcreator和qxtLog都不能跟踪和显示日志,这让我在开发程序遇到问题时非常痛苦。
我怀疑是qtservice的问题,就看了qtservice的源码,发现其在启动某个服务时,qtservice是通过先服务名从服务管理器中搜索出该进程后,再调用pStartService(hService, args.size(), argv.data()),程序进入该pStartServiceAPI后,dbg就跟踪不了。
// Open the Service Control Manager
SC_HANDLE hSCM = pOpenSCManager(0, 0, SC_MANAGER_CONNECT);
if (hSCM) {
// Try to open the service
SC_HANDLE hService = pOpenService(hSCM, (wchar_t *)d->serviceName.utf16(), SERVICE_START);
if (hService) {
QVector<const wchar_t *> argv(args.size());
for (int i = 0; i < args.size(); ++i)
argv = (const wchar_t*)args.at(i).utf16();
if (pStartService(hService, args.size(), argv.data()))
result = true;
pCloseServiceHandle(hService);
}
pCloseServiceHandle(hSCM);
}
估计是不同进程导致dbg或qxtLog跟踪不了。不知道大家是否遇到过这样的问题?有何解决方案?