Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.035 c
14-1132355247
Eraser
2005-11-19 02:07
2005.12.11
Знатокам алгоритмов сжатия, в частности, ZLib


1-1131711566
olhovik
2005-11-11 15:19
2005.12.11
Проблема в ListBoxе


8-1120939291
line
2005-07-10 00:01
2005.12.11
Вопрос о режимах смешивания изображений.


14-1132407960
nbv
2005-11-19 16:46
2005.12.11
Скрытие кода


2-1132947934
Kot
2005-11-25 22:45
2005.12.11
Нажтая клавиша в кодировке ANSI





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский