Показать полную графическую версию : [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест
A drum moons
31-01-2015, 19:20
Привет всем. Перейду сразу к делу.
При запуске любого инсталятора происходит автоопределение каталога установки, а затем внесение значений в реест (думаю это дело рук dll библиотек). Вернее определяется буква диска куда будет устанавливаться программа. И вносятся необходимые значения в реест.
К примеру:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DjVu.Document\DefaultIcon]
@="C:\\Program Files\\WinDjView\\WinDjView.exe,0"
и другие...
В многих программах по изготовлению инсталяторов можно добавлять reg файлы. Созданный инсталятор инсталирует приложение, может быть чего то еще делает (все зависит от фантазии автора, не суть) и вносит изменения в реест, которые берет из reg файла. Все бы хорошо, но что если буква локального диска не C, а D? Тогда это приведет к катастрофическим последствиям!
Пробовал устанавливать такое значение @="%PROGRAMFILES%\\WinDjView\\WinDjView.exe,0", но не срослось. Или это в обще не уместно? Может кто знает как заставить систему (пусть хоть через батник) распознавать буквы локальных дисков, передавать эти значения переменным и собственно сгенерировав значения ветвей реестра добавлять их в этот самый реестр. Извиняюсь за ошибки и за столь развернутый вопрос.
При запуске любого инсталятора происходит автоопределение каталога установки, »
Нет. Каталог установки «по умолчанию» задаётся при создании инсталлятора. Рекомендуется использовать путь:
Путь к «Program Files»\«Компания»\«Приложение»
При наличии уже установленного приложения (например, более ранней версии) правильный инсталлятор определяет данный факт и предлагает путь для установки не «по умолчанию», а в каталог ранее установленного приложения.
а затем внесение значений в реест (думаю это дело рук dll библиотек). Вернее определяется буква диска куда будет устанавливаться программа. И вносятся необходимые значения в реест. »
Ещё раз нет. Происходит иначе, нежели Вы описали.
В многих программах по изготовлению инсталяторов можно добавлять reg файлы. Созданный инсталятор инсталирует приложение, может быть чего то еще делает (все зависит от фантазии автора, не суть) и вносит изменения в реест, которые берет из reg файла. »
В разных бредовых псевдоинсталляторах и не такое бывает. В правильных — файл реестра можно импортировать в проект инсталляции, Затем на его основе создаются отдельные записи в проекте, которые затем могут быть использованы при инсталляции для создания разделов, параметров и задания значений параметров реестра. Причём в Вашем примере:
К примеру:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DjVu.Document\DefaultIcon]
@="C:\\Program Files\\WinDjView\\WinDjView.exe,0" »
путь «C:\Program Files\WinDjView\WinDjView.exe» строится по вышеописанным выше мною принципам:
при установке инсталлятор проверяет, не было ли ранее установленной версии приложения «WinDjView»;
при положительном ответе — для установки предлагается путь, куда было ранее установлено это приложение;
при отрицательном — запрашивает у ОС путь к «Program Files», добавляет путь к нему путь «WinDjView» и предлагает для инсталляции его;
…
…
производит в реестре потребные изменения, в их числе — регистрирует тип документа;
…
…
при задании пути к иконке приложения используется ранее определённый путь.
и никакого «импорта файлов реестра».
Коллега, у Вас, к сожалению, весьма извращённое представление о процессах, которые происходят (и должны происходить) при инсталляции приложения.
Пробовал устанавливать такое значение @="%PROGRAMFILES%\\WinDjView\\WinDjView.exe,0", но не срослось.»
Для использования переменных окружения нужно использовать «REG_EXPAND_SZ», а не «REG_SZ». А «REG_EXPAND_SZ» в файле реестра выглядит как набор строк с hex-значениями, например:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\DjVu.Document\DefaultIcon]
"@"=hex(2):25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,\
00,6c,00,65,00,73,00,25,00,5c,00,57,00,69,00,6e,00,44,00,6a,00,56,00,69,00,\
65,00,77,00,5c,00,57,00,69,00,6e,00,44,00,6a,00,56,00,69,00,65,00,77,00,2e,\
00,65,00,78,00,65,00,2c,00,30,00,00,00
Или это в обще не уместно? »
Не могу сказать, специально не проверял.
Может кто знает как заставить систему (пусть хоть через батник) распознавать буквы локальных дисков, передавать эти значения переменным и собственно сгенерировав значения ветвей реестра добавлять их в этот самый реестр. »
Самым правильным вариантом будет использование приличных инсталляторов.
A drum moons
31-01-2015, 21:11
Согласен. Исправлюсь. С REG_SZ я лоханулся конкретно.
В разных бредовых псевдоинсталляторах и не такое бывает. В правильных — файл реестра можно импортировать в проект инсталляции... »
Я использовал Smart Install Maker, там можно просто импортировать файлы реестра.
В правильных — файл реестра можно импортировать в проект инсталляции, Затем на его основе создаются отдельные записи в проекте, которые затем могут быть использованы при инсталляции для создания разделов, параметров и задания значений параметров реестра. »
Недавно поставил Inno Script Generator, но еще не юзал. Можно ли это реализовать, то что прокомментировано выше данной программой?
Ах да, я просто упаковываю всю директорию установленной программы и хочу добавить все ветки реестра этой программы в инсталляцию для последующего тихого развертывания. И всего то.
Я использовал Smart Install Maker, там можно просто импортировать файлы реестра. »
Возможные проблемы Вы сами указали в первом сообщении темы.
Недавно поставил Inno Script Generator, но еще не юзал. Можно ли это реализовать, то что прокомментировано выше данной программой? »
Можно. Но, полагаю, лучше будет взять Inno Script Studio, вроде как это приложение сейчас рекомендовано в качестве IDE для подготовки проектов инсталляций Inno Setup.
Импортируете файл реестра в проект:
http://i.imgur.com/ulKlZ6D.png
Вот это, так сказать, Ваш вариант:
http://i.imgur.com/KIVx4gS.png
В реальности же он несёт всё те же ошибки, если приложение будет установлено не в «%ProgramFiles%\WinDjView».
Потому, после импорта проверяете и правите при необходимости каждый параметр, используя константы или переменные компилятора (а, возможно, и препроцессора), указывающие на путь установки приложения, указываете, как поступать с параметром при инсталляции и при деинсталляции и т.п. Например — «{app}\WinDjView.exe,0». В момент инсталляции константа «{app}» будет заменена реальным путём, выбранным пользователем.
Ах да, я просто упаковываю всю директорию установленной программы и хочу добавить все ветки реестра этой программы в инсталляцию для последующего тихого развертывания. И всего то. »
Мне сложно назвать это инсталляцией.
P.S. На будущее:
smart install maker (http://forum.oszone.net/thread-185692.html)
Inno Setup. Прочие вопросы (http://forum.oszone.net/thread-148707.html)
Скрипты Inno Setup. Помощь и советы [часть 7] (http://forum.oszone.net/thread-278998.html)
A drum moons
01-02-2015, 12:46
Решил я опробовать Inno Script Generator, лично мой вердикт - геморойно.
Подумал воспользоваться Inno Script Studio, если все SIM не получится, но не пришлось.
Все таки собрал инсталлятор на Smart Install Maker'е 5.0.4.10, который поддреживает тип EXPAND_SZ (До этого была версия помоложе, без данной поддержки, к стати в этом и была проблема). И все отлично, а главное просто. Так зачем все усложнять?
Хочу выразить благодарность за уделенное мне время пользователю Iska! Спасибо, что откликнулись на мой зов, и спасибо за expandsz!
на Smart Install Maker'е 5.0.4.10 »
A drum moons, там тоже есть импорт файла реестра в проект:
http://i.imgur.com/WcG1frH.png
Так зачем все усложнять? »
Затем, что это ошибка. Мы ведь выше разбирали сие. Повторю — Ваша инсталляция сделает некорректную регистрацию в несуществующий путь, если пользователь укажет для установки путь:
отличный от «%ProgramFiles%»;
входящий в «%ProgramFiles%», но не «WinDjView», а какой-либо иной.
И то, и другое он вправе делать. Посему Вы обязаны это учитывать. Для выбранного Вами приложения это будет выглядеть так:
Переменные и константы инсталлятора
Переменные и константы - специальные строки, которые заменяются своим значением при создании инсталлятора (константы) или при его запуске (переменные). Все переменные и константы имеют следующий формат: %VariableName%, где VariableName может быть любым текстом. Различие между переменными и константами в том, что значение константы устанавливается при создании инсталлятора, а значение переменной зависит от свойств системы, на которой будет производиться запуск инсталлятора.
…
…
%InstallPath% Директория установки программы, которую выберет пользователь. Она определяется после прохождения пользователем диалога выбора директории
…
Т.е., Вы обязаны использовать, например, такое:
http://i.imgur.com/HPQolnb.png
A drum moons
02-02-2015, 11:00
Буду краток. Делаю скрытую установку, то есть без диалоговых окон, инсталляция будет по умолчанию, без вмешательства пользователя. Про импорт файлов реестра в SIM это и так ясно.
Проблема у меня в другом. Собираю инсталлятор. Чищу реестр от всего с чем связан поисковый запрос djv, djvu (ассоциацию файлов и т.д. и т.п). Запускаю собранный инсталлятор, все отрабатывает на ура, но например при запуске любого документа djvu происходит ошибка типа он не ассоциирован с нужным им расширением. Снова очищаю реестр. Запускаю родной инсталлятор от автора данного ПО. И все нормально проходит и ассоциация, и т.д. В общем проблема только в этом.
Хотя я думаю проблема в том, что я не создовал ассоциацию в HKCR. А создавал в HKLM.
Недавно натолкнулся на эту статью (http://reestrwin.evgb4.ru/hkey_classes_root/).
Буду пробовать.
Про импорт файлов реестра в SIM это и так ясно. »
Ура! А про остальное?
Чищу реестр от всего с чем связан поисковый запрос djv, djvu (ассоциацию файлов и т.д. и т.п). Запускаю собранный инсталлятор, »
Для экспериментов следует не «чистить реестр от всего», а использовать виртуальную машину со свежеустановленной, чистой ОС.
Хотя я думаю проблема в том, что я не создовал ассоциацию в HKCR. А создавал в HKLM. »
HCCR собирается из двух частей — HKLM-части, общей для всех пользователей, и HKCU-части, индивидуальной для каждого.
И да — оригинальная инсталляция «WinDjView» создаётся именно в HKLM-части:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DjVu.Document]
@="DjVu Document"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DjVu.Document\DefaultIcon]
@="C:\\Program Files\\WinDjView\\WinDjView.exe,0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DjVu.Document\shell]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DjVu.Document\shell\open]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DjVu.Document\shell\open\command]
@="\"C:\\Program Files\\WinDjView\\WinDjView.exe\" \"%1\""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DjVu.Document\shell\open\ddeexec]
@="[open(\"%1\")]"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DjVu.Document\shell\open\ddeexec\Application]
@="WinDjView"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DjVu.Document\shell\open\ddeexec\IfExec]
@="[rem open]"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DjVu.Document\shell\open\ddeexec\Topic]
@="System"
Недавно натолкнулся на эту статью. »
Поройтесь на местном сайте (http://www.oszone.net/) — тут изложено не в пример подробнее, со ссылками на документацию и без бредовых выводов.
A drum moons
04-02-2015, 13:19
Вся проблема была в том, что SIM коряво экспортирует значения в реестр. Например:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DjVu.Document\shell\open\command]
@="\"C:\\Program Files\\WinDjView\\WinDjView.exe\" \"%1\"" - как надо.
@="\\\"C:\\Program Files\\WinDjView\\WinDjView.exe\\\" \\\"%1\\\"" - как это делает SIM
Хотя если залезть в реестр, то можно убедиться, что SIM все сделал как надо, хотя это не так...
SIM коряво экспортирует значения в реестр »
Экспортировать можно из реестра. В реестр можно только импортировать. Определитесь.
A drum moons
04-02-2015, 13:41
Да точно импортировать. Я перепутал.
Разобрались. Едем дальше — как именно Вы посредством «Smart Install Maker» импортируете «значения в реестр»?
A drum moons
05-02-2015, 01:16
http://i.imgur.com/WcG1frH.png
A drum moons
05-02-2015, 20:10
Нашел я причину, теперь все работает нормально.
Причем самый прикол в том, что подумал: а что если? Да не это бред... хотя чем черт не шутит!
В общем вся фишка в том, что просто надо удалить обратный слэш из значений хранящих пути.
Например: \"C:\Program Files\WinDjView\WinDjView.exe\" \"%1\" имортируемое значение реестра Sim'мом.
Надо так "C:\Program Files\WinDjView\WinDjView.exe" "%1". Теперь можно тему закрывать.
A drum moons
05-02-2015, 20:26
Да кстати тип можно оставить reg_sz даже при использовании системных переменных. Не знаю приведет ли это к фатальному исходу если системный диск будет не С? Хотя переменные выполняют свою работу правильно.
A drum moons
21-02-2015, 18:51
Iska, а ты случаем не знаешь есть ли переменные окружения для Sid в реестре?
Просто иногда требуется добавлять кусты реестра в HKU для установок настроек некой учетной записи, но ведь на разных машинах и Sid'ы разные. Может есть какая нибудь переменная указывающая на Sid учетной записи профиля пользователя?
Iska, а ты случаем не знаешь есть ли переменные окружения для Sid в реестре? »
Случаем знаю. Их не существует, и не может существовать в принципе. Есть предопределённые SID, соответствующие предопределённым учётным записям.
Просто иногда требуется добавлять кусты реестра в HKU для установок настроек некой учетной записи »
Какой?
A drum moons
21-02-2015, 19:54
Дело даже не в учетке, а в том как добавить в любую учетку на любой машине твики реестра. Просто существуют переменные среды путей, правда это не одно и тоже, но ведь инсталляторы вносят данные в реестр определяя SID учетки?
Дело даже не в учетке, а в том как добавить в любую учетку на любой машине твики реестра. »
Дело в другом. Вы по-прежнему слабо понимаете, что есть инсталляция и вольно трактуете её предназначение.
но ведь инсталляторы вносят данные в реестр определяя SID учетки? »
Нет. Инсталляция может предлагать установку «на машину» или «на пользователя». В первом случае общие настройки приложения хранятся в HKLM и применяются для всех пользователей, во втором случае — хранятся в HKCU и применяются для одного конкретного пользователя, производящего установку (речь именно про общие настройки: в первом случае индивидуальные настройки, вносимые впоследствии конкретным пользователем и хранимые в HKCU, могут перекрывать общие настройки, внесённые при установке в HKLM).
A drum moons, хотите конкретных советов — отвечайте на вопросы. Вы описываете конкретную ситуацию и Ваше видение, я пытаюсь ответить, что в Вашем видении так, а что не так.
A drum moons
21-02-2015, 23:09
Да я просто предполагаю, и ни в коем случае не утверждаю, что именно так работает. Просто строю догадки и все.
Исходя из этого так и быть, я скажу более подробней, конкретней.
Я хочу собрать тихий инсталлятор, который распаковывает файлы в директорию и вносит данные в реестр(В HKLM и HKU). С этим всем проблем нет, кроме HKU. Я посмотрел куда импортирует нужные кусты родной инсталлятор (Mozilla Firefox 35.0.1.0 (https://fx.yandex.ru/download/)), об этом написано выше. Так вот с HKLM no problem, a вот с HKU ступор так как пути имеют вид: HKU\SID_учетной_записи\... где sid генерируется системой при инсталяции ОС или входе в систему... (не важно как и когда), в общем SID всегда разный, и в этом загвоздка. Ваше мнение сер?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.