powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Запуск внешнего приложение и ожидание его завершения
14 сообщений из 14, страница 1 из 1
Запуск внешнего приложение и ожидание его завершения
    #40001167
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
под win7 32 все работает, под win7 64
получаю

Cannot open file .......... Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.

кусок программы (Delphi 7)для запуска используется ShellExecAndWait из JEDI
вот ее код

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
function ShellExecAndWait(const FileName: string; const Parameters: string;
  const Verb: string; CmdShow: Integer; const Directory: string): Boolean;
var
  Sei: TShellExecuteInfo;
  Res: LongBool;
  Msg: tagMSG;
begin
  ResetMemory(Sei, SizeOf(Sei));
  Sei.cbSize := SizeOf(Sei);
  Sei.fMask := SEE_MASK_DOENVSUBST  or SEE_MASK_FLAG_NO_UI  or SEE_MASK_NOCLOSEPROCESS or
    SEE_MASK_FLAG_DDEWAIT;
  Sei.lpFile := PChar(FileName);
  Sei.lpParameters := PCharOrNil(Parameters);
  Sei.lpVerb := PCharOrNil(Verb);
  Sei.nShow := CmdShow;
  Sei.lpDirectory := PCharOrNil(Directory);
  {$TYPEDADDRESS ON}
  Result := ShellExecuteEx(@Sei);
  {$IFNDEF TYPEDADDRESS_ON}
  {$TYPEDADDRESS OFF}
  {$ENDIF ~TYPEDADDRESS_ON}
  if Result then
  begin
    WaitForInputIdle(Sei.hProcess, INFINITE);
    while WaitForSingleObject(Sei.hProcess, 10) = WAIT_TIMEOUT do
      repeat
        Msg.hwnd := 0;
        Res := PeekMessage(Msg, Sei.Wnd, 0, 0, PM_REMOVE);
        if Res then
        begin
          TranslateMessage(Msg);
          DispatchMessage(Msg);
        end;
      until not Res;
    CloseHandle(Sei.hProcess);
  end;
end;



вот код запуска
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure TDFMEditFrame.EditDescription;
var TempFileName : TFileName;
begin
  TempFileName := PathGetTempPath + 'AbMenuEdt.rtf';
  DescriptionEdit.Lines.SaveToFile(TempFileName);
  ShellExecAndWait(TempFileName,'','',SW_MAXIMIZE);
  Resource.DataSet.Edit;
  DescriptionEdit.Lines.LoadFromFile(TempFileName);
  Resource.DataSet.Post;
end;




может есть какие мысли по этому поводу
зы. в делфи не силен, да и в винде тоже
...
Рейтинг: 0 / 0
Запуск внешнего приложение и ожидание его завершения
    #40001225
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7m
Cannot open file .......... Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.

Может, посмотреть - кем же занят файл?
...
Рейтинг: 0 / 0
Запуск внешнего приложение и ожидание его завершения
    #40001232
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7m
в делфи не силен, да и в винде тоже
где ты взял эту портянку?
верни обратно.

зы: весь код в инторнете - говно! (С)
...
Рейтинг: 0 / 0
Запуск внешнего приложение и ожидание его завершения
    #40001245
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>m7m, сегодня, 08:21 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1329311&msg=22201672][22201672]
>может есть какие мысли по этому поводу
<
посмотри здесь .
...
Рейтинг: 0 / 0
Запуск внешнего приложение и ожидание его завершения
    #40001247
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
22.09.2020 12:25, ВМоисеев пишет:
> посмотри здесь < http://www.delphirus.com/article32.html>.

там насрано
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запуск внешнего приложение и ожидание его завершения
    #40001253
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте такой вариант (не помню, откуда брал, но вроде работало):

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
function ExecProcessAndWait(const Cmd: String): Integer;
  procedure ChkBool(Value: Boolean; const Msg: String);
  begin
    if not Value then
      raise exception.create(Msg);
  end;
var
  ProcessInfo: TProcessInformation;
  hProcess   : THandle;
  ReturnCode : Integer;
  StartupInfo: TStartupInfo;
begin
  FillChar(StartupInfo, SizeOf(StartupInfo), 0);
  ChkBool(CreateProcess(nil, PChar(Cmd), nil, nil, False,
	  CREATE_DEFAULT_ERROR_MODE + NORMAL_PRIORITY_CLASS,
	  NIL, NIL, StartupInfo, ProcessInfo),
	  'Error during CreateProcess');
  hProcess := ProcessInfo.hProcess; // save the process handle
  //Close the thread handle as soon as it is no longer needed
  CloseHandle(ProcessInfo.hThread);
  ReturnCode := WaitForSingleObject(hProcess, INFINITE);
  ChkBool(dword(ReturnCode) <> WAIT_FAILED, 'Error in WaitForSingleObject');
  // The process terminated
  ChkBool(GetExitCodeProcess(hProcess, dword(Result)),
	  'Error in GetExitCodeProcess');
  // Close the process handle as soon as it is no longer needed
  ChkBool(CloseHandle(hProcess),
	  'Error in process Close Handle');
end;


...
Рейтинг: 0 / 0
Запуск внешнего приложение и ожидание его завершения
    #40001260
Фотография Maxim Rusov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CreateProcess <> ShellExecute

Ну и так, в общем случае, нельзя:

CreateProcess(nil, PChar(Cmd), ...
...
Рейтинг: 0 / 0
Запуск внешнего приложение и ожидание его завершения
    #40001262
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
22.09.2020 13:01, Maxim Rusov пишет:
> CreateProcess <> ShellExecute

глубоко!

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запуск внешнего приложение и ожидание его завершения
    #40001270
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дайте хоть контекст.

Кто запускается?
Вы уверены, что то, что вы запускаете, не отдаёт файл на открытие в первую запущенную копию, а само сразу закрывается?
Кто именно показывает "не могу открыть файл"?
Если ваша программа - в каком месте/строке?
Или, может, вообще не ваша?
Кто именно держит файл (проверяется Process Explorer или другими программами )?
...
Рейтинг: 0 / 0
Запуск внешнего приложение и ожидание его завершения
    #40001277
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7mCannot open file .......... Процесс не может получить доступ к файлу, так как этот файл
занят другим процессом.

Устанавливай SHARE_* флаги чтобы можно было открывать файл пока он открыт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запуск внешнего приложение и ожидание его завершения
    #40001303
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо!!!

Кардинально проблема не решилась, однако нашел причину разного поведения
программы под win7 32 и win7 64
В моем случае все банально просто
для .rtf файлов в win7 32 запускался WordPad
а в в win7 64 запускался LibreOffice

заменил ассоциацию для .rtf в win7 64 на WordPad
и все заработало

Пока для меня этого достаточно ибо в данном случае
оно кроме как мне больше никому не нужно
...
Рейтинг: 0 / 0
Запуск внешнего приложение и ожидание его завершения
    #40001304
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
22.09.2020 14:11, m7m пишет:
> заменил ассоциацию

о хоспаде!..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запуск внешнего приложение и ожидание его завершения
    #40001314
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7m
заменил ассоциацию для .rtf в win7 64 на WordPad
и все заработало
Изначально было понятно, что ошибка в делфи этом :)
...
Рейтинг: 0 / 0
Запуск внешнего приложение и ожидание его завершения
    #40001578
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к слову, удобная и надежная функция в jcl (WinExec32AndWait):

https://github.com/project-jedi/jcl/blob/bde454905aac7f961350e5c36af5ad0a4713963b/jcl/source/windows/JclMiscel.pas#L207
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Запуск внешнего приложение и ожидание его завершения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]