Процессы

Тема в разделе "C/C++/C#", создана пользователем Rolana, 27 апр 2014.

Статус темы:
Закрыта.
  1. Rolana

    Rolana New Member

    Регистрация:
    29 ноя 2013
    Сообщения:
    4
    Симпатии:
    0
    Написать две программы:

    1) Программа TASK1, которая считывает из файла TASK.TXT имена процессов и запускает их с соответствующими параметрами (параметры уже выставлены). После запуска соответствующего процесса его Pid записывается в файл PROCCES.TXT. После запуска всех процессов запускается TASK2. Содержание файла TASK смотреть соответственно варианту. (уже всё записано)

    2) Программа TASK2 считывает PROCCES.TXT, выводит на экран его содержимое, спрашивает Pid и уничтожает соответствующий процесс.

    Файлы, в том числе и TASK2, хранятся в c:\abc\ .

    TASK1
    Код (C++):
     #include "stdafx.h"
    #include <windows.h>
    #include "string.h"

    int main(int argc, char* argv[])

    {
    STARTUPINFO si[4];
    PROCESS_INFORMATION pi[4];
    TCHAR path[256] = _T("c:\\abc\\\0"), startpath[256] = _T("c:\\abc\\\0");
    TCHAR procname[10][14];
    FILE *f;
    TCHAR buf[14];
    int i = 0, n, pid[3];

    //--------Вичитуємо з файлу назви процесів------------
    fopen_s(&f, "c:\\abc\\TASK.TXT", "rt");
    while (!feof(f))
    {
    _fgetts(procname[i], 14, f);
    _fgetts(buf, 14, f);
    i++;
    }
    fclose(f);
    fopen_s(&f, "c:\\abc\\PROCESS.TXT", "wt");
    for (int j = 0; j < i; j++)
    {
    _tcscat_s(path, procname[j]);
    ZeroMemory( &si[j], sizeof(si[j]));
    si[j].cb = sizeof(si[j]);
    ZeroMemory( &pi[j], sizeof(pi[j]));
    if( !CreateProcess( NULL, path, NULL, NULL, FALSE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, NULL, &si[j], &pi[j]))
    return 0;
    pid[j]=GetProcessId(pi[j].hProcess);
    //_ftprintf(f,L"%d\n",&pid);
    fprintf(f,"%d\n",pid[j]);
    // Close process and thread handles.
    CloseHandle( pi[j].hProcess );
    CloseHandle( pi[j].hThread );
    for (int k=0; k<14; k++)
    path[k]=startpath[k];

    }
    fclose(f);
    TCHAR pTASK2[] = _T("c:\\abc\\TASK2.exe");
    ZeroMemory( &si[3], sizeof(si[3]));
    si[3].cb = sizeof(si[3]);
    ZeroMemory( &pi[3], sizeof(pi[3]));
    if( !CreateProcess( NULL, pTASK2, NULL, NULL, FALSE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, NULL, &si[3], &pi[3])) return 0;
    puts("\n");
    // WaitForMultipleObjects(4,&pi[4].hProcess,TRUE,INFINITE);
    CloseHandle( pi[4].hProcess );
    CloseHandle( pi[4].hThread );

    return 0;

    }
    TASK2
    Код (C++):
    #include "stdafx.h"
    #include <windows.h>
    FILE *f;
    int _tmain(int argc, _TCHAR* argv[])
    {
    DWORD excode;
    HANDLE hPr;
    int pid[100], i=0, processID;
    bool flag=false;
    fopen_s(&f,"c:\\abc\\PROCESS.txt","rt");
    while (!feof(f))
    {
    fscanf_s(f,"%d\n",&pid[i]);
    printf("%d\n",pid[i]);
    i++;
    }
    while (flag==false)
    {
    printf("Enter the process ID to destroy ");
    scanf_s("%d",&processID);
    for (int j=0; j<i; j++)
    if (pid[j]==processID) flag=true;
    if (flag==false) printf("Bad pid. Try again\n");
    }
    hPr = OpenProcess(PROCESS_TERMINATE,TRUE,processID);
    if(hPr != NULL)
    {
    GetExitCodeProcess(hPr, &excode);
    TerminateProcess(hPr,excode);
    // CloseHandle(hPr);
    }
    return 0;
    }
    Такая проблемка... Вроде всё работает, но когда TASK1 вызывает TASK2, то не выходит завершить процесс по его идентификатору. В то же время сама программка TASK2 завершает процесс без проблем, если её просто запустить (не через TASK1).
    Помогите, пожалуйста.
     

    Вложения:

    • abc.rar
      Размер файла:
      585,1 КБ
      Просмотров:
      3
Загрузка...
Похожие Темы - Процессы
  1. Whatka
    Ответов:
    1
    Просмотров:
    1.108
  2. etaon
    Ответов:
    1
    Просмотров:
    2.235
  3. Mikle77
    Ответов:
    5
    Просмотров:
    3.914
Статус темы:
Закрыта.

Поделиться этой страницей