Главная страница
    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.038 c
9-1068811512
MrAngel
2003-11-14 15:05
2004.05.02
glArrayElementEXT рисует, а вот glDrawArraysEXT не рисует :-)


3-1080919952
Lexer
2004-04-02 19:32
2004.05.02
Interbase и FireBird на одном сервере


7-1078326302
Dmitriy_G
2004-03-03 18:05
2004.05.02
Где скачать Windows 2000 DDK?


14-1081414096
Ivolg
2004-04-08 12:48
2004.05.02
Таймер


14-1081750751
dolmat
2004-04-12 10:19
2004.05.02
Linux or Windows?





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