Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.045 c
14-1132659255
gn
2005-11-22 14:34
2005.12.11
перевод с английского


10-1108974148
Uran
2005-02-21 11:22
2005.12.11
Экспорт из Excel в dbf


14-1131827082
Джонсон
2005-11-12 23:24
2005.12.11
Microsoft проиграл конкурентам


2-1132921845
brownrat
2005-11-25 15:30
2005.12.11
доступ к компоненте другой программы


2-1132619370
Кейт Тимонс ))
2005-11-22 03:29
2005.12.11
Узнать версию виндовз