Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.043 c
3-1185045835
barakuda
2007-07-21 23:23
2007.12.02
ExpressQuantumGrid 5 .. доступ к ячейке


2-1194629978
IOrist
2007-11-09 20:39
2007.12.02
Как прогу убрать в фоновый режим


15-1194104709
tarasoff
2007-11-03 18:45
2007.12.02
BPwin ERWin


2-1194697560
alikon1
2007-11-10 15:26
2007.12.02
Конвертирование из поля Edit в нормальный знак.


15-1194343048
wander
2007-11-06 12:57
2007.12.02
lazarus





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский