![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;