Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как запустить программу сразу после загрузки ОС 
:(
    Опции темы
GOBLIN_TT
Дата 7.6.2008, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем, Привиет =)
Народ помогите такая поблема.
Есть оыбчное клиенское приложение, и есть серверное приложение.
Соответственно клиентское ставится клиенту, вот.
Это приложение выполняет удалённую перезагрузку или выключение компа, под управление Win 2k, XP.
Мне необходимо чтобы программа которая у клиента, загружалась не через авто загрузку, а сразу после загрузки ОС, тоесть пот проходит например загрузка ХР, и появляется окошко нажмини ctrl+alt+del, вот мне необходими чтоб в этот момент программа и начала работать, просто авто загрузка подгружается только после того как пользователь залогинится, а мне нужно так как я написал.
Как такое возможно сделать ?

Вот моя тема по этому же вопросу.

Помогите очень нужно  smile 

http://forum.vingrad.ru/forum/s/28243b5335...0%BB%D1%8C.html
--------------------
PM MAIL WWW ICQ   Вверх
kosmonaFFFt
Дата 7.6.2008, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ИМХО немного извращенский способ, но если сделать твое приложение в виде драйвера, он будет загружаться до входа пользователя. smile


--------------------
user posted image
PM MAIL ICQ   Вверх
W4FhLF
Дата 7.6.2008, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Зарегистрируй его как сервис(CreateService). 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
EnergoHokum
Дата 7.6.2008, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

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



Ко всему вышесказанному, крайне нежелательно, чтобы у приложения, запускаемого сервисом, был графинтерфейс. Я сомневаюсь вообще, сможет-ли оно в этом случае запуститься.
PM MAIL ICQ   Вверх
GOBLIN_TT
Дата 8.6.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



