Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблемы с загрузкой из файла в приложении, которое запускается другим приложением / 25 сообщений из 42, страница 1 из 2
23.01.2019, 15:17
    #39763573
фываенг
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
Подскажите пожалуйста в чём проблема
Не консольное приложение должно запускать консольное

Вот код не консольного:

Код: 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.
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  winExec(pansiChar('..\..\..\Project1.exe'), SW_SHOW);  
end;

end.



Вот код консольного:

Код: 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.
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Classes;

var
  L: TStringList;
  a: string;

begin
  L := TStringList.Create;
//  L.LoadFromFile('text.txt');

  writeln('Если мы видим этот текст,');
 
  readLn(a);
  // и потом  ждём нажатия клавиши вот тут, то всё нормально

end.



Вот так - запускается

Если раскомментировать строку L.LoadFromFile('text.txt'); консольное приложение открывается и тут же закрывается
Если вместо winExec использовать CreateProcess - тоже самое
...
Рейтинг: 0 / 0
23.01.2019, 15:25
    #39763579
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
фываенг,

а если убрать обращения к консоли - readln, writeln?
...
Рейтинг: 0 / 0
23.01.2019, 15:29
    #39763585
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
фываенгЕсли раскомментировать строку L.LoadFromFile('text.txt'); консольное приложение открывается и тут же закрываетсяПотому, что в LoadFromFile происходит исключение (вангую, "Файл не найден"), и потому, т.к. нет обработчика исключения, поток завершается (а вместе с ним и процесс, т.к. поток один).
Замени

Код: pascal
1.
L.LoadFromFile('text.txt');


на
Код: pascal
1.
2.
3.
4.
5.
try
  L.LoadFromFile('text.txt');
except
  on E: Exception do writeln('Исключение: ' + E.Message);
end;


И увидешь, верно ли я наванговал.
...
Рейтинг: 0 / 0
23.01.2019, 15:32
    #39763587
фываенг
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
YuRock, нононо

Файл найден
Я код (except
on E: Exception do.......) просто из сообщения убрал, а так он есть
...
Рейтинг: 0 / 0
23.01.2019, 15:34
    #39763589
фываенг
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
YuRock,

И вообще
Я самое главное забыл сказать

Консольное приложение работает с L.LoadFromFile('text.txt');, как надо если его запускать просто (то есть просто двойным кликом)
...
Рейтинг: 0 / 0
23.01.2019, 15:40
    #39763597
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
фываенг,

протоколируйте работу консольного приложения. Каждую строку кода. Записывайте в файл лога результат. Может с доступом чего не так.
Когда вы указываете просто 'text.txt', то рассчитываете на один относительный путь. Когда запускаете процессом, то относительный путь другой. В этом может быть причина.
...
Рейтинг: 0 / 0
23.01.2019, 15:45
    #39763603
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
фываенгЯ код (except
on E: Exception do.......) просто из сообщения убрал, а так он естьИ какой же текст исключения?
...
Рейтинг: 0 / 0
23.01.2019, 15:47
    #39763606
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
фываенгФайл найденЕсли он твоими глазами найден, или программой при "запуске двойным кликом", это не значит, что он будет найден, когда изменится CurrentDirectory.
...
Рейтинг: 0 / 0
23.01.2019, 15:55
    #39763611
фываенг
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
goldmi45,

Ахренеть чувак да ты прав!
Заменил путь на абсолютный и запустилось как надо
Вот это да
Странновато конечно, с одной стороны, потому что, что же, если такая ситуация все пути абсолютными писать
Спасибо

YuRock ты кстати всё правильно наванговал но я не сразу это понял потому что я не там поставил sleep
...
Рейтинг: 0 / 0
23.01.2019, 15:56
    #39763613
фываенг
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
YuRock,

Спасибо!
...
Рейтинг: 0 / 0
23.01.2019, 16:02
    #39763622
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
фываенг,

ShellExecute, ShellExecuteEx
...
Рейтинг: 0 / 0
23.01.2019, 16:14
    #39763636
фываенг
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
goldmi45,

А, так вот в чём разница
Там даже в названии функции написано Create Process

Это всё потому что я невнимательно читал 13 заповедей GunSmoker'a
...
Рейтинг: 0 / 0
23.01.2019, 16:19
    #39763643
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
фываенгчто же, если такая ситуация все пути абсолютными писатьИх вообще нужно всегда абсолютными писать. На CurrentDirectory никогда не надеяться. Либо контролировать её, при необходимости - устанавливать через SetCurrentDirectory перед работой с относительными путями (но всё это изврат).

