Здравствуйте, <Аноним>, Вы писали:
А>Уважаемые Ценители ATL
А>Тут оформлял программу в виде сервиса для win,
А>на примере того, как здорово было описано в статье=
А>http://www.rsdn.ru/Forum/Info.aspx?name=FAQ.winapi.atlserviceАвтор: Владислав
Дата: 06.04.05
А>Но столкнулся с несколькими вопросами, которые по своей безграмотности не знаю как решить:
А>1. Когда вызывается #####.exe -service , его рабочая директория, там где располагается
А>сам exe-шник. Если он запускается как сервис, его рабочая директория становиться /windows/system32.
А>Собственно вопрос:
А>Как без очень крутых пируэтов вернуть/узнать, где все-таки текущая директория? (где лежит сам exe).
А>2. Где нужно/можно менять/назначать описание сервиса?
А>Заранее благодарен за ваши ответы.
Несколько странно, что system32. У меня вполне работает обычное:
TCHAR szFilePath[MAX_PATH + _ATL_QUOTES_SPACE];
DWORD dwFLen = ::GetModuleFileName(NULL, szFilePath + 1, MAX_PATH);
.....
И далее:
SC_HANDLE hService = ::CreateService(
hSCM, m_strServiceName, m_strServiceDisplayName,
SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
szFilePath, NULL, NULL, _T("RPCSS\0LmHosts\0\0"), NULL, NULL);
....
SC_LOCK sclLock = ::LockServiceDatabase(hSCM);
if (sclLock != NULL) {
SERVICE_DESCRIPTION sdBuf;
sdBuf.lpDescription = (LPTSTR) (LPCTSTR) m_strServiceDescription;
::ChangeServiceConfig2(hService, SERVICE_CONFIG_DESCRIPTION, (LPVOID) &sdBuf);
::UnlockServiceDatabase(sclLock);
}
Установка дескрипшена ограниченая для операционок, см. MSDN.
... << RSDN@Home 1.2.0 alpha rev. 0>>