Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.07.2014, 09:39
VoroneTZ VoroneTZ вне форума
Прохожий
 
Регистрация: 25.07.2014
Адрес: Ставрополь
Сообщения: 4
Версия Delphi: D XE6, 3DGS A8
Репутация: 10
Восклицание CreateProcess Delphi XE6

Привет ребят
столкнулся очень странной для меня проблемой
в общем по порядку
Приложение лаунчер (что то вроде 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 не кривая
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:57.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025