Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2012, 16:33   #1
mrbadge
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 48
По умолчанию Запуск программы с параметром

Здравствуйте.
В FormCreate:

Код:
if ParamStr(1)='-log' then
    N7.Click;
Дальше в этой же процедуре есть проверка FileExists на нахождение рядом с exe нужных файлов. Если запускать exe вручную из Explorer'а или из Дельфи (с параметром), то все работает, как и должно. Если же запустить с параметром (и без него) из cmd, то программа уже не видит этих файлов (как будто запускается из другого места). С чем это может быть связано и как этого избежать? Заранее благодарен.
mrbadge вне форума Ответить с цитированием
Старый 19.08.2012, 16:38   #2
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Странно. Проверил, выдает как и во всех остальных случаях, правильный результат. Можно чуть больше кода, что именно неверно обрабатывается?
volvo877 вне форума Ответить с цитированием
Старый 19.08.2012, 16:55   #3
mrbadge
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 48
По умолчанию

Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  ...
begin
  ...
  if ParamStr(1)='-log' then
    N7.Click;
  ...
  if FileExists('cover_Art.bmp') then
    begin
      ...
    end
    else
    begin
      ...
      pm1.Items[3].Click; // если запускаем из cmd, прописывая полный путь
        // (даже без параметром, то попадаем сюда)
    end;
   // дальше идет еще несколько похожих конструкций if then else
end;
все они еще в блоках try except, по except выполняется, по сути, тоже, что в else
mrbadge вне форума Ответить с цитированием
Старый 19.08.2012, 17:02   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Откуда уверенность, что текущим каталогом при старте проги обязательно будет каталог, в котором exe находится? Это далеко не так.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.08.2012, 17:04   #5
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Проверяй так:
Код:
if FileExists(ExtractFilePath(Application.ExeName) +'cover_Art.bmp') then
volvo877 вне форума Ответить с цитированием
Старый 20.08.2012, 00:25   #6
mrbadge
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 48
По умолчанию

Так программа вылетает с ошибкой чтения нулевой ячейки памяти (ручной запуск и из дельфи по прежнему работают)

Кстати, еще странная вещь: с кодом, который описал вторым постом (где файлы не находятся) вываливается меню с просьбой вручную эти файлы указать (как и должно быть), но нужной папки там просто не видно (и некоторых других).

Последний раз редактировалось Stilet; 20.08.2012 в 11:43.
mrbadge вне форума Ответить с цитированием
Старый 20.08.2012, 01:26   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Глупо проводить сравнение строк.
Есть FindCmdLineSwitch, используйте её.
Человек_Борща вне форума Ответить с цитированием
Старый 20.08.2012, 01:47   #8
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Цитата:
Так программа вылетает с ошибкой чтения нулевой ячейки памяти
"Бедному Ванечке везде камушки" (С). У меня не вылетает, у тебя - вылетает. Значит, ищи ошибку в программе. По тем огрызкам, что ты привел, больше ничего сказать невозможно.
volvo877 вне форума Ответить с цитированием
Старый 20.08.2012, 08:37   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, соглашусь с ответами выше - не видя исходного кода - остаётся только гадать, что Вы там накрутили..

во-вторых, перед проверкой параметра нужно обязательно убедиться, что параметры вообще есть:
Код:
if ParamsCount>0 then
   if ParamStr(1)= .....
в-третьих, я бы рекомендовал посмотреть тему "Чтение параметров запуска программы"
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.08.2012, 11:52   #10
mrbadge
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 48
По умолчанию

Всем спасибо, решил все проблемы. Было не очевидно, но при запуске из командной строки сам exe запускается как будто не из обычного места. "Как будто", тк файлы настроек и тд программа создает на обычном месте. Решение: везде прописал ExtractFilePath(Application.ExeName )+"имя файла".
mrbadge вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск файлов с параметром из Excel xamillion Microsoft Office Excel 10 17.09.2015 21:47
[Delphy]Запуск приложения с параметром h3yShadow Помощь студентам 7 15.12.2011 04:29
[Delphi] Запуск процедуры с параметром ZePr Помощь студентам 10 02.02.2011 16:32
Запуск с параметром AnKor94 Общие вопросы Delphi 1 09.01.2011 16:25
запуск с параметром... prizrak1390 Общие вопросы Delphi 4 16.05.2008 22:29