W4FhLF  - Регистрировал приложение как службу, спомощью програмки (anyserv).
Неполучилось, приложение просто не работало.
Неподскажеш функцию котораю регистрирует сервис средствами С++, в инете примеры только на делфи (
EnergoHokum - обычное консольное приложение на С++.
kosmonaFFFt  - Расскажи по подробнее  smile  плиз.
--------------------
PM MAIL WWW ICQ   Вверх
W4FhLF
Дата 8.6.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Цитата(GOBLIN_TT @  8.6.2008,  11:32 Найти цитируемый пост)
Неполучилось, приложение просто не работало.


Почему? Управление на программу хотя бы передалось?

Цитата(GOBLIN_TT @  8.6.2008,  11:32 Найти цитируемый пост)
Неподскажеш функцию котораю регистрирует сервис средствами С++, в инете примеры только на делфи (


Я уже подсказал - CreateService. Читай MSDN внимательно, там много ньюансов. 



--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
GOBLIN_TT
Дата 8.6.2008, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(W4FhLF @  8.6.2008,  11:43 Найти цитируемый пост)
Почему? Управление на программу хотя бы передалось?

Ну приложение даже не появилось на экране, я пытался взаимодействовать с ним со стороны сервера, приложение не отвечало, соответственно неработалло..
Но в оболочке служб windows оно есть и работает.
--------------------
PM MAIL WWW ICQ   Вверх
W4FhLF
Дата 8.6.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



GOBLIN_TT, я не пойму, оно запустилось или нет? Если запустилось, вопрос решён, а почему оно не отвечает - это уже вопрос, который не относится к запуску приложения, как считаешь?smile


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
rrrFer
Дата 8.6.2008, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(GOBLIN_TT)
Как запустить программу сразу после загрузки ОС

system("schtasks  /create /mo onlogon ..."); не подходит?

PM MAIL WWW ICQ   Вверх
GOBLIN_TT
Дата 8.6.2008, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



W4FhLF - нет, оно не запустилось.
Тк. после входа в сеанс приложение нормально работает..
--------------------
PM MAIL WWW ICQ   Вверх
W4FhLF
Дата 9.6.2008, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Цитата(GOBLIN_TT @  8.6.2008,  18:34 Найти цитируемый пост)
W4FhLF - нет, оно не запустилось.
Тк. после входа в сеанс приложение нормально работает..


Я тебя не понимаю smile Давай подробнее опиши ситуацию, что за приложение, что должно делать при запуске, как ты его регистрируешь в качестве сервиса, etc. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
kosmonaFFFt
Дата 9.6.2008, 07:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(GOBLIN_TT @  8.6.2008,  11:32 Найти цитируемый пост)
kosmonaFFFt  - Расскажи по подробнее    плиз.


Поподробнее к сожалению не могу, ибо не занимался написанием драйверов, просто из курса "Операционные Системы" смутно помнится что драйвера (не все правда) грузятся до входа пользователя в систему. Максимум что могу посоветовать, если решишь этим заняться, - гугль.


--------------------
user posted image
PM MAIL ICQ   Вверх
GOBLIN_TT
Дата 9.6.2008, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(W4FhLF @  9.6.2008,  06:49 Найти цитируемый пост)
Я тебя не понимаю  Давай подробнее опиши ситуацию, что за приложение, что должно делать при запуске, как ты его регистрируешь в качестве сервиса, etc.  

Приложение оыбчное (консольное на С++), оно просто сверяет команды с конфигом на сервере.
И если находит нужную команду выполняет её к примеру если видет шатдаун вырубает комп.
Запихивал программу в сервисы с помощью anyserv!.
Завтра на работу приду, скрины выложу!.
Но программа после запуска службы не заработала(
Хотя в списке сервисов появилась.
--------------------
PM MAIL WWW ICQ   Вверх
EnergoHokum
Дата 10.6.2008, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

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



Вот, тут я описывал, что у меня получилось в конце-концов с сервисами. Просмотри всю тему, там и регистрация сервиса есть, и непосредственно управление им, и выгрузка.
PM MAIL ICQ   Вверх
GOBLIN_TT
Дата 11.6.2008, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(EnergoHokum @  10.6.2008,  10:47 Найти цитируемый пост)
Вот, тут я описывал, что у меня получилось в конце-концов с сервисами. Просмотри всю тему, там и регистрация сервиса есть, и непосредственно управление им, и выгрузка. 
 - Спасибо, огромное калассная статья.

Попробывал скомпилить твою прогу, кампилятор матюгается (
Неподскажеш поч ?
Код

-------------------Configuration: 24234 - Win32 Debug--------------------
Compiling...
2.cpp
C:\Documents and Settings\yglushakov\Ðàáî÷èé ñòîë\Unikunm\24234\2.cpp(97) : error C2065: 'RegisterServiceCtrlHandlerEx' : undeclared identifier
Error executing cl.exe.

24234.exe - 1 error(s), 0 warning(s)



Service.h подключал. (

А первые примеры в теме, компилятся но созданная служба незапускается, пишет неполучен ответ от приложения, видел в теме была таже проблема.


service.h
Код

#ifndef SERVICE_H_20070910_1251
#define SERVICE_H_20070910_1251

#define WebPrice "WebPrice"
extern DWORD WINAPI EntryPoint(LPVOID lpParam);
extern HMODULE g_module;

#endif


2.cpp
Код

#include <cstdio>
#include <cstring>
#include <windows.h>
#include "service.h"
//-------------------------------------------------------------------------
/* Упреждающее объявление WinMain */
extern "C" INT WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,    \
                        LPSTR lpCmdLine,int nCmdShow            \
                              );
//-------------------------------------------------------------------------
/* Управляющее событие */
HANDLE hControlEvent;
/* Текущий статус сервиса */
SERVICE_STATUS ss;
/* Handle для структуры статуса */
SERVICE_STATUS_HANDLE ssh;
/* Объединяем в одну структуру для возможности передачи указателя на неё */
struct SsSsh { SERVICE_STATUS ss; SERVICE_STATUS_HANDLE ssh; };
//-------------------------------------------------------------------------
VOID SetSomeServiceStatus(SsSsh* pSsSsh)
{/* Устанавливаем статус сервиса */
    char str0[]="\'dwCheckPoint\' incremented";
    FILE* file=fopen("E:\\z__SetSomeServiceStatus.txt","a");
    /* Если сервис закончил запуск или остановку, сброс контрольной точки */
    if( (pSsSsh->ss.dwCurrentState == SERVICE_RUNNING) ||        \
        (pSsSsh->ss.dwCurrentState == SERVICE_STOPPED)            \
        )
    {
        pSsSsh->ss.dwCheckPoint=0;
    }
    else/* Иначе -- инкрементируем контрольную точку */
    {
        ++pSsSsh->ss.dwCheckPoint;
        fprintf(file,"%s, value is %li\n",str0,pSsSsh->ss.dwCheckPoint);
        fclose(file);
    }
    /* И отдаём изменённые данные диспетчеру сервисов */
    ::SetServiceStatus(pSsSsh->ssh,&pSsSsh->ss);
}
//-------------------------------------------------------------------------
DWORD WINAPI HandlerEx(DWORD dwControl,DWORD dwEventType,        \
                     LPVOID lpEventData,LPVOID lpContext    \
                       )
{/* Обработчик сигналов управления сервисом */
    /* Принимаем данные о состоянии сервиса */
    switch(dwControl)
    {
        /* Если система выключается */
    case SERVICE_CONTROL_SHUTDOWN:
        /* Или останавливается сервис */
    case SERVICE_CONTROL_STOP:
        {
            /* Разрешаем запуск потока, пинающего SCM */
            ::SetEvent(hControlEvent);
            break;
        }
        /* Если происходит опрос состояния сервиса */
    case SERVICE_CONTROL_INTERROGATE:
        {
            /* Отдаём текущее состояние */
            SetSomeServiceStatus((SsSsh*)lpContext);
            break;
        }
        /* Любое другое управляющее событие */
    default:
        {
            /* Отдаём текущее состояние */
            SetSomeServiceStatus((SsSsh*)lpContext);
            break;
        }
    }
    return 0;
}
//-------------------------------------------------------------------------
DWORD WINAPI CheckPointInc(LPVOID lpVoid)
{/* Функция потока, пинающего SCM при остановке */
    /* Устанавливаем свойство "Сервис в процессе остановки" */
    ((SsSsh*)lpVoid)->ss.dwCurrentState=SERVICE_STOP_PENDING;
    /* Ждём, пока ServiceMain не взведёт событие hControlEvent */
    while(::WaitForSingleObject(hControlEvent,0) != WAIT_OBJECT_0)
    {
        /* А пока периодически пинаем SCM */
        SetSomeServiceStatus((SsSsh*)lpVoid);
        /* Отдохнём перед следующим пинком */
        ::Sleep(5000);
    }
    /* ServiceMain готова к полной остановке, подтверждаем */
    ::ResetEvent(hControlEvent);
    return 0;
}
//-------------------------------------------------------------------------
VOID WINAPI ServiceMain(DWORD dwArgc,LPTSTR* lpszArgv)
{
    SsSsh ssssh;
    /* Регистрируем функцию-обработчик сигналов к сервису, передаём
         ей имя сервиса, собственно, указатель на обработчик и контекст */
    ssssh.ssh=RegisterServiceCtrlHandlerEx(WebPrice,            \
                                     &HandlerEx,        \
                                     (VOID*)&ssssh    \
                                     );
    /* Сервисом будет обычный процесс */
    ssssh.ss.dwServiceType=SERVICE_WIN32_OWN_PROCESS;
    /* Начальное состояние -- в процессе запуска */
    ssssh.ss.dwCurrentState=SERVICE_START_PENDING;///
    /* Отслеживает остановку и выключение системы */
    ssssh.ss.dwControlsAccepted=SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
    /* Не сообщаем об ошибках */
    ssssh.ss.dwWin32ExitCode=NO_ERROR;
    ssssh.ss.dwServiceSpecificExitCode=0;///
    /* Начинаем отсчёт запуска */
    ssssh.ss.dwCheckPoint=0;//0
    /* Если через 10 сек. dwCheckPoint не инкрементируется -- проблемы */
    ssssh.ss.dwWaitHint=10000;//0
    /* Установим это состояние для сервиса */
    SetSomeServiceStatus(&ssssh);
    // main program code
    FILE* file=fopen("E:\\z__ZZZ.txt","a");
    if(file == NULL)
    {/* Не получилось открыть/создать файл -- огорчение */
        ssssh.ss.dwCurrentState=SERVICE_STOPPED;
        SetSomeServiceStatus(&ssssh);
        return;
    }
    /* Сервис запущен */
    ssssh.ss.dwCurrentState=SERVICE_RUNNING;
    SetSomeServiceStatus(&ssssh);
    /* Ждём, пока HandlerEx не пришлёт собы-
         тие останова или выключения питания */
    while(::WaitForSingleObject(hControlEvent,0) != WAIT_OBJECT_0)
    {
        fwrite("test\n",1,strlen("test\n"),file);
        fflush(file);
        ::Sleep(1500);
    }
    /* Сбросим это событие */
    ::ResetEvent(hControlEvent);
    /* Создаём поток, пинающий SCM */
    HANDLE hTh=::CreateThread(NULL,0,CheckPointInc,(LPVOID)&ssssh,0,NULL);
    /* Здесь выполняются длительные действия по остановка сер-
         виса (но не более 120 сек., почему -- пока не знаю) */
    ::Sleep(110000);
    fwrite("\nSuccess stop\n",1,strlen("\nSuccess stop\n"),file);
    /* Подготовка к останову завершена, можно прервать пинающий поток */
    ::SetEvent(hControlEvent);
    /* Теперь ждём, пока завершится пинающий поток */
    while(::WaitForSingleObject(hControlEvent,0) == WAIT_OBJECT_0)
    { ::Sleep(5); }
    /* Сбросим событие */
    ::ResetEvent(hControlEvent);
    fflush(file);
    fclose(file);
    /* Сервис полностью остановлен, */
    ssssh.ss.dwCurrentState=SERVICE_STOPPED;
    /* сообщаем об этом SCM-у */
    SetSomeServiceStatus(&ssssh);
    return;
}
//-------------------------------------------------------------------------
INT WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,    \
                                     LPSTR lpCmdLine,int nCmdShow            \
                                     )
{
    /* Если не удалось создать управляющее событие -- огорчение */
    if((hControlEvent=::CreateEvent(NULL,TRUE,FALSE,"Control")) == NULL)
        return -1;
    /* На всякий случай сбросим его (или у меня паранойя?) */
    ::ResetEvent(hControlEvent);
    SERVICE_TABLE_ENTRY DispatcherTable[]=
        {/* Описание запускаемых сервисов */
            {WebPrice,(LPSERVICE_MAIN_FUNCTION)ServiceMain},
            {NULL,NULL}
        };
    /* Запуск сервисов */
    ::StartServiceCtrlDispatcher(DispatcherTable);
    return 0;
}


Это сообщение отредактировал(а) GOBLIN_TT - 11.6.2008, 08:46
--------------------
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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