нужно написать кастомный инсталлятор. (пожалуйста, не спрашивайте, почему)
вопросов у меня несколько:
1. программы обязательно должны устанавливаться в "Program Files"/"Program Files (x86)" ?
если нет — то куда, и в каких случаях, и почему?
2. чтоб создать ярлык(который будет отображаться в меню "Пуск"), я должен в директории c:\Users\<user>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs создать директорию(кстати, это настоящая директория, или виртуальная? как ее создать?), в которой создать нужные ярлыки при помощи такого кода?
спасибо!
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
UPD3. ИМХО чем изобретать велосипед, лучше потратить день и написать нормальный инсталлер, используя InnoSetup или еще что, которое умеет все делать сам
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, rumit7, Вы писали:
X>вы, наверное, меня не поняли, хоть я и написал "нужно написать кастомный инсталлятор. (пожалуйста, не спрашивайте, почему)"
X>наверное, слово "кастомный" не отображает возложенный на него смысл.
X>нужно создать свой инсталлятор, снуля, для некоторой проги.
так InnoSetup для этого и создан — вы описываете сценарий для Вашего инсталлера, какие фалый куда скопировать, какие иконки где создать на выходе получаете готовый инсталлер который делает все как нужно.
вот так он например можно попросить его создать desktop icon:
Здравствуйте, rumit7, Вы писали:
R>UPD2. Certification requirements for Windows Desktop Apps см. "10. Apps must install to the correct folders by default" ответ на вопрос в какую папку ставить
сейчас чуть-чуть понятней...
а как получить путь к "Program Files"/"Program Files (x86)" директориям? эти пути наверное могут меняться? наверное есть какая-то WINAPI?
R>UPD3. ИМХО чем изобретать велосипед, лучше потратить день и написать нормальный инсталлер, используя InnoSetup или еще что, которое умеет все делать сам
с удовольствием так бы и сделал, а еще лучше — вообще не занимался бы этим. но вынужден.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, rumit7, Вы писали:
R>так InnoSetup для этого и создан
вряд ли оно умеет наш протокол для общения с сервером апдейтов и для получения/применения бинарных diff`ов.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>1. программы обязательно должны устанавливаться в "Program Files"/"Program Files (x86)" ? X>если нет — то куда, и в каких случаях, и почему?
Некоторые приложения, например Chrome, ставятся в %APPDATA%, чтобы их мог ставить не-администратор.
Но обычно установка программы требует администратора.
Вообще программы обычно спрашивают куда, хотя часто эту опцию не выставляют до нажатия какого-нить "advanced". Program Files — просто значение по умолчанию.
X>2. чтоб создать ярлык(который будет отображаться в меню "Пуск"), я должен в директории c:\Users\<user>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs создать директорию(кстати, это настоящая директория, или виртуальная? как ее создать?), в которой создать нужные ярлыки при помощи такого кода?
Да, просто создавать директорию и ярлыки.
Ну или даже просто один ярлык без директории, сейчас так моднее.
Директории узнаются через SHGetKnownFolderPath или SHGetFolderPath.
Здравствуйте, niXman, Вы писали:
X>а как получить путь к "Program Files"/"Program Files (x86)" директориям? эти пути наверное могут меняться? наверное есть какая-то WINAPI?
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, rumit7, Вы писали:
R>>так InnoSetup для этого и создан X>вряд ли оно умеет наш протокол для общения с сервером апдейтов и для получения/применения бинарных diff`ов.
т.е. нужно при инсталле проверять имеются updates или нет? и если имеются обновления скачиваем и ставим уже их? так?
UPD. а что с общением с пользователем? как Вы собираетесь спросить у него в какую папку ставить? для всех пользователей устанавливаемся или только для текущего? создавать иконку на рабочем столе или нет? как вы собираетесь показывать прогресс бар? в консоли или ui какой забабахаете?
Здравствуйте, rumit7, Вы писали:
R>т.е. нужно при инсталле проверять имеются updates или нет?
это уже оффтоп, но: инсталлер онлайновый, который общается с сервером апдейтов, а не с файловым хранилищем.
при установке наличие апдейтов не проверяется, т.к. локальных файлов попросту нет. просто выполняется diff между null(локальным файлом) и реальным файлов. результатом такого diff`а будет полный файл, который присылает сервер апдейтов, и который локально применяется бинарным patch.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, rumit7, Вы писали:
R>>т.е. нужно при инсталле проверять имеются updates или нет? X>это уже оффтоп, но: инсталлер онлайновый, который общается с сервером апдейтов, а не с файловым хранилищем. X>при установке наличие апдейтов не проверяется, т.к. локальных файлов попросту нет. просто выполняется diff между null(локальным файлом) и реальным файлов. результатом такого diff`а будет полный файл, который присылает сервер апдейтов, и который локально применяется бинарным patch.
не вижу никаких проблем, чтобы не использовать здесь InnoSetup. Ну хозяин барин, но я как нелюбитель возни с GUI так говорю
Здравствуйте, rumit7, Вы писали:
R>а что с общением с пользователем? как Вы собираетесь спросить у него в какую папку ставить? для всех пользователей устанавливаемся или только для текущего? создавать иконку на рабочем столе или нет? как вы собираетесь показывать прогресс бар? в консоли или ui какой забабахаете?
UI я уже сделал, с использованием Qt5.
R>как Вы собираетесь спросить у него в какую папку ставить?
за этим я сюда и пришел, чтоб понять, стОит ли пользователю предлагать выбор? исходя из ссылки на M$, которую вы привели, правильно устанавливать в "Program Files"/"Program Files (x86)". это, наверное, и будет путем по умолчанию, если юзер не выбрал другой.
R>для всех пользователей устанавливаемся или только для текущего?
ну, если установка происходит в "Program Files"/"Program Files (x86)" — программа будет доступна всем пользователям, нужно только для них создать ярлыки в их директория(насколько я пока понимаю).
R>создавать иконку на рабочем столе или нет?
есть в инсталлере такие чек-боксы(ярлыки в меня Пуск, рабочий стол, quck launch). в зависимости от их состояния должны создаваться ярлыки.
осталось только понять, как создавать их, с помощью того кода, ссылку на который я привел в в первом посте...
а "quck launch" это тоже какая-то директория, в которой нужно просто создать ярлык?
ща погуглю...
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
R>>для всех пользователей устанавливаемся или только для текущего? X>ну, если установка происходит в "Program Files"/"Program Files (x86)" — программа будет доступна всем пользователям, нужно только для них создать ярлыки в их директория(насколько я пока понимаю).
Вот у меня например два раздела — C и D, и program files имеется на обоих. Вы б всё же не изобретали велосипед, а воспользовались уже имеющимся windows installer.
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, rumit7, Вы писали:
R>>а что с общением с пользователем? как Вы собираетесь спросить у него в какую папку ставить? для всех пользователей устанавливаемся или только для текущего? создавать иконку на рабочем столе или нет? как вы собираетесь показывать прогресс бар? в консоли или ui какой забабахаете?
X>UI я уже сделал, с использованием Qt5.
теперь понятно..
там еще другие вопросы есть: если во время установки что-то навернется, роллбэк придется самому писать; что на счет uninstaller его тоже придется отдельно писать. в этом смысле InnoSetup мне понравился, много чего сам разруливает, ну не без помощи прямых рук конечно
Здравствуйте, Слава, Вы писали:
С>Вы б всё же не изобретали велосипед, а воспользовались уже имеющимся windows installer.
"изобретать велосипед" — это пытаться скрестить нашу систему инсталлов/апдейтов с тем, что для этого не предназначено.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, rumit7, Вы писали:
R>там еще другие вопросы есть: если во время установки что-то навернется, роллбэк придется самому писать; что на счет uninstaller его тоже придется отдельно писать. в этом смысле InnoSetup мне понравился, много чего сам разруливает, ну не без помощи прямых рук конечно
анинсталлер писать не нужно, просто создается ярлык на инсталлер с именем uninstall, который запускает инсталлер и передает ему аргумент "--uninstall", и все.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, Слава, Вы писали:
С>>Вы б всё же не изобретали велосипед, а воспользовались уже имеющимся windows installer. X>"изобретать велосипед" — это пытаться скрестить нашу систему инсталлов/апдейтов с тем, что для этого не предназначено.
ваша система — это просто отдельный процесс способный скачивать нужные файлы в указанную директорию.. для всего остального есть MasterC готовые решения.
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, rumit7, Вы писали:
R>>там еще другие вопросы есть: если во время установки что-то навернется, роллбэк придется самому писать; что на счет uninstaller его тоже придется отдельно писать. в этом смысле InnoSetup мне понравился, много чего сам разруливает, ну не без помощи прямых рук конечно
X>анинсталлер писать не нужно, просто создается ярлык на инсталлер с именем uninstall, который запускает инсталлер и передает ему аргумент "--uninstall", и все.
это ничего не меняет, суть та же код разрастается там где мог быть простым..
что на счет роллбэка?
UPD. например в InnoSetup для uninstall в большинстве случаев ничего писать не нужно, он сам создает его автоматом.. в редких случаях (например что-бы удалить свой драйвер), нужно написать отдельную функцию.
UPD2. в вашем случае нужно запомнить куда устанавливались файлы, создавались ли иконки и т.д. и удалить их вручную написав код..
Здравствуйте, niXman, Вы писали:
R>>создавать иконку на рабочем столе или нет? X>есть в инсталлере такие чек-боксы(ярлыки в меня Пуск, рабочий стол, quck launch). в зависимости от их состояния должны создаваться ярлыки. X>осталось только понять, как создавать их, с помощью того кода, ссылку на который я привел в в первом посте...
В результате у тебя получится кривенький мало где нормально работающий инсталлятор
X>а "quck launch" это тоже какая-то директория, в которой нужно просто создать ярлык? X>ща погуглю...