Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест

Аватара пользователя
A drum moons

Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест

Сообщение A drum moons »

Привет всем. Перейду сразу к делу.

При запуске любого инсталятора происходит автоопределение каталога установки, а затем внесение значений в реест (думаю это дело рук 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", но не срослось. Или это в обще не уместно? Может кто знает как заставить систему (пусть хоть через батник) распознавать буквы локальных дисков, передавать эти значения переменным и собственно сгенерировав значения ветвей реестра добавлять их в этот самый реестр. Извиняюсь за ошибки и за столь развернутый вопрос.
Аватара пользователя
Iska

Re: Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест

Сообщение Iska »

Цитата A drum moons:



При запуске любого инсталятора происходит автоопределение каталога установки,
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




Нет. Каталог установки «по умолчанию» задаётся при создании инсталлятора. Рекомендуется использовать путь:



Код:

Код: Выделить всё

Путь к «Program Files»\«Компания»\«Приложение»

При наличии уже установленного приложения (например, более ранней версии) правильный[/i] инсталлятор определяет данный факт и предлагает путь для установки не «по умолчанию», а в каталог ранее установленного приложения.




Цитата A drum moons:



а затем внесение значений в реест (думаю это дело рук dll библиотек). Вернее определяется буква диска куда будет устанавливаться программа. И вносятся необходимые значения в реест.
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




Ещё раз нет. Происходит иначе, нежели Вы описали.




Цитата A drum moons:



В многих программах по изготовлению инсталяторов можно добавлять reg файлы. Созданный инсталятор инсталирует приложение, может быть чего то еще делает (все зависит от фантазии автора, не суть) и вносит изменения в реест, которые берет из reg файла.
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




В разных бредовых псевдоинсталляторах и не такое бывает. В правильных — файл реестра можно импортировать в проект инсталляции, Затем на его основе создаются отдельные записи в проекте, которые затем могут быть использованы при инсталляции для создания разделов, параметров и задания значений параметров реестра. Причём в Вашем примере:


Цитата A drum moons:



К примеру:

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DjVu.Document\DefaultIcon]

@="C:\\Program Files\\WinDjView\\WinDjView.exe,0"
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




путь «C:\Program Files\WinDjView\WinDjView.exe» строится по вышеописанным выше мною принципам:



Скрытый текст

[spoiler]при установке инсталлятор проверяет, не было ли ранее установленной версии приложения «WinDjView»;при положительном ответе — для установки предлагается путь, куда было ранее установлено это приложение;при отрицательном — запрашивает у ОС путь к «Program Files», добавляет путь к нему путь «WinDjView» и предлагает для инсталляции его;……производит в реестре потребные изменения, в их числе — регистрирует тип документа;……при задании пути к иконке приложения используется ранее определённый путь.[/spoiler]




и никакого «импорта файлов реестра».



Коллега, у Вас, к сожалению, весьма извращённое представление о процессах, которые происходят (и должны происходить) при инсталляции приложения.




Цитата A drum moons:



Пробовал устанавливать такое значение @="%PROGRAMFILES%\\WinDjView\\WinDjView.exe,0", но не срослось.
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




Для использования переменных окружения нужно использовать «REG_EXPAND_SZ», а не «REG_SZ». А «REG_EXPAND_SZ» в файле реестра выглядит как набор строк с hex-значениями, например:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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:



Или это в обще не уместно?
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




Не могу сказать, специально не проверял.




Цитата A drum moons:



Может кто знает как заставить систему (пусть хоть через батник) распознавать буквы локальных дисков, передавать эти значения переменным и собственно сгенерировав значения ветвей реестра добавлять их в этот самый реестр.
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




Самым правильным вариантом будет использование приличных[/i] инсталляторов.
Аватара пользователя
A drum moons

Re: Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест

Сообщение A drum moons »

Согласен. Исправлюсь. С REG_SZ я лоханулся конкретно.




Цитата Iska:



В разных бредовых псевдоинсталляторах и не такое бывает. В правильных — файл реестра можно импортировать в проект инсталляции...
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




Я использовал Smart Install Maker, там можно просто импортировать файлы реестра.




Цитата Iska:



В правильных — файл реестра можно импортировать в проект инсталляции, Затем на его основе создаются отдельные записи в проекте, которые затем могут быть использованы при инсталляции для создания разделов, параметров и задания значений параметров реестра.
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




Недавно поставил Inno Script Generator, но еще не юзал. Можно ли это реализовать, то что прокомментировано выше данной программой?



Ах да, я просто упаковываю всю директорию установленной программы и хочу добавить все ветки реестра этой программы в инсталляцию для последующего тихого развертывания. И всего то.
Аватара пользователя
Iska

Re: Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест

Сообщение Iska »

Цитата A drum moons:



Я использовал Smart Install Maker, там можно просто импортировать файлы реестра.
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




Возможные проблемы Вы сами указали в первом сообщении темы.




Цитата A drum moons:



Недавно поставил Inno Script Generator, но еще не юзал. Можно ли это реализовать, то что прокомментировано выше данной программой?
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




Можно. Но, полагаю, лучше будет взять Inno Script Studio, вроде как это приложение сейчас рекомендовано в качестве IDE для подготовки проектов инсталляций Inno Setup.



Импортируете файл реестра в проект:



Скрытый текст

[spoiler][/spoiler]






Вот это, так сказать, Ваш вариант:



Скрытый текст

[spoiler]Изображение[/spoiler]




В реальности же он несёт всё те же ошибки, если приложение будет установлено не в «%ProgramFiles%\WinDjView».



