Topic: Публикация и работа программы в сетевом режиме

Создал программу для работы нескольких пользователей по сети (на MySQL).
Скопировал весь проект со своего ПК вместе с еxе файлом в сетевую папку.
У пользователей на своих ПК есть ярлык на этот exe файл.
Они его запускают и работают.
Когда я делаю очередной релиз, то просто перезаписываю еще раз весь проект в сетевую папку.
Делать инсталляционный файл не хочется, т.к. релизы идут очень часто.
Вопросы:
1. Есть ли возможность сохранять файлы настроек каждого пользователя в сетевой папке (для каждого пользователя свой директорий, например, имя пользователя домена)
2. Накопился мусор в проекте (например, лишние изображения).
Есть ли способ скриптом определять, какие файлы нужны для работы exe файла, чтобы только их автоматом копировать в сетевую папку при очередном релизе?

Re: Публикация и работа программы в сетевом режиме

mikhail_a wrote:

2. Накопился мусор в проекте (например, лишние изображения).
Есть ли способ скриптом определять, какие файлы нужны для работы exe файла, чтобы только их автоматом копировать в сетевую папку при очередном релизе?

Изображения, которые вы вставляли в TImage, хранятся в файле graphics.dll.

Визуальное программирование: блог и телеграм-канал.

Re: Публикация и работа программы в сетевом режиме

mikhail_a wrote:

1. Есть ли возможность сохранять файлы настроек каждого пользователя в сетевой папке (для каждого пользователя свой директорий, например, имя пользователя домена)

Сохранять можно на локальной машине. На примере кода функции определения места хранения настроек видно, что для этого нужно задействовать реестр, а настройки при этом будут храниться в папках, предназначенных для хранения разнообразных данных приложений:

// получение места расположения файла инициализации
function GetSettingsDir:string;
var
  tmpReg: TRegistry;
  tmpSettingsInAppData: boolean;
  tmpExeName: string;
begin
  tmpExeName := ExtractFileName(Application.ExeName);
  tmpReg := TRegistry.Create;
  tmpReg.RootKey := HKEY_CURRENT_USER;
  tmpReg.Access := KEY_READ;
  if tmpReg.OpenKey('Software\MyVisualDatabaseConfigs\'+tmpExeName,False) and (tmpReg.ReadInteger('SettingsInAppData') = 1) then
    Result := GetEnvironmentVariable('APPDATA')+'\MyVisualDatabase\Configs\'+tmpExeName+'\'
  else
    Result := ExtractFilePath(Application.ExeName);
  tmpReg.CloseKey;
  tmpReg.Free;
end;
Визуальное программирование: блог и телеграм-канал.

Re: Публикация и работа программы в сетевом режиме

Спасибо за ответы!
А как можно получить список только тех файлов .fr3, которые используются в проекте?
...
И еще - на форуме пишут, что для работы приложения нужен dcu, а файл pas можно удалить.
А у меня почему-то приложение при удалении .dcu файла работает нормально.
А если .dcu на месте, но нет файла .pas, то приложение не работает.
Это нормально?

Re: Публикация и работа программы в сетевом режиме

mikhail_a wrote:

Спасибо за ответы!
А как можно получить список только тех файлов .fr3, которые используются в проекте?

Пропарсите файл forms.xml, там хранятся сведения об отчётах, открывающихся через кнопки

Post's attachments

Attachment icon fr3.png 34.46 kb, 203 downloads since 2019-01-21 

Визуальное программирование: блог и телеграм-канал.

Re: Публикация и работа программы в сетевом режиме

mikhail_a wrote:

И еще - на форуме пишут, что для работы приложения нужен dcu, а файл pas можно удалить.
А у меня почему-то приложение при удалении .dcu файла работает нормально.
А если .dcu на месте, но нет файла .pas, то приложение не работает.
Это нормально?

Для среды разработки нужен файл .pas, для готового приложения -  .dcu

Визуальное программирование: блог и телеграм-канал.

Re: Публикация и работа программы в сетевом режиме

Я и говорю про готовое приложение.
Скомпилировал проект и выкладываю на сетевую папку:
1. Папка Report
2. Папка Script
3. Файлы:
- dbschema.ini
- forms.xml
- graphics.dll
- my_application.exe
- settings.ini
- tables.ini
(никаких файлов для SQLite не выкладываю, т.к. моя база на MySQL)
Соответственно, пользователи запускают my_application.exe из сетевой папки.
В папке Script лежит только один файл - script.pas
Если его там не будет, то скрипты в приложении не работают.
A вот script.dcu я попробовал удалить и оказывается, что для работы exe файла он не нужен.
Вот и получается, что результат моего эксперимента противоречит информации на форуме о необходимости script.dcu для работы exe файла.

Re: Публикация и работа программы в сетевом режиме

mikhail_a wrote:

Вот и получается, что результат моего эксперимента противоречит информации на форуме....

Результат эксперимента противоречит логике работы MVDB.
Файл script.pas нужен MVDB для компиляции всех скриптов в один файл script.dcu, который использует в своей работе созданная программа.
Если в папке Script после запуска проекта в MVDB не появляется файл script.dcu, можно сделать вывод, что в созданной программе не используются скрипты.

Re: Публикация и работа программы в сетевом режиме

Я же написал, что файл script.dcu есть, но я его удалил ради эксперимента.
И программа работает без него.
Скрипты в программе есть - больше 6000 строк.
Версия MVD 5.1
Может разработчик что-то поменял?

Re: Публикация и работа программы в сетевом режиме

mikhail_a wrote:

Я же написал, что файл script.dcu есть, но я его удалил ради эксперимента.
И программа работает без него.
Скрипты в программе есть - больше 6000 строк.
Версия MVD 5.1
Может разработчик что-то поменял?

специально проверил на одном из проектов, все  работает..

Re: Публикация и работа программы в сетевом режиме

mapcreatormail wrote:

Результат эксперимента противоречит логике работы MVDB.

https://xakep.ru/wp-content/uploads/2016/10/hacker.jpg
Мистика...

Визуальное программирование: блог и телеграм-канал.

Re: Публикация и работа программы в сетевом режиме

mikhail_a wrote:

Может разработчик что-то поменял?

Ничего разработчик не менял. Всё как было, так и есть. И мистики тут нет.
Чтобы разобраться в тонкостях работы программ на высоком и низком уровнях, достаточно почитать про интерпретацию, компиляцию, машинный и байт-код.

А в случае, когда программа отказывается работать с файлом script.dcu, может помочь повторная компиляция. Возможно файл повреждён.
Не знаю как сейчас, но в более ранних версиях MVDB бывали ситуации, когда при запуске проекта программа закрывалась с ошибкой, но продолжала висеть в исполняемых процессах.
Приходилось убивать этот процесс вручную, иначе при повторном запуске проекта начинали появляться ошибки чтения и записи.