Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.02;
Скачать: CL | DM;

Вниз

Как создавать портабельные программы?   Найти похожие ветки 

 
Ya   (2007-11-03 17:09) [0]

Здравствуйте.

Наверняка, кто-то задумывался над этой темой? Я знаю по-меньшей мере один (!) способ создавать такие приложения: при запуске проверять наличие определенной папки в директории программы.

А какие способы знаете вы?


 
Magic Knight Rayareh   (2007-11-03 17:14) [1]

Гениально.


 
boriskb ©   (2007-11-03 17:26) [2]

Мы в восхищении.
Королева в восхищении.


 
FeiFei   (2007-11-03 17:30) [3]

Ya

Что ты делаешь сегодня вечером?


 
Ya   (2007-11-03 17:45) [4]

ок, для юмористов, программистов и тех, кто в восхищении переформулирую вопрос.

Вы пишете простое приложение. По умолчанию приложение читает все настройки из папки в Application Data. Ваша задача - сделать так, чтобы это приложение можно было таскать на флешке, запускать с нее и при этом не сорить на чужих компьютерах. Ваши действия? Какие признаки можно использовать, чтобы вводить приложение в режим чтения настроек из собственной папки?


 
Kolan ©   (2007-11-03 17:53) [5]

> Какие признаки можно использовать, чтобы вводить приложение
> в режим чтения настроек из собственной папки?

Рабочая папка ярлыка?
Реестр?


 
Ya   (2007-11-03 17:57) [6]


> Рабочая папка ярлыка?Реестр?

Возможно, не уловил мысль. Как реестр машины, в которую вставят флешку может быть признаком?

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


 
Zeqfreed ©   (2007-11-03 17:57) [7]

Элементарно. Нужно смонтировать любую папку в ту папку из которой она читает свои настройки перед использованием. После вернуть как было.


 
Jukadze   (2007-11-03 17:58) [8]

Про GetModuleName слышала?


 
Zeqfreed ©   (2007-11-03 18:00) [9]

А проблему понял. Проблема надуманна. Единственно правильный выход это именно параметр запуска, как мне кажется.


 
Ya   (2007-11-03 18:02) [10]


> Элементарно. Нужно смонтировать любую папку в ту папку из
> которой она читает свои настройки перед использованием.
> После вернуть как было.

Да, об этом я сказал в теме. Мне этот способ нравится, но, возможно, есть более элегантный.


> Про GetModuleName слышала?

getmodulename
Get the file name of the currently running application.
Безусловно, это поможет. Осталось подумать, чем.


 
Ya   (2007-11-03 18:04) [11]


> А проблему понял. Проблема надуманна. Единственно правильный
> выход это именно параметр запуска, как мне кажется.

ок, а чем, по твоему мнению, параметр запуска более правилен, относительно проверки на наличие определенной папки?


 
Плохиш ©   (2007-11-03 18:08) [12]

Каких только извращений не придумывают от незнания как определить папку из которой запущена программа :-))


 
Zeqfreed ©   (2007-11-03 18:08) [13]

> Ya   (03.11.07 18:04) [11]

Параметры предназначены для передачи программе дополнительных опций, а папки предназначены для хранения файлов.


 
Ya   (2007-11-03 18:22) [14]

Товарищи, вы совсем разучились думать Тем не менее, я не буду повторять других, говоря, что делфимастер де уже не тот.


> Каких только извращений не придумывают от незнания как определить
> папку из которой запущена программа :-))

Пожалуйста, если тебе что-то не понятно, уточни. Но не надо намекать на то, что я не знаю про функцию ExtractFilePath и то, каким образом поставить между двух скобок ParamStr(0).


> Параметры предназначены для передачи программе дополнительных
> опций, а папки предназначены для хранения файлов.

Настройки программы хранятся в файлах. Файлы хранятся в папке. Выбрать, в какой из папок хранить файлы в данный момент можно ориентируясь на определенный признак. Если признак - параметр запуска /p, к примеру, то файлы можно хранить рядом с программой, если такой параметр запуска не был передан, файлы хранятся в Application Data. Это был вариант, который, как я понял, предлагаешь ты.

Вариант, который рассматривал я: в программе есть определенная функция, которая возвращает путь к папке, в которой лежат файлы настроек. Сейчас она просто возвращает путь до Application Data + подпапка имени программы.
Можно модифицировать эту функцию таким образом, чтобы в зависимости от того, есть ли определенная папка в директории программы, она возвращала путь до этой папки, иначе - Application Data + подпапка имени программы.

1 вариант предусматривает наличие на флешке ярлыка для запуска программы с определенным параметром, 2 вариант предусматривает только наличие папки, что, согласись проще для пользователя. Отсюда и вопрос - чем ярлык лучше, быть может, я о чем то не догадываюсь?


 
DVM ©   (2007-11-03 18:28) [15]

Проблема высосана из пальца.


 
Ya   (2007-11-03 18:30) [16]


