Настройка программы для других компьютеров
Прислано AMD на Сентябрь 28 2011 06:11:33

Настройка программы для других компьютеров

Хочу, чтобы моя программа работала на другом компьютере, где не установлен C++Builder.

Как сделать, чтобы пpогpамма на C++Builder 3,4,5,6 и т.д. не требовала .bpl, .dll ?




В Project|Options|Packages снять галку с Build with runtime packages,

Project|Options|Linker снять галку с Use dynamic RTL.




Я сделал программу для работы с локальной базой данных, через BDE, как мне сделать чтобы моя программа

работала на другом компьютере ?




Несколько вариантов:



1/ Создать полноценнyю пpогpаммy инсталляции с помощью пpодyктов Install Shield, Wise или подобных.

Указанные пpодyкты использyются чаще всего и оба позволяют включить в инсталляцию BDE + базовые настpойки

(алиасы и пyти). То есть включить в инсталляцию и a) вашу программу и b) BDE.



2/ Cделать инсталляцию BDE отдельным пакетом (в Install Shield'е это делается более чем элементаpно - в пpоект не надо


добавлять ничего, кpоме поддеpжки BDE). Удобно в пpоцессе написания пpогpаммы для одного пользователя. Пеpвый pаз

yстанавливаешь и настpаиваешь и BDE и вашу программу , а затем носишь только новые веpсии пpогpамм.



3/ добавить необходимые файлы из папки BDE к вашему исполняемому модулю:

blw32.dll, idapi32.dll, idr20009.dll, idpdx32.dll для Paradox-таблиц или

iddbas32.dll для DBF-таблиц, bantam.dll, charset.cvb, usa.btl возможно понадобятся и другие,

разместить их в папке с вашей программой.



Доступ к таблицам надо настроить не через псевдонимы (alias'ы), а через пути в

файловой системе. В идеале все таблицы храните в папке программы, тогда нужно


только указать имя таблицы без пути.



Приготовленный таким образом дистрибутив запускается на любой машине без

необходимости инсталляции BDE, максимально устойчив и нечувствителен к смене

имен папок/переинсталляции системы/порчи реестра/влиянии на другие

BDE-приложения.



Как определить какие модули и библиотеки используются в программе



//---------------------------------------------------------------------------


// Получить список загруженных модулей (exe, bpl, dll)

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



TStringList *lst = (TStringList*)Memo1->Lines;

lst->Clear();



char buf [255];

TLibModule *lbm;

AnsiString fname, sname, path, drv, dir, name, ext;




for (lbm = LibModuleList; lbm; lbm = lbm->next)

{ GetModuleFileName((HMODULE)lbm->instance, buf, 254);

fname = AnsiString(buf).Trim().UpperCase();

if (!fname.IsEmpty()) lst->Add(AnsiString(int(lbm->instance)) + ": " + fname);

}



Можно ли указать путь к базе данных (другую директорию)?




У компонента TTable или TQuery в поле DatabaseName нужно прописать путь к каталогу с файлами без последнего слеша.





При централизации посредством TDatabase



Database, например, для dbf настраивается так

DatabaseName = каое-либо имя, пусть DB_aaa

DriverName = STANDART

Params:

PATH=если_кто_не_понял_сюда_поставить_СОБСТВЕННЫЙ_путь_к_файлам_например_F:\Temp


DEFAULT DRIVER=dBase

...что то свое, по желанию



После этого у TTable и TQuery просто проставляем DatabaseName = DB_aaa и пользуемся.






+++