Текущий архив: 2005.12.11;
Скачать: CL | DM;
ВнизCreate Process ! Найти похожие ветки
← →
psa247 © (2005-11-25 13:27) [0]Создаю процесс таким образом. Иногда функция не запускает процесс, но и в качестве результата выдает пустую строку. Подскажите, где ошибка
function TF.Exec_Process(exename, param : string; par : boolean): string;
var Startup : TStartupInfo;
Process : TProcessInformation;
begin
EUID:= "{C6B82C32-30DA-4851-A8CC-EA67CD058787}";
SetLastError(0);
Startup.lpReserved:= PChar(0);
Startup.lpDesktop:= PChar(0);
Startup.lpTitle:= PChar(0);
Startup.dwFlags:= STARTF_USESHOWWINDOW;
Startup.wShowWindow:= SW_NORMAL;
Startup.cbReserved2:= 0;
Startup.lpReserved2:= PByte(0);
FillMemory(@Startup,sizeof(Startup),0);
Startup.cb:=Sizeof(Startup);
// Если процесс не был создан, то возвращается код ошибки
if CreateProcess(PChar(exename), // lpApplicationName
PChar(param), // lpCommandLine
PSecurityAttributes(0), // lpProcessAttributes
PSecurityAttributes(0), // lpThreadAttributes
par, // bInheritHandles
NORMAL_PRIORITY_CLASS, // dwCreationFlags
nil, // lpEnvironment
PChar(Path), // lpCurrentDirectory
Startup, // lpStartupInfo
Process) // lpProcessInformation)
then Result:= "ok"
else begin
Result:= SysErrorMessage(GetLastError);
end;
end;
← →
Digitman © (2005-11-25 13:41) [1]А зачем это вообще понадобилось - получать в кач-ве рез-та сообщение, которое, кстати, м.б. совершенно различным (при одной и той же ошибке) на разных ОС или на разных локализациях ?
Чем не устраивает Win32Check() и обработка исключения ?
Или, на кр.случай, возврат кода ошибки для последующего анализа ?
← →
Чапаев © (2005-11-25 13:50) [2]Шутник, аднака! Сначала поля Стартапа заполняет, а потом его FillChar нулями... Что такое вообще Path?
← →
BiN © (2005-11-25 13:51) [3]вдогонку к
> Digitman © (25.11.05 13:41) [1]
FillMemory(@Startup,sizeof(Startup),0); стоит в неположенном месте
да и описатели полученные неплохо бы закрыть.
← →
Digitman © (2005-11-25 13:57) [4]да к тому же и SetLastError(0) здесь как корове седло ..
← →
psa247 © (2005-11-25 14:18) [5]
> BiN ©, Чапаев ©
Сделал.
> Digitman © (25.11.05 13:57) [4]
Седло убрал...
То же самое.
← →
Digitman © (2005-11-25 14:23) [6]
> psa247 © (25.11.05 14:18) [5]
> Седло убрал...
>
> То же самое.
это было частное замечание, на сабж не влияющее ... равно как и FillMemory() не в том месте... в ЛЮБОМ случае, если CreateProcess() по каким-то причинам отказала, то конкретные причины отказа лежат в коде, возвращенном ф-цией GetLastError() ... отсюда и вопрос - КАКОЙ код тебе возвратила GetLastError() ?
← →
psa247 © (2005-11-25 14:30) [7]Path - рабочая папка для нового процесса.
Почему GetLastError - вычитал в справке, оно привычней.
Разъясните что lpEnvironment означает ?
← →
Digitman © (2005-11-25 14:33) [8]lpEnvironment - указатель на область памяти, содержащей блок переменных окружения будущего процесса
> Почему GetLastError - вычитал в справке, оно привычней
??
я спросил - ЧТО у тебя возвратила эта ф-ция ?
← →
psa247 © (2005-11-25 14:33) [9]
> КАКОЙ код тебе возвратила GetLastError()
193
← →
psa247 © (2005-11-25 14:35) [10]В каких случаях lpEnvironment обязательно использовать?
← →
Fay © (2005-11-25 14:41) [11]2 psa247 © (25.11.05 14:33) [9]
Ну написал бы тогда, что пишет RaiseLastOSError...
← →
Fay © (2005-11-25 14:42) [12]ERROR_BAD_EXE_FORMAT ?!
← →
Digitman © (2005-11-25 14:44) [13]ERROR_BAD_EXE_FORMAT = 193;
SysErrorMessage(193) должна была вернуть строку
"такой-то-файл is not a valid Windows NT application"
← →
Digitman © (2005-11-25 14:46) [14]
> В каких случаях lpEnvironment обязательно использовать?
в дан.случае это не принципиально - то что ты пытаешься запустить на самом деле не является полноценным исп.файлом приложения
← →
psa247 © (2005-11-25 14:50) [15]Спасибо. Я попытаюсь разобраться.
← →
psa247 © (2005-11-25 15:02) [16]Скажите, как с помощью CREATEPROCESS открывать указанные файлы с помощью программ по умолчанию ? Выяснять расширение и программу, связанную с ним, и потом уже запускать через CREATEPROCESS ?
← →
Fay © (2005-11-25 15:31) [17]2 psa247 © (25.11.05 15:02) [16]
А ShellExecuteEx не подойдёт?
← →
psa247 © (2005-11-25 15:35) [18]
> Fay ©
Возможно ли, вызвать системный диалог свойсв файла без использования ShellExecuteEx?
← →
isasa © (2005-11-25 16:07) [19]В param, если он не пустой - пробел в начало.
param:=" XXXXXXXXXXXXXXX";
Страницы: 1 вся ветка
Текущий архив: 2005.12.11;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.038 c