Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
85 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143

Работа с приложением. Вопрос нуба

13.04.2010, 06:14. Показов 1051. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня вопрос, уважаемые
Допустим у меня есть файл в папке \win32\test.exe и test2.exe
Мне нужно создать рестартер, которая откроет эти test.exe, test2.exe.
Запуск других приложений... эту тему читал.
Но мне нужно условие если вырубится test.exe или test.exe он обратно восстановит нужную.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.04.2010, 06:14
Ответы с готовыми решениями:

Вопрос от нуба)
std::cout << "Hello World!\n"; return 0; } я поробывал ее написать в Борланде 6 (так как диск с книгой не удолось запустить) чето...

Небольшой вопрос от нуба в C++
Есть задача: в одномерном массиве найти номер максимального элемента, сосчитать произведение между первым и вторым нулями, и перестроить...

Вопрос нуба "Form1->" не работает
Аж стыдно за вопрос но. VS 10. Создаю форму, ставлю кнопку, на событие кнопки пишу: Form1->Close(); не работает! и пишет ошибку...

5
 Аватар для elfon
11 / 11 / 1
Регистрация: 09.11.2009
Сообщений: 32
13.04.2010, 08:40
Почитай про CreateProcess и WaitForMultipleObjects.
1
85 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
13.04.2010, 09:25  [ТС]
спасибо, но всё же почитать одно дело, а пример от опытных программистов другое.
Меня больше интересует отслеживание, если в процессе нет, то нужно чтобы запускал.
0
 Аватар для elfon
11 / 11 / 1
Регистрация: 09.11.2009
Сообщений: 32
13.04.2010, 18:23
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>
#include <windows.h>
 
int main(int argc, char* argv[])
{
    HANDLE ahWait[2];
 
    static STARTUPINFO si;
    si.cb=sizeof(si);
    PROCESS_INFORMATION pi;
    TCHAR azNames[][10]={"test1.exe","test2.exe"};
    BOOL bRes;
    
    bRes=CreateProcess(NULL, azNames[0], NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
    if(!bRes)
    {
        printf("Cannot start test1.exe\n");
        return -1;
    }
    else 
        printf("test1.exe started\n");
    CloseHandle(pi.hThread);
    ahWait[0]=pi.hProcess;
    
    bRes=CreateProcess(NULL, azNames[1], NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
    if(!bRes)
    {
        printf("Cannot start test2.exe\n");
        return -1;
    }
    else 
        printf("test2.exe started\n");
    CloseHandle(pi.hThread);
    ahWait[1]=pi.hProcess;
 
    DWORD dwRes;
    while(TRUE)
    {
        dwRes=WaitForMultipleObjects((DWORD) 2, ahWait, FALSE, INFINITE);
        switch(dwRes)
        {
        case WAIT_OBJECT_0:
            CloseHandle(ahWait[0]);
            CreateProcess(NULL, azNames[0], NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
            ahWait[0]=pi.hProcess;
            printf("test1.exe started again\n");
            break;
        case WAIT_OBJECT_0+1:
            CloseHandle(ahWait[1]);
            CreateProcess(NULL, azNames[0], NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
            ahWait[1]=pi.hProcess;
            printf("test2.exe started again\n");
            break;
        case WAIT_FAILED:
            printf("wait failed\n");
            return -1;
        }
    }
    return 0;
}
Тебе может потребоваться дополнительно подправить CreateProcess'ы. У меня test1 и test2 это одно и тоже приложение, которое выводит своё название. И тут бесконечный цикл.

Добавлено через 35 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdio.h>
#include <windows.h>
 
int main(int argc, char* argv[])
{
    HANDLE ahWait[2];
 
    static STARTUPINFO si;
    si.cb=sizeof(si);
    PROCESS_INFORMATION pi;
    TCHAR azNames[][10]={"test1.exe","test2.exe"};
    BOOL bRes;
    
    bRes=CreateProcess(NULL, azNames[0], NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
    if(!bRes)
    {
        printf("Cannot start test1.exe\n");
        return -1;
    }
    else 
        printf("test1.exe started\n");
    CloseHandle(pi.hThread);
    ahWait[0]=pi.hProcess;
    
    bRes=CreateProcess(NULL, azNames[1], NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
    if(!bRes)
    {
        printf("Cannot start test2.exe\n");
        return -1;
    }
    else 
        printf("test2.exe started\n");
    CloseHandle(pi.hThread);
    ahWait[1]=pi.hProcess;
 
    DWORD dwRes;
    while(TRUE)
    {
        dwRes=WaitForMultipleObjects((DWORD) 2, ahWait, FALSE, INFINITE);
        switch(dwRes)
        {
        case WAIT_OBJECT_0:
            CloseHandle(ahWait[0]);
            CreateProcess(NULL, azNames[0], NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
            CloseHandle(pi.hThread);
            ahWait[0]=pi.hProcess;
            printf("test1.exe started again\n");
            break;
        case WAIT_OBJECT_0+1:
            CloseHandle(ahWait[1]);
            CreateProcess(NULL, azNames[0], NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
            CloseHandle(pi.hThread);
            ahWait[1]=pi.hProcess;
            printf("test2.exe started again\n");
            break;
        case WAIT_FAILED:
            printf("wait failed\n");
            return -1;
        }
    }
    return 0;
}
Чуток добавил, так лучше будет.
1
85 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
14.04.2010, 08:30  [ТС]
Большое спасибо за труд, забрал себе.

Добавлено через 12 часов 17 минут
.\main.cpp(11) : error C2440: инициализация: невозможно преобразовать 'const char [10]' в 'TCHAR'
Не существует контекста, в котором такое преобразование возможно
.\main.cpp(11) : error C2440: инициализация: невозможно преобразовать 'const char [10]' в 'TCHAR'
Не существует контекста, в котором такое преобразование возможн

Visual C++ 2008 pro, может я что то не добавил?

Добавлено через 39 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <windows.h>
#include <iostream>
#include <tlhelp32.h>
 
using namespace std;
 
bool IsProcessPresent(wchar_t * szExe)
{
        HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        
        PROCESSENTRY32 pe;
        pe.dwSize = sizeof(PROCESSENTRY32);
        Process32First(hSnapshot, &pe);
 
        if (!_wcsicmp((wchar_t *)&pe.szExeFile, szExe))
        {
                return true;
        }
 
        while (Process32Next(hSnapshot, &pe))
        {
                if (!_wcsicmp((wchar_t *)&pe.szExeFile, szExe))
                {
                        return true;
                }               
        }       
 
        return false;
}
 
int main()
{
        TCHAR szExe[] = L"1.exe";
        while (1)
        {
                if (IsProcessPresent((wchar_t *)&szExe))
                {
                        wcout << szExe << L" present" << endl;
 
                        //добавляй получение и вывод информации о памяти
                }
                else
                {
                        wcout << szExe << L" not present" << endl;
                        system("start 1.exe");,
                }
                Sleep (3000);
        }
        return 0;
}
Вот из соседней темы, добавил system("start 1.exe");,
Но не очень пойму функцию isProcessPresent
0
 Аватар для elfon
11 / 11 / 1
Регистрация: 09.11.2009
Сообщений: 32
14.04.2010, 09:24
По поводу ошибок. У меня проект настроен не по умолчанию.
Замени эту строку на
C
1
TCHAR azNames[][10]={L"test1.exe",L"test2.exe"};
А про isProcessPresent тут используют ToolHelp api про него надо почитать, я с ним почти нечего не делал.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.04.2010, 09:24
Помогаю со студенческими работами здесь

Работа с многооконным приложением
1)Создать информационную программу из пяти окон с последовательным переходом из одного окна в другое вперед и назад.Данная программа должна...

Работа со сторонним приложением
Здравствуйте! Прошу вашей помоши потому что сам не так силён в Delphi. Опишу саму проблему и думаю вы сами поймёте. 1. Есть программа WP...

Работа с приложением на другом ПК
Проблема вот такая, после переноса файлов проекта на другой компьютер, база данных перестаёт работать. База данных разработана как Файл...

Работа с консольным приложением
Пожалуйста, подскажите кто может. Программа сделана для консольного приложения, Builder C++ 6, считывает данные с платы PCI и выводит на...

Работа с другим консольным приложением
у меня есть консольное приложение, которое выводит информацию на экран мне нужно написать программу которая запускала бы это приложение и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 05.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru