Тупой вопрос, но не могу что-то до конца понять. Есть функция CreateProcess, в какой как известно, 2 первых параметра lpApplicationName и lpCommandLinе, куда можно передать имя запускаемого файла. Собственно, вопрос: если lpApplicationName указан (допустим, C:\test.exe), нужно ли дублировать путь к файлу в lpCommandLinе , или передать туда только параметры? Т.е. как правильно будет, Код (Text): CreateProcess("C:\test.exe","-param1 -param2".. или надо все же Код (Text): CreateProcess("C:\test.exe","C:\test.exe -param1 -param2".. ? Мсдн пишет ..Because argv[0] is the module name, C programmers generally repeat the module name as the first token in the command line... Но я так и не понял, обязательно оно или нет. На тестах по разному бывает. p.s. я знаю, что код выше неверный, т.к. lpCommandLinе должен быть не-CONST, но это псевдокод. p.p.s. да, обычно пишут все во втором параметре Код (Text): CreateProcess(NULL,"C:\test.exe -param1 -param2".. но мне интересно, если первый не NULL
M0rg0t, Почему функция CreateProcess делает автоисправление командной строки? Когда CreateProcess завершается с ошибкой ERROR_SUCCESS CreateProcess не ждёт, пока процесс запустится Этот проблемный CreateProcess...
Из опыта-работает всегда 1- nil or -> pApplicationName 2- полная командная строка - типа "C:\test.exe -param1 -param2".. > lpCommandLine ... 8 - директория запуска (рабочая) pApplicationName: Указатель на строку с нулевым завершением, указывающую выполняемый модуль. Строка может указывать полный путь и имя файла модуля для выполнения. Строка может указывать частичное имя. В этом случае функция использует текущий диск и текущий каталог для завершения спецификации. Параметр lpApplicationName может иметь значение NULL. В этом случае имя модуля должно быть первым маркером, разделенным пробелами, в строке lpCommandLine. Указанный модуль может быть приложением на базе Win32. Это может быть какой-то другой тип модуля (например, MS-DOS или OS/2), если соответствующая подсистема доступна на локальном компьютере. Windows NT: если исполняемый модуль является 16-разрядным приложением, lpApplicationName должно быть равно NULL, а строка, на которую указывает lpCommandLine, должна указывать исполняемый модуль. 16-битное приложение-это приложение, которое выполняется как процесс VDM или WOW.