CreateProcess in Visual Studio 6.0

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: CreateProcess in Visual Studio 6.0

Re: CreateProcess in Visual Studio 6.0

Absurd » 28 сен 2007, 13:53

WinMain писал(а):Ещё есть семейство функций exec() и spawn() из стандартной библиоотеки С/С++, но они так же внутри себя реализуют вызов функции CreateProcess(). Их имеет смысл использовать в кросс-платформенных проектах для написания переносимого кода, т.к. они соответствуют стандарту POSIX.
Нормальный exec() 2 my mind вытесняет текущий процесс из памяти, а не запускает новый. На UNIX порождение нового процесса и загрузка программы - это две разные вещи. Процесс порождается при помощи fork(), при этом текущий процесс дублируется, потом грузится новая программа при помощи exec(), старая вытесняется из памяти.

Код: Выделить всё

pid_t pid;
if (pid = fork()) { /*If pid is not equal to 0 then we are child*/
   exec("new program"); /* new program will replace child process */
}
В Windows эти две вещи склеены воедино в лице CreateProcess(), так что полноценного POSIX exec() в Win32 нету.

Re: CreateProcess in Visual Studio 6.0

WinMain » 28 сен 2007, 00:42

Ещё есть семейство функций exec() и spawn() из стандартной библиоотеки С/С++, но они так же внутри себя реализуют вызов функции CreateProcess(). Их имеет смысл использовать в кросс-платформенных проектах для написания переносимого кода, т.к. они соответствуют стандарту POSIX.

Re: CreateProcess in Visual Studio 6.0

Absurd » 27 сен 2007, 14:40

DeeJayC писал(а):Absurd, Зато WinExec работает без всяких головных болей.
Она основана на CreateProcess. Все равно в процессе отладки полезут косяки с наследованием хендлов, с секьюрити итд. Лучше сразу взять функцию которая продоставляет все возможные опции.

Re: CreateProcess in Visual Studio 6.0

DeeJayC » 27 сен 2007, 13:59

Absurd, Зато WinExec работает без всяких головных болей.

Re: CreateProcess in Visual Studio 6.0

Absurd » 27 сен 2007, 12:31

AvA писал(а):Доброго времени суток!

Есть код

Код: Выделить всё

if (!CreateProcess(
                                m_FileName, 
		NULL, 
		NULL, 
		NULL, 
		FALSE, 
		NORMAL_PRIORITY_CLASS, 
		NULL, 
		NULL, 
		&si, 
		&pi)
		)
    {		
        printf( "CreateProcess failed (%d)\n", GetLastError() );
        return;
    }
где m_FileName получает имя файла через Open dialog в Windows, но процесс не создаётся.. Error Code = 998 (ERROR_NOACCESS)..
Возник вопрос - почему нет доступа к файлу? Есть какие-то идеи?..

Заранее благодарен :cool:
Попробуй передавать оба параметра - и бинарь, и коммандную строку. У меня с одним параметром почему-то никогда не работало.
Для запуска приложений есть более простые в использовании функции, например WinExec() или ShellExecute()
Надоел уже влезать везде со своим WinExec().

Re: CreateProcess in Visual Studio 6.0

AvA » 26 сен 2007, 13:38

WinMain писал(а):Для запуска приложений есть более простые в использовании функции, например WinExec() или ShellExecute()
Спасибо, за ответ, я тоже сначала ринулся было за WinExec поискав её описание в msdn и наткнулся на
WinExec Function

Runs the specified application.

Note This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function
Решил поверить Microsoft наслово.

P.S: CreateProcess уже заработал, пробема была в необнулённых структурах ;-)

Re: CreateProcess in Visual Studio 6.0

WinMain » 26 сен 2007, 12:07

Для запуска приложений есть более простые в использовании функции, например WinExec() или ShellExecute()

CreateProcess in Visual Studio 6.0

AvA » 26 сен 2007, 10:37

Доброго времени суток!

Есть код

Код: Выделить всё

if (!CreateProcess(
                                m_FileName, 
		NULL, 
		NULL, 
		NULL, 
		FALSE, 
		NORMAL_PRIORITY_CLASS, 
		NULL, 
		NULL, 
		&si, 
		&pi)
		)
    {		
        printf( "CreateProcess failed (%d)\n", GetLastError() );
        return;
    }
где m_FileName получает имя файла через Open dialog в Windows, но процесс не создаётся.. Error Code = 998 (ERROR_NOACCESS)..
Возник вопрос - почему нет доступа к файлу? Есть какие-то идеи?..

Заранее благодарен :cool:

Вернуться к началу