Вниз
Скачать: CL | DM;

CreateProcess в Win2k   Найти похожие ветки 

 
Onyx   (2004-02-05 09:01) [0]

Почему CreateProcess не хочет перенаправлять вывод в файл при запуске консольного приложения? И хочу заметить, что в Win98 все нормально, а в Win2k никак не хочет.
 
var
   si : STARTUPINFO;
   pi : PROCESS_INFORMATION;
   HFile : Cardinal;
   ComLine : string;
begin
   ComLine:="tasm32.exe /ml 1.asm";
   HFile:= FileCreate("ASMP.tmp");

   ZeroMemory(@si,sizeof(si));        
   si.dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
   si.wShowWindow:=SW_HIDE;      
   si.hStdInput:= GetStdHandle(STD_INPUT_HANDLE);
   si.hStdOutput:= HFile;   //вывод направляем в файл
   si.hStdError:= GetStdHandle(STD_ERROR_HANDLE);
   si.cb:=SizeOf(si);    
   if  CreateProcess(nil, PChar(ComLine), nil, nil, false, 0,
                     nil,nil, si, pi) then
   begin
     WaitForSingleObject( pi.hProcess, INFINITE );
     CloseHandle( pi.hProcess );
     CloseHandle( pi.hThread );
     FileClose( HFile );
   end;
end;


Вот ёще вариант:
begin
   ComLine:="tasm32.exe /ml 1.asm";
   HFile:= FileCreate("ASMP.tmp");
   SetStdHandle(STD_OUTPUT_HANDLE, HFile);

   ZeroMemory(@si,sizeof(si));        
   si.dwFlags:=STARTF_USESHOWWINDOW;
   si.wShowWindow:=SW_HIDE;      
   si.cb:=SizeOf(si);    
   if  CreateProcess(nil, PChar(ComLine), nil, nil, true, 0,
                     nil,nil, si, pi) then
   //запуск процесса с наследованием описателей
   begin
     WaitForSingleObject( pi.hProcess, INFINITE );
     CloseHandle( pi.hProcess );
     CloseHandle( pi.hThread );
     FileClose( HFile );
   end;
end;


И оба эти варианта не хотят работать под Win2k.


 
AKul ©   (2004-02-05 09:50) [1]


> Onyx   (05.02.04 09:01)

Ну это же NT.

Все исправления относятся к 1 варианту.
1. Необходимо разрешить наследование Handle"а файла, например, так (SA: SECURITY_ATTRIBUTES):

  SA.nLength:=sizeof(SA);
  SA.lpSecurityDescriptor:=nil;
  SA.bInheritHandle:=true;
  HFile:=CreateFile("SomeFile.tmp",GENERIC_READ or GENERIC_WRITE,0,
  @SA,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);

2. Разрешить дочернему процессу наследовать Handle"ы родительского:
  if  CreateProcess(nil, PChar(ComLine), nil, nil, true, 0,
                    nil,nil, si, pi) then


 
Onyx   (2004-02-05 10:29) [2]

Попробуем...



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.031 c
3-1081441564
Somebody
2004-04-08 20:26
2004.04.11
http://www.ibase.ru/devinfo/dbexpress.htm


1-1080224872
PiratA
2004-03-25 17:27
2004.04.11
RxLIB


4-1076104310
Абдурахман
2004-02-07 00:51
2004.04.11
чтение куска файла


1-1079933465
kosha80
2004-03-22 08:31
2004.04.11
Создать панель в ИЕ


14-1079191766
Ig
2004-03-13 18:29
2004.04.11
Как в ListView добавить




   Наверх