Главная страница
    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.041 c
11-1113005527
серый мЫш
2005-04-09 04:12
2005.12.11
KOLEditBox : действия при потере фокуса.


3-1129820758
Juice
2005-10-20 19:05
2005.12.11
Индекс по TAggregateField


2-1132559466
psa247
2005-11-21 10:51
2005.12.11
Открыть реестр подобно Regmon !


2-1133104703
alishev
2005-11-27 18:18
2005.12.11
Заголовок окна


2-1132637227
Рафик
2005-11-22 08:27
2005.12.11
Из Delphi3 в Delphi7





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский