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

Вниз

Job Object или CreateProcess   Найти похожие ветки 

 
v][x ©   (2004-03-01 17:52) [0]

Люди, проблема такая:
Запускаю процесс через CreateProcess, помещаю его в Job.
Процесс пытается создать на диске файл и записать в него чего-нибудь. И тут начинается фигня: файл, видимо по причинам TSecurityAttributes, не создается. Че делать люди?
В CreateProcess и CreateJobObject запихиваю стуктуру, заполненную так:

   sa:TSecurityAttributes;
...
   sa.nLength:=SizeOf(sa);
   sa.lpSecurityDescriptor:=nil;
   sa.bInheritHandle:=true;


 
Игорь Шевченко ©   (2004-03-01 18:04) [1]

Что говорит GetLastError ?


 
v][x ©   (2004-03-01 18:11) [2]

GetLastError не вызывал, т.к. процесс создается, запускается и нормально завершается. Даже ни одной ошибки не было.


 
Игорь Шевченко ©   (2004-03-01 18:20) [3]


> Че делать люди?


Вызывать GetLastError


 
v][x ©   (2004-03-01 18:29) [4]

И что будет? Мне не номер ошибки нужен, а убрать ее.
По просбьам трудящихся, вызвал GetLastError, возвращает 126. И что это такое? Как мне права-то проставить?


 
Romkin ©   (2004-03-01 18:53) [5]

Вместо GetLastError вызови raiseLastOSError
Тогда и поймешь, в чем дело


 
v][x ©   (2004-03-01 19:11) [6]

Вызвал:
System Error. Code 126. Не найден указанный модуль.

Все равно не понимаю


 
Игорь Шевченко ©   (2004-03-01 19:20) [7]


> файл, видимо по причинам TSecurityAttributes, не создается

Вот после создания файла и проверяй, почему он не создался.
Слишком мало информации (и кода), чтобы выдать диагноз.


 
v][x ©   (2004-03-01 19:23) [8]

Var hjob:THandle;
   jobli:JOBOBJECT_BASIC_LIMIT_INFORMATION;
   si:TStartupInfo;
   sa:TSecurityAttributes;
   pi:TProcessInformation;
   h:Array[0..1] of THandle;
   dw:DWORD;
   ReturnCode:Cardinal;
begin
   FillChar(si,SizeOf(si),0);
   FillChar(sa,SizeOf(sa),0);

   //????????? ????????? TSecurityAttributes
   sa.nLength:=SizeOf(sa);
   sa.lpSecurityDescriptor:=nil;
   sa.bInheritHandle:=true;

   //????????? ???????? TStartupInfo
   si.cb:=SizeOf(si);
   si.dwFlags:=STARTF_USESHOWWINDOW{ or STARTF_USESTDHANDLES};
   si.wShowWindow:=Show;

   FillChar(jobli,SizeOf(jobli),0);
   //??????????? ????????????? ???????
   jobli.PerJobUserTimeLimit.QuadPart:=CPUTime*10000;
   jobli.LimitFlags:=JOB_OBJECT_LIMIT_JOB_TIME and
                     JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION;
   //???????? ???????
   hjob:=CreateJobObject(@sa,nil);
   SetInformationJobObject(hjob,JobObjectBasicLimitInformation,@jobli,SizeOf(jobli));
   //???????? ????????, ? ????????????? ?????????
   if not CreateProcess(nil,PChar("cmd /c "+Path+" "+Attr),@sa,@sa,true,CREATE_SUSPENDED,nil,nil,si,pi) then
     Result:=GetLastError
   else
   begin
     AssignProcessToJobObject(hjob,pi.hProcess);
     //?????? ????????
     ResumeThread(pi.hThread);
     CloseHandle(pi.hThread);
     h[0]:=pi.hProcess;
     h[1]:=hjob;
     //???????? ????????? ????????, ??? ?????????? ??? SystemTime
     dw:=WaitForMultipleObjects(2,@h,FALSE,SystemTime);
     case dw-WAIT_OBJECT_0 of
       0:
         begin
           //??????? ???????? ??????
           if not GetExitCodeProcess(pi.hProcess,ReturnCode) then
             ReturnCode:=GetLastError;
           Result:=ReturnCode;
         end;
       1:
         begin
           //??????????? CPUTime
           Result:=10001;
         end;
       WAIT_TIMEOUT:
         begin
           TerminateJobObject(hjob,10002);
           Result:=10002;
         end;
    end;

    CloseHandle(pi.hProcess);
   end;{CreateProcess}
  CloseHandle(hjob);
end;


 
v][x ©   (2004-03-01 19:48) [9]

Тьфу ты блин!!!
Приговорить меня к пожизненному растрелу!

Я каталог текущий забыл поменять, процесс в другой каталог файл записывал.

Я уже 4 часа пытаюсь этот код отладить.

Не смею больше задерживать.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.033 c
3-1080822047
Yad
2004-04-01 16:20
2004.05.02
Агрегатные поля


11-1061807748
electric
2003-08-25 14:35
2004.05.02
Как в KOL отправить письмо?


3-1080887851
Belkova
2004-04-02 10:37
2004.05.02
Новый user


3-1081001165
Nous Mellon
2004-04-03 18:06
2004.05.02
Обновление БД


3-1080820167
Vitaly
2004-04-01 15:49
2004.05.02
Oracle + dbf





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