Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите перевести код на Делфи, пожалуйста 
:(
    Опции темы
Ромео
Дата 27.8.2011, 21:34 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 27.8.2011

Репутация: нет
Всего: нет



помогите перевести пожалуйста на Делфи, я уже MSDN прошарил по этому вопросу, на др форумах есть коечто подобное но написан исхожник неверно, вот я собрал по кусочкам с коекаких книжек и вышло типа такого, но могут быть ошибки, помогите разобраться, СУть проги: отключение служб, если имеются зависимые службы, то закртыть сначала их , а потом уже и её саму
//-----------------------------------------------------------------------
// DemoServiceStopWithDependents
//
//  Останавливает указанную службу и все зависимые от нее службы.
//
//  Параметры:
//      hSCM           - handle SCM
//      pszServiceName - имя службы
//
//  Возвращает:
//      ноль - при успешном завершении, отличное от нуля значение - в
//      противном случае.
//
int DemoServiceStopWithDependents(
    IN SC_HANDLE hSCM, 
    IN PCTSTR pszServiceName
    )
{
    _ASSERTE(hSCM != NULL);
    _ASSERTE(pszServiceName != NULL);

    SC_HANDLE hService;
    LPENUM_SERVICE_STATUS pStatus;
    DWORD cbNeeded, i;
    DWORD cServices = 0;

    // открываем handle службы с правом доступа 
    // SERVICE_ENUMERATE_DEPENDENTS
    hService = OpenService(hSCM, pszServiceName, 
                           SERVICE_ENUMERATE_DEPENDENTS);
    if (hService == NULL)
        return PrintError(_T("OpenService failed"), GetLastError());

    // определяем требуемый размер выходного буфера
    if (!EnumDependentServices(hService, SERVICE_ACTIVE, NULL, 0,
                               &cbNeeded, &cServices))
    {
        if (GetLastError() != ERROR_MORE_DATA)
        {
            PrintError(_T("EnumDependentServices failed"),
                       GetLastError());
            CloseServiceHandle(hService);
            return 1;
        }
    }

    if (cbNeeded > 0)
    {
        // выделяем память для выходного буфера
        pStatus = (LPENUM_SERVICE_STATUS)LocalAlloc(LMEM_FIXED, cbNeeded);
        if (pStatus == NULL)
        {
            _tprintf(_T("Not enough memory\n"));
            CloseServiceHandle(hService);
            return 1;
        }

        // получаем список зависимых служб
        if (!EnumDependentServices(hService, SERVICE_ACTIVE, pStatus,
                                   cbNeeded, &cbNeeded, &cServices))
        {
            PrintError(_T("EnumDependentServices failed"), 
                       GetLastError());

            LocalFree((HLOCAL)pStatus);
            CloseServiceHandle(hService);
            return 1;
        }
    }

    // останавливаем все зависимые службы
    for (i = 0; i < cServices; i++)
    {
        _tprintf(_T("Stopping %s...\n"), pStatus[i].lpDisplayName);

        if (DemoServiceStop(hSCM, pStatus[i].lpServiceName))
            break;
    }

    LocalFree((HLOCAL)pStatus);
    CloseServiceHandle(hService);

    if (i < cServices)
        return 1;
    
    // наконец, останавливаем указанную службу
    _tprintf(_T("Stopping %s...\n"), pszServiceName);
    return DemoServiceStop(hSCM, pszServiceName);
}


Это сообщение отредактировал(а) Ромео - 27.8.2011, 21:41
PM MAIL   Вверх
Earnest
Дата 29.8.2011, 08:52 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Ты хочешь, чтобы кто-то проверил твой код? А сам посмотреть не можешь, компилируется или нет, работает или нет. Если есть конкретные проблемы, то так и пиши. А если хочешь, чтобы кто-то за тебя это сделал - то создавай соответствующую тему в разделе "Работа". 


--------------------
...
PM   Вверх
xvr
Дата 29.8.2011, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Вызови через system (или что там вместо нее у Delphi) net stop <имя службы> и не морочь голову ни себе ни людям  smile 

PM MAIL   Вверх
spyswamp
Дата 29.8.2011, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



xvr, просто ShellExec(), ничего особенного - WinAPI едино для всех. smile


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1901 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.