Главная страница
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.058 c
14-1082014126
}|{yk
2004-04-15 11:28
2004.04.11
Чем грозит?


14-1082573409
jack128
2004-04-21 22:50
2004.04.11
Глюк - не глюк, но что то не то в TComponent


1-1079961519
sucer
2004-03-22 16:18
2004.04.11
Как Прочитать данные из ячеек из файла EXCEL?


3-1079361821
ceval
2004-03-15 17:43
2004.04.11
ComboBox се отбражалось одно а поиск шел по


7-1075901785
voron
2004-02-04 16:36
2004.04.11
Определение даты создания файла!