Потому, после импорта проверяете и правите при необходимости каждый
параметр, используя константы или переменные компилятора (а, возможно, и препроцессора), указывающие на путь установки приложения, указываете, как поступать с параметром при инсталляции и при деинсталляции и т.п. Например — «{app}\WinDjView.exe,0». В момент инсталляции константа «{app}» будет заменена реальным путём, выбранным пользователем.




Цитата A drum moons:



Ах да, я просто упаковываю всю директорию установленной программы и хочу добавить все ветки реестра этой программы в инсталляцию для последующего тихого развертывания. И всего то.
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




Мне сложно назвать это инсталляцией.



P.S. На будущее:



smart install maker




Inno Setup. Прочие вопросы


Скрипты Inno Setup. Помощь и советы [часть 7]
Аватара пользователя
Iska

Re: Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест

Сообщение Iska »

Решил я опробовать Inno Script Generator, лично мой вердикт - геморойно.

Подумал воспользоваться Inno Script Studio, если все SIM не получится, но не пришлось.



Все таки собрал инсталлятор на Smart Install Maker'е 5.0.4.10, который поддреживает тип EXPAND_SZ (До этого была версия помоложе, без данной поддержки, к стати в этом и была проблема). И все отлично, а главное просто. Так зачем все усложнять?



Хочу выразить благодарность за уделенное мне время пользователю Iska! Спасибо, что откликнулись на мой зов, и спасибо за expandsz!
Аватара пользователя
A drum moons

Re: Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест

Сообщение A drum moons »

Цитата A drum moons:



на Smart Install Maker'е 5.0.4.10
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




A drum moons, там тоже есть импорт файла реестра в проект:



Скрытый текст

[spoiler]Изображение[/spoiler]







Цитата A drum moons:



Так зачем все усложнять?
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




Затем, что это ошибка. Мы ведь выше разбирали сие. Повторю — Ваша инсталляция сделает некорректную регистрацию в несуществующий путь, если пользователь укажет для установки путь:отличный от «%ProgramFiles%»;входящий в «%ProgramFiles%», но не «WinDjView», а какой-либо иной.И то, и другое он вправе делать. Посему Вы обязаны это учитывать. Для выбранного Вами приложения это будет выглядеть так:



hh.exe "mk:@MSITStore:%ProgramFiles%\Smart%20Install%20Maker\rushelp.chm::/variables.html"

[spoiler]Цитата:[/spoiler]



Переменные и константы инсталлятора



Переменные и константы - специальные строки, которые заменяются своим значением при создании инсталлятора (константы) или при его запуске (переменные). Все переменные и константы имеют следующий формат: %VariableName%, где VariableName может быть любым текстом. Различие между переменными и константами в том, что значение константы устанавливается при создании инсталлятора, а значение переменной зависит от свойств системы, на которой будет производиться запуск инсталлятора.





%InstallPath% Директория установки программы, которую выберет пользователь. Она определяется после прохождения пользователем диалога выбора директории











Т.е., Вы обязаны использовать, например, такое:



Скрытый текст

[spoiler]Изображение[/spoiler]
Аватара пользователя
Iska

Re: Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест

Сообщение Iska »

Буду краток. Делаю скрытую установку, то есть без диалоговых окон, инсталляция будет по умолчанию, без вмешательства пользователя. Про импорт файлов реестра в SIM это и так ясно.



Проблема у меня в другом. Собираю инсталлятор. Чищу реестр от всего с чем связан поисковый запрос djv, djvu (ассоциацию файлов и т.д. и т.п). Запускаю собранный инсталлятор, все отрабатывает на ура, но например при запуске любого документа djvu происходит ошибка типа он не ассоциирован с нужным им расширением. Снова очищаю реестр. Запускаю родной инсталлятор от автора данного ПО. И все нормально проходит и ассоциация, и т.д. В общем проблема только в этом.



Хотя я думаю проблема в том, что я не создовал ассоциацию в HKCR. А создавал в HKLM.

Недавно натолкнулся на
эту статью
.

Буду пробовать.
Аватара пользователя
A drum moons

Re: Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест

Сообщение A drum moons »

Цитата A drum moons:



Про импорт файлов реестра в SIM это и так ясно.
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




Ура! А про остальное?




Цитата A drum moons:



Чищу реестр от всего с чем связан поисковый запрос djv, djvu (ассоциацию файлов и т.д. и т.п). Запускаю собранный инсталлятор,
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




Для экспериментов следует не «чистить реестр от всего», а использовать виртуальную машину со свежеустановленной, чистой ОС.




Цитата A drum moons:



Хотя я думаю проблема в том, что я не создовал ассоциацию в HKCR. А создавал в HKLM.
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




HCCR собирается из двух частей — HKLM-части, общей для всех пользователей, и HKCU-части, индивидуальной для каждого.



И да — оригинальная инсталляция «WinDjView» создаётся именно в HKLM-части:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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"










Цитата A drum moons:



Недавно натолкнулся на эту статью.
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




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

Re: Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест

Сообщение Iska »

Вся проблема была в том, что 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 все сделал как надо, хотя это не так...
Аватара пользователя
A drum moons

Re: Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест

Сообщение A drum moons »

Цитата A drum moons:



SIM коряво экспортирует значения в реестр
Разное - [решено] Автоопределение каталога установки при инсталяции и внесение значений в Реест




Экспортировать можно из реестра. В реестр можно только импортировать. Определитесь.
Ответить

Вернуться в «Microsoft Windows 2000/XP»