> DVM ©   (03.11.07 18:28) [15]
> Проблема высосана из пальца.

Это НЕ проблема. Я пытаюсь понять, какие варианты есть еще.


 
Плохиш ©   (2007-11-03 18:31) [17]


> DVM ©   (03.11.07 18:28) [15]
> Проблема высосана из пальца.

Сильно сомневаюсь в  этом ;-)


 
Jukadze   (2007-11-03 18:31) [18]

Почему нельзя всегда брать данные из папки, которая лежит рядом с запускаемой программой?


 
Ya   (2007-11-03 18:34) [19]


> Почему нельзя всегда брать данные из папки, которая лежит
> рядом с запускаемой программой?

Почитай гайдлайны Microsoft, конкретно для Vista.


 
DVM ©   (2007-11-03 18:35) [20]


> Я пытаюсь понять, какие варианты есть еще.

Чего тут думать то. Инсталлятор программы делает в реестре при инсталляции отметку, что мол программа проинсталлирована в такую то папку. При старте программа проверяет значение записи в реестре. Если папка там совпадает с той, откуда запускают программу, то программу запускают не как портейбл приложение. Иначе, или если ключа нет совсем, программа решает, что она портейбл. В программе есть функция, которая в зависимости от портейбл или не портейбл возвращает путь к файлу настроек.


 
Jukadze   (2007-11-03 18:35) [21]

Ya   (03.11.07 18:34) [19]
Приведи цитату.


 
Kostafey ©   (2007-11-03 18:35) [22]

> [14] Ya   (03.11.07 18:22)

Вообще проблемы не вижу.
параметры читаются из 3-х мест последовательно.

1 При запуске приложения они инициализирутся значениями, заданными в коде.
2 Читаем конфиги приложения, лежашие в одной из поддиректорий прпиложения.
3 Читаем конфиги из прочих мест Application Data + реестр.


 
Ya   (2007-11-03 18:36) [23]


> Чего тут думать то. Инсталлятор программы делает в реестре
> при инсталляции отметку, что мол программа проинсталлирована
> в такую то папку. При старте программа проверяет значение
> записи в реестре. Если папка там совпадает с той, откуда
> запускают программу, то программу запускают не как портейбл
> приложение. Иначе, или если ключа нет совсем, программа
> решает, что она портейбл. В программе есть функция, которая
> в зависимости от портейбл или не портейбл возвращает путь
> к файлу настроек.

Вот. Вполне себе вариант. Спасибо.


 
Ya   (2007-11-03 18:39) [24]


> 2 Читаем конфиги приложения, лежашие в одной из поддиректорий
> прпиложения.3 Читаем конфиги из прочих мест Application
> Data + реестр.

А это не вариант, извините.


 
atruhin ©   (2007-11-03 18:56) [25]

> А это не вариант, извините.

Почему? Например Total Commander так работает, никто не жалуется.


 
DVM ©   (2007-11-03 19:01) [26]


> Почему? Например Total Commander так работает, никто не
> жалуется.

Я думаю, что этот вариант неудобен тем, что одновременно на одном компьютере может быть портейбл и не портейбл версии одного и того же приложения. Портейбл версия таким образом может случайно считать данные не портейбл версии.


 
atruhin ©   (2007-11-03 20:23) [27]

> [26] DVM ©   (03.11.07 19:01)

Ну да, он так работает по умолчанию, естественно позволяет указазать директорию
в параметрах запуска. По моему удобно.


 
Сергей Суровцев ©   (2007-11-03 20:25) [28]

Сделай в программе настройку для пути папки с данными и иди себе с миром.


 
Piter ©   (2007-11-03 21:10) [29]

Ну вы развели болтологию...

Да, согласно современным правилам - программа должна хранить данные в профиле пользователя - или в спец. папке в DaS, или в реестре, в ветке этого пользователя.

Но некоторым нравится, когда все в папке с программой.

Вывод только один - дать пользователю выбрать вариант работы.


 
Kolan ©   (2007-11-03 21:15) [30]

А если запустили с CD диска?


 
Юрий Зотов ©   (2007-11-04 00:39) [31]

Блеск. Ташшуся...


 
turbouser ©   (2007-11-04 00:43) [32]


> Юрий Зотов ©   (04.11.07 00:39) [31]

+1



Страницы: 1 вся ветка

Текущий архив: 2007.12.02;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.032 c
15-1192365094
Alien1769
2007-10-14 16:31
2007.12.02
Антивирус для 64-разрядной Висты


15-1193836277
фыва
2007-10-31 16:11
2007.12.02
Как убрать фон вокруг названия ярлыков на рабочем столе?


2-1194522455
apic
2007-11-08 14:47
2007.12.02
Подключение USB


15-1194247275
Juice
2007-11-05 10:21
2007.12.02
В чем вести проект программисту


2-1194511180
Ega23
2007-11-08 11:39
2007.12.02
Отловить момент активизации фрейма