Если хочешь открывать файл, который лежит "возле экзешника", то получить полный путь к нему можно так:
Код: pascal
1.
ExtractFilePath( ParamStr( 0 ) ) + 'text.txt'


Можешь завести переменную и инициализировать её один раз - что-то типа
Код: pascal
1.
sAppPath := ExtractFilePath( ParamStr( 0 ) );


И потом уже можно использовать её всегда - этот путь будет всегда верным.
Код: pascal
1.
sAppPath + 'text.txt'
...
Рейтинг: 0 / 0
23.01.2019, 16:33
    #39763671
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
фываенгЭто всё потому что я невнимательно читал 13 заповедей GunSmoker'a А самое главное в данном случае прочел ?
...
Рейтинг: 0 / 0
23.01.2019, 17:28
    #39763739
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
YuRockЕсли хочешь открывать файл, который лежит "возле экзешника", то получить полный путь к нему можно так:
Код: pascal
1.
ExtractFilePath( ParamStr( 0 ) ) + 'text.txt'

А еще лучше получить путь не экзешника, а своего модуля
Код: pascal
1.
ExtractFilePath(GetModuleName(HInstance)) + 'text.txt'
...
Рейтинг: 0 / 0
23.01.2019, 19:42
    #39763811
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
_Vasilisk_YuRockЕсли хочешь открывать файл, который лежит "возле экзешника", то получить полный путь к нему можно так:
Код: pascal
1.
ExtractFilePath( ParamStr( 0 ) ) + 'text.txt'


А еще лучше получить путь не экзешника, а своего модуля
Код: pascal
1.
ExtractFilePath(GetModuleName(HInstance)) + 'text.txt'


Это для случая, когда надо искать файл "возле модуля". Для случая "возле экзешника" - не всегда подойдет.
...
Рейтинг: 0 / 0
23.01.2019, 19:52
    #39763813
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
YuRockЭто для случая, когда надо искать файл "возле модуля". Для случая "возле экзешника" - не всегда подойдет.В 90% ищут свои файлы. А свои файлы логично складывать возле своего модуля
...
Рейтинг: 0 / 0
23.01.2019, 19:56
    #39763815
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
_Vasilisk_YuRockЭто для случая, когда надо искать файл "возле модуля". Для случая "возле экзешника" - не всегда подойдет.В 90% ищут свои файлы. А свои файлы логично складывать возле своего модуля
У меня часто плугины смотрят ини-файл экзешника (который лежит возле экзешника), чтобы прочитать кое-какие параметры.
А плугины лежат в папке <Там, где экзешник>\Plugins
...
Рейтинг: 0 / 0
23.01.2019, 19:58
    #39763816
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
Понятно, что правильней передать этот путь (и эти параметры) в плугины при их инициализации, но иногда ломает.
...
Рейтинг: 0 / 0
23.01.2019, 20:24
    #39763824
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
Я извиняюсь заранее, интересно просто:
ТС на ф права смотрел? Кто файло-то занял и мешает?
...
Рейтинг: 0 / 0
23.01.2019, 22:17
    #39763843
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
YuRockЕсли хочешь открывать файл, который лежит "возле экзешника", то получить полный путь к нему можно так:
Код: pascal
1.
ExtractFilePath( ParamStr( 0 ) ) + 'text.txt'


Поосторожнее с такими советами. На дворе 2019 год, и линукс в дельфях тоже не за горами
...
Рейтинг: 0 / 0
23.01.2019, 22:20
    #39763845
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
ДокНа дворе 2019 год, и линукс в дельфях тоже не за горами

А что, там файлы не лежат рядом с экзешниками или парсинг пути работает как-то иначе?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.01.2019, 05:58
    #39763913
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
Док,

Ну да, я ж вроде без PathDelimeter обошелся? :)
...
Рейтинг: 0 / 0
24.01.2019, 10:18
    #39764027
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
Dimitry SibiryakovА что, там файлы не лежат рядом с экзешниками или парсинг пути работает как-то иначе?

Бывают всякие извраты, что софт лежит где-нибудь в /bin, либы в /user, а конфиги в /etc
...
Рейтинг: 0 / 0
24.01.2019, 11:14
    #39764088
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с загрузкой из файла в приложении, которое запускается другим приложением
Василий 2,
да и в винде 'благодаря' uac'у файлы уже давно рядом не лежат.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблемы с загрузкой из файла в приложении, которое запускается другим приложением / 25 сообщений из 42, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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