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

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

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

У меня вопрос, уважаемые
Допустим у меня есть файл в папке \win32\test.exe и test2.exe
Мне нужно создать рестартер, которая откроет эти test.exe, test2.exe.
Запуск других приложений... эту тему читал.
Но мне нужно условие если вырубится test.exe или test.exe он обратно восстановит нужную.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2010, 06:14
Ответы с готовыми решениями:

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

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

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

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

5
11 / 11 / 1
Регистрация: 09.11.2009
Сообщений: 32
13.04.2010, 08:40 2
Почитай про CreateProcess и WaitForMultipleObjects.
1
85 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
13.04.2010, 09:25  [ТС] 3
спасибо, но всё же почитать одно дело, а пример от опытных программистов другое.
Меня больше интересует отслеживание, если в процессе нет, то нужно чтобы запускал.
0
11 / 11 / 1
Регистрация: 09.11.2009
Сообщений: 32
13.04.2010, 18:23 4
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  [ТС] 5
Большое спасибо за труд, забрал себе.

Добавлено через 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
11 / 11 / 1
Регистрация: 09.11.2009
Сообщений: 32
14.04.2010, 09:24 6
По поводу ошибок. У меня проект настроен не по умолчанию.
Замени эту строку на
C
1
TCHAR azNames[][10]={L"test1.exe",L"test2.exe"};
А про isProcessPresent тут используют ToolHelp api про него надо почитать, я с ним почти нечего не делал.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2010, 09:24

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.