Создание и уничтожение процессов, C/C++ |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Создание и уничтожение процессов, C/C++ |
Rocket |
Сообщение
#1
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Скажите пожалуйста, как создать и уничтожить процесс в ОС семейства Microsoft Windows? Знаю о существовании системного вызова CreateProcess(…), допускающего использование множества дополнительных параметров. Если возможно, то напишите пожалуйста текстовый пример использования CreateProcess(…).
|
volvo |
Сообщение
#2
|
Гость |
Вот простейший пример: Шаг 131 - CreateProcess
|
Rocket |
Сообщение
#3
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Почему-то у меня не создаётся процесс... И что за библиотека #include "stdafx.h"? |
volvo |
Сообщение
#4
|
Гость |
Что значит "не создается"? Не появляется Notepad? А файл notepad.exe точно лежит там, где указано? У меня запустилось...
Цитата И что за библиотека Если у тебя не VC, можешь убрать эту строку... Это для MFC. |
Rocket |
Сообщение
#5
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Что значит "не создается"? Не появляется Notepad? А файл notepad.exe точно лежит там, где указано? У меня запустилось... Если у тебя не VC, можешь убрать эту строку... Это для MFC. Да, не появляется программа, которую хочу запустить. Я запускаю другой exe-шник. И вообще ряд ошибок возникает: 2 In file included from E:/Dev-Cpp/include/c++/3.4.2/backward/iostream.h:31, from J:\OsLab3.cpp 2 from J:\OsLab3.cpp 32:2 #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated. 4 `main' must return `int' In function `int main(...)': 9 [Warning] passing NULL used for non-pointer converting 6 of `BOOL CreateProcessA(const CHAR*, CHAR*, _SECURITY_ATTRIBUTES*, _SECURITY_ATTRIBUTES*, BOOL, DWORD, void*, const CHAR*, _STARTUPINFOA*, _PROCESS_INFORMATION*)' |
volvo |
Сообщение
#6
|
Гость |
Цитата И вообще ряд ошибок возникает: Ну так сначала исправь ошибки а потом будешь говорить, получается у тебя что-нибудь или нет... Ты ж программу не откомпилировал, что ты хочешь запустить?Вот это компилируется без предупреждений/ошибок, и прекрасно работает: #include <windows.h> |
Rocket |
Сообщение
#7
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Ну так сначала исправь ошибки а потом будешь говорить, получается у тебя что-нибудь или нет... Ты ж программу не откомпилировал, что ты хочешь запустить? Вот это компилируется без предупреждений/ошибок, и прекрасно работает: #include <windows.h> Да, действительно работает прекрасно) А вот как реализовать программу, которая запускала бы исполняемые файлы ( файлы с расширениями .exe, .bat, .cmd) из указанного в качестве параметра каталога. После завершения каждого запущенного процесса соответствующий исполняемый файл должен удаляться. В случае, если в указанном каталоге отсутствуют файлы, программа должна ожидать их появления. Учесть, что запуск файлов с расширениями .bat и .cmd может быть осуществлен только с помощью командного процессора cmd.exe. ? |
volvo |
Сообщение
#8
|
Гость |
Искать в папке файлы с необходимыми расширениями (FindFirstFile/FindNextFile), в зависимости от расширения добавлять или нет к командной строке "cmd.exe", и запускать процесс... После запуска процесса ждать его завершения через WaitForSingleObject, а потом удалять файл...
Пробуй, что не получится - поможем |
Rocket |
Сообщение
#9
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Искать в папке файлы с необходимыми расширениями (FindFirstFile/FindNextFile), в зависимости от расширения добавлять или нет к командной строке "cmd.exe", и запускать процесс... После запуска процесса ждать его завершения через WaitForSingleObject, а потом удалять файл... Пробуй, что не получится - поможем А где можно прочитать про эти функции (FindFirstFile/FindNextFile)? в интернете что-то не получается нарыть...а хотелось бы взглянуть на пример использования... |
volvo |
Сообщение
#10
|
Гость |
Тебя что, на MSDN забанили?
MSDN: FindFirstFile Function, там же в списке "See Also" есть и FindNextFile, и FindClose |
Rocket |
Сообщение
#11
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Тебя что, на MSDN забанили? MSDN: FindFirstFile Function, там же в списке "See Also" есть и FindNextFile, и FindClose Да тут чёрт голову сломит Вот что у меня получилось...конечно по большей части скорей не получилось, но всё же :
То есть я нахожу exe-шники, создаю процесс, но удалить не получается... В задании ещё что-то про командную строку сказано... Помогите пожалуйста довести программу до ума! |
volvo |
Сообщение
#12
|
Гость |
Цитата удалить не получается - это не диагностика... Почему не получается? Что возвращает TerminateProcess?if(CreateProcess(path,NULL,NULL,NULL,false,0,NULL,NULL,& si, & pi))Что выдает? Сообщение отредактировано: volvo - |
Rocket |
Сообщение
#13
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
- это не диагностика... Почему не получается? Что возвращает TerminateProcess? if(CreateProcess(path,NULL,NULL,NULL,false,0,NULL,NULL,& si, & pi))Что выдает? Я не так выразился : не удаляется сам файл из папки. TerminateProcess срабатывает... |
volvo |
Сообщение
#14
|
Гость |
То же самое (проверку на 0 и печать в этом случае кода ошибки) делай для DeleteFile, результат - в студию; почти все WinAPI функции возвращают 0 в случае неудачи, и код ошибки берется через GetLastError.
Только учти, что при удалении файла есть особые случаи: 1) если файл read-only, то перед удалением надо этот атрибут снять; 2) для удаления файла у тебя должны быть права на удаление этого файла, либо права на удаление потомка для той папки, в которой файл лежит... |
Rocket |
Сообщение
#15
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
То же самое (проверку на 0 и печать в этом случае кода ошибки) делай для DeleteFile, результат - в студию; почти все WinAPI функции возвращают 0 в случае неудачи, и код ошибки берется через GetLastError. Только учти, что при удалении файла есть особые случаи: 1) если файл read-only, то перед удалением надо этот атрибут снять; 2) для удаления файла у тебя должны быть права на удаление этого файла, либо права на удаление потомка для той папки, в которой файл лежит... Так, номер ошибки : 2 во всех случаях... |
Rocket |
Сообщение
#16
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Только учти, что при удалении файла есть особые случаи: 1) если файл read-only, то перед удалением надо этот атрибут снять; 2) для удаления файла у тебя должны быть права на удаление этого файла, либо права на удаление потомка для той папки, в которой файл лежит... Как все эти операции проделать? |
volvo |
Сообщение
#17
|
Гость |
Эти операции здесь ни при чем. Ошибка №2 - это ERROR_FILE_NOT_FOUND... Вот кусок программы, которая у меня прекрасно нашла все требуемые файлы и удалила их:
int main()Добавь туда все, что тебе надо после запуска процесса, должно работать... |
Rocket |
Сообщение
#18
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Эти операции здесь ни при чем. Ошибка №2 - это ERROR_FILE_NOT_FOUND... Вот кусок программы, которая у меня прекрасно нашла все требуемые файлы и удалила их: int main()Добавь туда все, что тебе надо после запуска процесса, должно работать... Большое спасибо за помощь, всё отлично работает! |
Текстовая версия | 8.05.2024 9:33 |