Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инсталляция программы, Как правильно организовать путь? 
:(
    Опции темы
Лена
Дата 3.4.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: 11
Всего: 11



Помогите разобраться с инсталляцией программы. У меня есть код, который читает настройки из ini файла. Фрагмент кода ниже:

Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{

  AnsiString Path = ExtractFilePath(Application->ExeName);
   Path = Path + "ADO.ini";
   if(FileExists("ADO.ini"))
    {
     Ini = new TIniFile(Path);
     DataModule2->ADOConnection1->Connected = false;
     DataModule2->ADOConnection1->ConnectionString = Ini->ReadString("ADO","ADOConnection","ADOConnection=Provider=MSDASQL.1;Persist Security Info=False;Data Source=Access");
     DataModule2->ADOConnection1->Connected = true;

     sSkinManager1->SkinName = Ini->ReadString("AC","Skin","Office12Style");
     PageControl1->Enabled = true;
    }
    else
        {
         sShowMessage("Нe удалось прочитать настройки соединения. Файл ADO.ini не найден");
         PageControl1->Enabled = false;
         return;
        }
////////////////



Если я запускаю свое приложение из папки, где расположен файл ADO.ini то все нормально. Затем я с помощью программы инсталляции InstallSheld создаю setup.exe. При создании в настройках я прописываю создавать ярлык на Рабочем столе. Так вот, при запуске приложения при щелчке на этот ярлык на Рабочем столе я получаю сообщение из кода выше: "Нe удалось прочитать настройки соединения. Файл ADO.ini не найден". Иду в папку, куда прописала установить программу, вижу там саму программу и файл ADO.ini, почему же срабатывает оператор else при запуске программы с Рабочего стола?
Подскажите, как правильно организовать код выше, чтобы после инсталляции программа запускалась из ярлыка на рабочем столе.
Спасибо.


PM MAIL   Вверх
_hunter
Дата 3.4.2007, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



проверь отладчиком что в Application->ExeName (или MessageBox с ним выведи перед ExtractFilePath)...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ama_kid
Дата 3.4.2007, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 10
Всего: 95



Есть подозрение, что в свойствах ярлыка устанавливается рабочая папка, отличная от папки программы. Тогда FileExists("ADO.ini")!=FileExists(Path) и, следовательно, программа не находит ни в рабочей, ни в системных папках этого файла... Может правильнее написать так? :
Код
...
  Path = Path + "ADO.ini";
   if(FileExists(Path ))
    {
 ...
В этом случае условие палюбасу должно срабатывать при наличии ini-файла в папке программы, и не будет зависеть от свойств ярлыка...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Лена
Дата 4.4.2007, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: 11
Всего: 11



В свойствах ярлыка написано: "C:\Program Files\Access\Access.exe" В папку Access попадает программа и файл ini.

Код ниже:
Код

ShowMessage(Application->ExeName);
AnsiString Path = ExtractFilePath(Application->ExeName);

показывает: C:\Program Files\Access\Access.exe

Если использовать так:
Код

Path = Path + "ADO.ini";
   if(FileExists(Path ))

то все вроде начинает работать нормально. Значит ошибка здесь: if(FileExists("ADO.ini")). Получается в эту функцию, в моем случае, надо передавать весь путь, потому что функция FileExists не находит файл в директории проекта, без полного пути...


PM MAIL   Вверх
dumb
Дата 4.4.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



Цитата(Лена @  4.4.2007,  10:28 Найти цитируемый пост)
надо передавать весь путь, потому что функция FileExists не находит файл в директории проекта, без полного пути...

нет ни одной функции, работающей с файлами/папками, которая "ищет в директории проекта". если не указан полный путь, все функции работают относительно текущей папки(current dir, в свойствах ярлыка зовется "Рабочей папкой"), которая вовсе не обязательно является папкой, куда ты .exe положила. можешь провести эксперимент - ShowMessage(GetCurrentDir()).

либо указывать везде полные пути, собранные по аналогии твоего Path, либо можно при запуске выставлять текущей папку с .exe ( SetCurrentDir(ExtractFileDir(Application->ExeName)) ). только нужно иметь ввиду, что некоторые операции меняют текущую папку, как, например, диалог открытия файлов(если не указана опция ofNoChangeDir).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1136 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.