Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: 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 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.057 c
1-1082528834
[BAD]Angel
2004-04-21 10:27
2004.04.11
иконка из ярлыка


1-1082614906
JT
2004-04-22 10:21
2004.04.11
HTML Help


14-1079514659
Androgin
2004-03-17 12:10
2004.04.11
Что значят следующие значения в Bios e?


1-1080100990
Лысый
2004-03-24 07:03
2004.04.11
Дата и время


14-1082007907
BaDeVlad
2004-04-15 09:45
2004.04.11
Кто хочет протестировать блокнотик