Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CreateProcess трабл


ORMADA ©   (2005-06-23 13:41:00) 

Доб день!Делаю запуск приложения следующим образом

function ExecAndWait(const AFileName, AParams: string): boolean;
var
 StartInfo: TStartupInfo;
 ProcInfo: TProcessInformation;
 CmdLine: string;
begin
 { Помещаем имя файла между кавычками, с соблюдением всех пробелов в именах Win9x }
 CmdLine := '"' + AFilename + '" ' + AParams;
 FillChar(StartInfo, SizeOf(StartInfo), #0);
 with StartInfo do
 begin
   cb := SizeOf(StartInfo);
   dwFlags := STARTF_USESHOWWINDOW;
   wShowWindow := SW_SHOW;
 end;
 Screen.Cursor := crHourGlass;
 Result := CreateProcess(nil, PAnsiChar(CmdLine), nil, nil, false,
    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,
   PAnsiChar(ExtractFilePath(AFilename)), StartInfo, ProcInfo);
 { Ожидаем завершения приложения }
 if Result then
 begin
   WaitForInputIdle(ProcInfo.hProcess, INFINITE);
   CloseHandle(ProcInfo.hProcess);
   CloseHandle(ProcInfo.hThread);
 end;
 Screen.Cursor := crDefault;
end;

и никак не хочет запускаться  
ExecAndWait('c:\winnt\system32\services.msc','/s');

ExecAndWait формирует строчку типа "c:\winnt\system32\services.msc" /s
хотя через пуск\выполнить всё запускается нормально
в чём косяк ?


ORMADA   (2005-06-24 09:50:00) [1]

вот так получается нада делать

 if ShellExecute(Application.Handle, 'open', PAnsiChar('"'+AFileName+'"'),PAnsiChar(AParams),
   PAnsiChar(ExtractFilePath(AFileName)), SW_SHOWNORMAL) <= 32 then //если ошибка, то возвращаемый код <=32
   RaiseLastWin32Error;

так вроде работает :)


Kerk   (2005-06-24 09:34:00) [2]

ShellExecute(0,'open','blabla.bmp',SW_SHOWNORMAL);


ORMADA   (2005-06-24 09:32:00) [3]

2 Kerk тогда как сделать чтоб запускались все файлы ?


Kerk   (2005-06-24 09:29:00) [4]

ORMADA ©   (24.06.05 9:27) [8]
как объяснить ?


Ну примерно так же как и blablabla.bmp она тоже запустит. Ибо ассоциации файлов.


ORMADA   (2005-06-24 09:27:00) [5]

2 alpet тогда как вында запускает всё это дело через командную строку ?
1 - cmd
2- "C:\WINNT\system32\services.msc" /s
фсё работает
как объяснить ?


alpet   (2005-06-23 15:40:00) [6]

Вернее так:
ExecAndWait ('C:\Windows\System32\mmc.exe', 'C:\Windows\System32\services.msc');


alpet   (2005-06-23 15:34:00) [7]

services.msc - это не исполняемый файл. Надо запускать через MMC:
CreateProcess (nil, 'mmc \windows\system32\services.msc', ...);


ORMADA   (2005-06-23 14:34:00) [8]

2 kerk не панял в чём прикол...
> CREATE_NEW_CONSOLE
выкинул
не работает
> "c:\winnt\system32\services.msc" /s
дык да
мало ли что в эту функция попадёт мобыть
c:\win 2000\system32\services.msc и тогда без " не отработает


VMcL   (2005-06-23 13:55:00) [9]

>> BiN ©   (23.06.05 13:44) [2]

if not Result then
 RaiseLastOSError;


ИМХО, так лучше.


BiN   (2005-06-23 13:46:00) [10]

Kerk ©   (23.06.05 13:44) [1]


Ха, действительно, а я и не заметил. -)


Kerk   (2005-06-23 13:44:00) [11]


> CREATE_NEW_CONSOLE


> "c:\winnt\system32\services.msc" /s

хм...


BiN   (2005-06-23 13:44:00) [12]

if Result then
 begin
  ...
 end
 else
   RaiseLastOSError;


Наверх

Титульная страница Поиск, карта сайта Написать письмо