![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Create Process ! [D6, WinXP]
psa247 © (2005-11-25 13:27:00)Создаю процесс таким образом. Иногда функция не запускает процесс, но и в качестве результата выдает пустую строку. Подскажите, где ошибка
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;
isasa (2005-11-25 16:07:00) [1]В param, если он не пустой - пробел в начало.
param:=' XXXXXXXXXXXXXXX';
psa247 (2005-11-25 15:35:00) [2]
> Fay ©
Возможно ли, вызвать системный диалог свойсв файла без использования ShellExecuteEx?
Fay (2005-11-25 15:31:00) [3]2 psa247 © (25.11.05 15:02) [16]
А ShellExecuteEx не подойдёт?
psa247 (2005-11-25 15:02:00) [4]Скажите, как с помощью CREATEPROCESS открывать указанные файлы с помощью программ по умолчанию ? Выяснять расширение и программу, связанную с ним, и потом уже запускать через CREATEPROCESS ?
psa247 (2005-11-25 14:50:00) [5]Спасибо. Я попытаюсь разобраться.
Digitman (2005-11-25 14:46:00) [6]
> В каких случаях lpEnvironment обязательно использовать?
в дан.случае это не принципиально - то что ты пытаешься запустить на самом деле не является полноценным исп.файлом приложения
Digitman (2005-11-25 14:44:00) [7]ERROR_BAD_EXE_FORMAT = 193;
SysErrorMessage(193) должна была вернуть строку
"такой-то-файл is not a valid Windows NT application"
Fay (2005-11-25 14:42:00) [8]ERROR_BAD_EXE_FORMAT ?!
Fay (2005-11-25 14:41:00) [9]2 psa247 © (25.11.05 14:33) [9]
Ну написал бы тогда, что пишет RaiseLastOSError...
psa247 (2005-11-25 14:35:00) [10]В каких случаях lpEnvironment обязательно использовать?
psa247 (2005-11-25 14:33:00) [11]
> КАКОЙ код тебе возвратила GetLastError()
193
Digitman (2005-11-25 14:33:00) [12]lpEnvironment - указатель на область памяти, содержащей блок переменных окружения будущего процесса
> Почему GetLastError - вычитал в справке, оно привычней
??
я спросил - ЧТО у тебя возвратила эта ф-ция ?
psa247 (2005-11-25 14:30:00) [13]Path - рабочая папка для нового процесса.
Почему GetLastError - вычитал в справке, оно привычней.
Разъясните что lpEnvironment означает ?
Digitman (2005-11-25 14:23:00) [14]
> psa247 © (25.11.05 14:18) [5]
> Седло убрал...
>
> То же самое.
это было частное замечание, на сабж не влияющее ... равно как и FillMemory() не в том месте... в ЛЮБОМ случае, если CreateProcess() по каким-то причинам отказала, то конкретные причины отказа лежат в коде, возвращенном ф-цией GetLastError() ... отсюда и вопрос - КАКОЙ код тебе возвратила GetLastError() ?
psa247 (2005-11-25 14:18:00) [15]
> BiN ©, Чапаев ©
Сделал.
> Digitman © (25.11.05 13:57) [4]
Седло убрал...
То же самое.
Digitman (2005-11-25 13:57:00) [16]да к тому же и SetLastError(0) здесь как корове седло ..
BiN (2005-11-25 13:51:00) [17]вдогонку к
> Digitman © (25.11.05 13:41) [1]
FillMemory(@Startup,sizeof(Startup),0); стоит в неположенном месте
да и описатели полученные неплохо бы закрыть.
Чапаев (2005-11-25 13:50:00) [18]Шутник, аднака! Сначала поля Стартапа заполняет, а потом его FillChar нулями... Что такое вообще Path?
Digitman (2005-11-25 13:41:00) [19]А зачем это вообще понадобилось - получать в кач-ве рез-та сообщение, которое, кстати, м.б. совершенно различным (при одной и той же ошибке) на разных ОС или на разных локализациях ?
Чем не устраивает Win32Check() и обработка исключения ?
Или, на кр.случай, возврат кода ошибки для последующего анализа ?