Форум: "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.037 c