![]() |
Автоопределение каталога установки при инсталяции и внесение значений в Реест
Привет всем. Перейду сразу к делу.
При запуске любого инсталятора происходит автоопределение каталога установки, а затем внесение значений в реест (думаю это дело рук 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»\«Компания»\«Приложение» Цитата:
Цитата:
Цитата:
Скрытый текст
и никакого «импорта файлов реестра». Коллега, у Вас, к сожалению, весьма извращённое представление о процессах, которые происходят (и должны происходить) при инсталляции приложения. Цитата:
Скрытый текст
Код:
Windows Registry Editor Version 5.00 Цитата:
Цитата:
|
Согласен. Исправлюсь. С REG_SZ я лоханулся конкретно.
Цитата:
Цитата:
Ах да, я просто упаковываю всю директорию установленной программы и хочу добавить все ветки реестра этой программы в инсталляцию для последующего тихого развертывания. И всего то. |
Цитата:
Цитата:
Импортируете файл реестра в проект: Скрытый текст
![]() Вот это, так сказать, Ваш вариант: Скрытый текст
![]() В реальности же он несёт всё те же ошибки, если приложение будет установлено не в «%ProgramFiles%\WinDjView». Потому, после импорта проверяете и правите при необходимости каждый параметр, используя константы или переменные компилятора (а, возможно, и препроцессора), указывающие на путь установки приложения, указываете, как поступать с параметром при инсталляции и при деинсталляции и т.п. Например — «{app}\WinDjView.exe,0». В момент инсталляции константа «{app}» будет заменена реальным путём, выбранным пользователем. Цитата:
P.S. На будущее: smart install maker Inno Setup. Прочие вопросы Скрипты Inno Setup. Помощь и советы [часть 7] |
Решил я опробовать Inno Script Generator, лично мой вердикт - геморойно.
Подумал воспользоваться Inno Script Studio, если все SIM не получится, но не пришлось. Все таки собрал инсталлятор на Smart Install Maker'е 5.0.4.10, который поддреживает тип EXPAND_SZ (До этого была версия помоложе, без данной поддержки, к стати в этом и была проблема). И все отлично, а главное просто. Так зачем все усложнять? Хочу выразить благодарность за уделенное мне время пользователю Iska! Спасибо, что откликнулись на мой зов, и спасибо за expandsz! |
Цитата:
Скрытый текст
![]() Цитата:
hh.exe "mk:@MSITStore:%ProgramFiles%\Smart%20Install%20Maker\rushelp.chm::/variables.html"
Цитата:
Т.е., Вы обязаны использовать, например, такое: Скрытый текст
![]() |
Буду краток. Делаю скрытую установку, то есть без диалоговых окон, инсталляция будет по умолчанию, без вмешательства пользователя. Про импорт файлов реестра в SIM это и так ясно.
Проблема у меня в другом. Собираю инсталлятор. Чищу реестр от всего с чем связан поисковый запрос djv, djvu (ассоциацию файлов и т.д. и т.п). Запускаю собранный инсталлятор, все отрабатывает на ура, но например при запуске любого документа djvu происходит ошибка типа он не ассоциирован с нужным им расширением. Снова очищаю реестр. Запускаю родной инсталлятор от автора данного ПО. И все нормально проходит и ассоциация, и т.д. В общем проблема только в этом. Хотя я думаю проблема в том, что я не создовал ассоциацию в HKCR. А создавал в HKLM. Недавно натолкнулся на эту статью. Буду пробовать. |
Цитата:
Цитата:
Цитата:
И да — оригинальная инсталляция «WinDjView» создаётся именно в HKLM-части: Скрытый текст
Код:
Windows Registry Editor Version 5.00 Цитата:
|
Вся проблема была в том, что 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 все сделал как надо, хотя это не так... |
Цитата:
|
Да точно импортировать. Я перепутал.
|
Разобрались. Едем дальше — как именно Вы посредством «Smart Install Maker» импортируете «значения в реестр»?
|
Ну что ж я совсем дурак?
![]() |
Нашел я причину, теперь все работает нормально.
Причем самый прикол в том, что подумал: а что если? Да не это бред... хотя чем черт не шутит! В общем вся фишка в том, что просто надо удалить обратный слэш из значений хранящих пути. Например: \"C:\Program Files\WinDjView\WinDjView.exe\" \"%1\" имортируемое значение реестра Sim'мом. Надо так "C:\Program Files\WinDjView\WinDjView.exe" "%1". Теперь можно тему закрывать. |
Да кстати тип можно оставить reg_sz даже при использовании системных переменных. Не знаю приведет ли это к фатальному исходу если системный диск будет не С? Хотя переменные выполняют свою работу правильно.
|
Iska, а ты случаем не знаешь есть ли переменные окружения для Sid в реестре?
Просто иногда требуется добавлять кусты реестра в HKU для установок настроек некой учетной записи, но ведь на разных машинах и Sid'ы разные. Может есть какая нибудь переменная указывающая на Sid учетной записи профиля пользователя? |
Цитата:
Цитата:
|
Дело даже не в учетке, а в том как добавить в любую учетку на любой машине твики реестра. Просто существуют переменные среды путей, правда это не одно и тоже, но ведь инсталляторы вносят данные в реестр определяя SID учетки?
|
Цитата:
Цитата:
A drum moons, хотите конкретных советов — отвечайте на вопросы. Вы описываете конкретную ситуацию и Ваше видение, я пытаюсь ответить, что в Вашем видении так, а что не так. |
Да я просто предполагаю, и ни в коем случае не утверждаю, что именно так работает. Просто строю догадки и все.
Исходя из этого так и быть, я скажу более подробней, конкретней. Я хочу собрать тихий инсталлятор, который распаковывает файлы в директорию и вносит данные в реестр(В HKLM и HKU). С этим всем проблем нет, кроме HKU. Я посмотрел куда импортирует нужные кусты родной инсталлятор (Mozilla Firefox 35.0.1.0), об этом написано выше. Так вот с HKLM no problem, a вот с HKU ступор так как пути имеют вид: HKU\SID_учетной_записи\... где sid генерируется системой при инсталяции ОС или входе в систему... (не важно как и когда), в общем SID всегда разный, и в этом загвоздка. Ваше мнение сер? |
Цитата:
Цитата:
|
Цитата:
|
Продемонстрируйте — это значит продемонстрируйте. Можете использовать скриншоты.
|
Так я и использовал скриншоты. Или надо более подробней? Если надо, то могу.
|
Установил родную от мозиллы. Посмотрел реестр, a там только в HKLM все суется. Видать для всех юзверей. Ну и ладно.
Без сервисов яндекса и плагинов браузер летает. Хотя до этого отключал, но не все. Признаюсь мне нравиться, некоторые фишки в яндексе (переводчик и встроенный поисковик этого сервиса). Но все равно интересно, как инсталлятор от Яндекса сумел определить SID (ну или что то типо того). Это не критически важно, но если узнаете, то дайте мне знать, спасибо. |
Цитата:
Понимаю что справку RusHelp.chm даже не открывали (Совет: Почитайте обязательно!)? Цитата:
Код:
Setup.exe /p=D:\WinDjView\ Цитата:
Правильнее будет так: Код:
"%InstallPath%\WinDjView.exe" "%1" Цитата:
Цитата:
Смотрите как это происходит: Код:
"%InstallPath%\WinDjView.exe" /RegisterFileTypes Хочется через реестр? Вот вам через реестр: Действия при инсталляции
Код:
Windows Registry Editor Version 5.00 Действия при деинсталляции
Код:
Windows Registry Editor Version 5.00 Вот пару примеров WinDjView. |
Покажите скриншоты с информацией, на основании которой Вы сделали выводы о:
Цитата:
|
Nordek, но я собираю инсталлы для себя на WPI, с своими заранее выставленными, сконфигурированными настройками, конечно можно использовать ключи тихой установки, но это чревато тем, что потом надо будет настраивать приложение под себя, а это лишние телодвижения. Windjviewer это пройденный этап, и про переменные окружения мне давно известно. Про ключ /p в командной строке для смены каталога установки программы я не знал, снимаю шлапу.
Чем SIM плох я не понимаю, да он проще всяких навороченных inno setup'ов, но так мне не надо создавать всяких диалоговых окон, файлов ответа и т.д. Мне требуется запаковать файлы и добавить кусты реестра и все, тем более это тихая установка, освобождает от лишнего гемора. Да и какой пользователь будет ставить на D:\? Вот Вы сами так часто ставите? Я думаю нет потому как,если ось на другом диске и она полетит, то после переустановки оси все необходимое в реестре для WinDjViewer'а тоже будет потеряно. Я думаю выбор директории не так уж и важен, тем более если инсталлятор правильно вносит данные в реестр. Конечно у пользователя может быть тысяча причин чтобы инсталлировать на другой диск, но на практике такое встречается весьма редко 1 из 100. Iska, вот скрин это уже русская сборка от Моzill'ы (не от яндекса) Ссылка на русскую версию. В чисто английской сборке HKU не присутствует. Думаю можно обойтись и без HKU, взять от английской версии кусты реестра, файлы от русской версии firefox'а + можно прилепить профиль с заранее установленными дополнениями и слить воедино. |
A drum moons, как я и предполагал, Вы некорректно интерпретируете результаты, показанные на приведённом скриншоте.
«S-1-5-21-<machine RID>-500» — это SID учётной записи встроенного администратора (см., например: 2.4.2.4 Well-Known SID Structures). Под которым, как я полагаю, Вы и производите установку. «HKU\S-1-5-21-<machine RID>-500» — реальное положение в реестре загруженного куста текущего (HKCU) пользователя. Т.е., в реальности всё пишется в HKCU, никаких «определений SID» не происходит, да и ни к чему это. Ровно то же самое происходит и ниже, с «HKU\S-1-5-21-<machine RID>-500_CLasses» — это реальное положение в реестре пользовательской части описания классов, которая после её наложения на машинную часть описания классов, отображается в реестре как «HKEY_CLASSES_ROOT». Т.е., и тут нет никаких «определений SID» при инсталляции. Происходит обычная работа с HKCR. Про детали работы с реестром можете почитать здесь же, на сайте: реестр site:www.oszone.net - Поиск в Google, прежде всего — Введение: описание реестра Windows. |
Значит твики добавляются в HKCU, а после работы реестра (слияний и т.д.), изменения отображаются в HKU. Именно в HKCU надо добавлять твики, которые добавлены в HCU. Я Вас правильно понял?
|
Цитата:
Цитата:
Цитата:
|
Ну ладно, раз так, то я покидаю эту планету на некоторое время. Но я еще вернусь. tnx!
|
Iska вытирает скупую мужскую слезу. Мы будем ждать тебя, T-800, модель 101 ;).
|
Время: 09:53. |
Время: 09:53.
© OSzone.net 2001-