![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Привет ребят
столкнулся очень странной для меня проблемой в общем по порядку Приложение лаунчер (что то вроде Steam клиента), первоначально разрабатывалось на D7, теперь же использую DXE6 После перехода на XE6 стало работать не корректно, а точнее функция запуска приложений Код:
procedure TMain.LaunchProg(programId:string); var StartUpInfo: TStartUpInfo; ProcessInfo: TProcessInformation; a,filename:string; FThread: TProcessThread; begin FillChar(StartUpInfo, SizeOf(TStartUpInfo), 0); with StartUpInfo do begin cb := SizeOf(TStartUpInfo); dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; wShowWindow := SW_SHOWNORMAL; end; FillChar(ProcessInfo, SizeOf(ProcessInfo), 0); a:=VSProg.Text[VSProg.GetVisibleParent(VSProg.FocusedNode),1]; //командная строка запуска хранится в строке VirtualTree filename:=GetProgramExe(programId); showmessage(filename); //путь к файлу правильный CreateProcess(PChar(filename),PWideChar('/c '+'"'+a+'"'), nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo); a:=inttostr(ProcessInfo.dwProcessId)+' '+VSProg.Text[VSProg.FocusedNode,1]+'/'+ VSProg.Text[VSProg.GetVisibleParent(VSProg.FocusedNode),1]; ProgList.items.add(a); //лист с открытыми приложениями FThread := TProcessThread.Create(ProcessInfo.hProcess); FThread.Resume; FThread.Text:=a; //присваем потоку номер что бы при закрытии приложение знало какое приложение из листа было закрыто FThread.OnTerminate := myProcessTerminate; end; на Delphi 7 все работало на пятерочку в XE6 все работает правильно, кроме самого CreateProcess что происходит Запускаю приложения по порядку (1.exe,2.exe,3.exe,4.exe) Первый запуск корректный, последующие открывают предыдущее приложение (т.е порядок 1.exe,1.exe,2.exe,3.exe) запуск в режиме отладки показал что CreateProcess передаются правильные параметры файла и командной строки Так же если мы откроем приложение дважды (в порядке 1.exe,2.exe,2.exe), то выдаст ошибку "Файл занят другим процессом" но что происходит 1. открывается 1.exe 2. открывается 1.exe 3. говорит что 2.exe занят другим процессом PS работать с процессами научил меня гугл и копипаст. XE6 не кривая |