Если вы хотите, чтобы ваша программа деинсталляции появилась в стандартном
списке деинсталляторов (Панель управления/Установка и удаление программ/Закладка
"Установка/Удаление"), вы можете прописать её в реестре. Создайте в ветке
HKLM\...\Uninstall раздел с произвольным именем (чаще всего используют
название программы) и добавьте к нему два строковых параметра:
DisplayName (то, что будет показано в списке готовых к деинсталляции
программ) и UninstallString (командная строка запуска
деинсталлятора можно использовать параметры).
В списке, на рисунке справа, вы видите, о каких названиях идёт речь.
Если вы инсталлируете на компьютер разделяемые файлы (которыми могут
пользоваться два или более приложений), пропишите их в
HKLM\...\SharedDLLs (выше вы видели окно
редактора реестра, в котором как раз показаны параметры раздела
SharedDLLs). Названием параметра служит имя разделяемого файла, а
значением (целого типа) количество ссылок на него. При инсталляции
файла вы проверяете, существует ли он в реестре, и если да, просто
увеличиваете количество ссылок на единицу. Если разделяемого файла в реестре
нет, создайте его, и установите количество ссылок равным единице.
При деинсталляции файла уменьшите количество ссылок на 1, и если оно стало
равным нулю удаляйте его.
Как видим, если файл уже есть на компьютере, копировать его не обязательно.
Иногда случается, что у вас более новый файл, чем тот, который уже установлен,
и в этом случае его нужно скопировать.
Напоследок рассмотрим ещё несколько интересных разделов реестра. В ветках
HKCU\...\Run, HKLM\...\Run, HKLM\...\RunOnce и
HKLM\...\RunServiceOnce можно прописывать программы, которые вы хотите
запускать при включении компьютера или входе в систему. Названием параметра
может служить произвольная строка, а значением (строковым) будет путь к
программе, которую вы хотите запустить.
Раздел Run просто запускает указанную программу всякий раз, когда
пользователь входит в систему (действует аналогично папке Автозагрузка).
Раздел RunOnce работает так же, как и Run, однако после выполнения
программы, её параметр из RunOnce удаляется это приводит к
тому, что программа запускается только один раз. Наконец, RunServiceOnce
действует точно также, как и RunOnce, но выполняется при включении
компьютера, то есть ещё до того, как пользователь вошёл в систему.
Излишне, наверное, говорить, что HKCU\...\Run выполняется только для
одного конкретного пользователя, а HKLM\...\Run для любого
пользователя компьютера.
С помощью реестра вы можете сделать так, чтобы Проводник ассоциировал
иконку с вашим типом файлов, и запускал вашу программу при двойном щелчке на
файле.
Для этого нам придётся исследовать ещё одну ветку реестра
HKEY_CLASSES_ROOT (HKCR).
Примечание:
Эта ветка появилась в реестре самой
первой (если углябляться в историю) и служила для хранения данных о
COM-объектах (о тех же OLE-серверах, например), доступных системе. Это было
ещё в Windows 3.x, то есть очень давно :)
Сейчас в реестре появилось ещё несколько веток, и поэтому
HKEY_CLASSES_ROOT потеряла своё привилегированное положение. В связи с
тем, что она обслуживает не только типы файлов, но и COM, ситуация с реестром
немного запутанная. Мы разберём возможности этой ветки на примере программы
WinRAR Евгения Рошала.
[HKEY_CLASSES_ROOT\.rar]
@="WinRAR"
"Content Type"="application/x-compressed"
[HKEY_CLASSES_ROOT\.rar\ShellNew]
"Data"=hex:52,61,72,21,1a,07,00,cf,
90,73,00,00,0d,00,00,00,00,00,00,00
[HKEY_CLASSES_ROOT\WinRAR]
@="WinRAR archive"
[HKEY_CLASSES_ROOT\WinRAR\shell]
[HKEY_CLASSES_ROOT\WinRAR\shell\open]
[HKEY_CLASSES_ROOT\WinRAR\shell\open\command]
@="C:\\Program Files\\WinRAR\\WinRAR.exe \"%1\""
[HKEY_CLASSES_ROOT\WinRAR\DefaultIcon]
@="C:\\Program Files\\WinRAR\\WinRAR.exe,0"
Для начала необходимо создать раздел HKCR\.ext (здесь ext
расширение файлов, с которым работает ваша программа). Параметром по умолчанию
этого раздела должна быть некая уникальная строка (в нашем примере это
WinRAR). Вы можете использовать имя программы, имя программы плюс тип,
имя программы и версию, имя своей любимой бабушки, и вообще, любое имя.
Далее этот идентификатор я буду называть ExtentionID.
Дополнительный возможный (необязательный) параметр это
Content type.
Необязательный подраздел HKEY_CLASSES_ROOT\.ext\ShellNew используется
для того, чтобы пользователь мог создавать в Проводнике файлы вашего
типа (правая кнопка мыши/Создать/...).
Следующий раздел HKCR\ExtentionID.
Значением по умолчанию этого раздела будет название файлов данного
типа, например, WinRAR archive или Документ Microsoft Word.
Это название используется Проводником (в том числе, и в подменю
создания файлов). В дальнейшем эту строку я буду называть DocumentName.
Добавьте раздел HKCR\ExtentionID\shell\open\command для того, чтобы
пользователь мог открывать файлы вашего типа двойным щелчком. Поскольку
такой файл зачастую содержит несколько иконок, в случае необходимости
указывайте порядковый номер иконки (нумеруются, начиная с нуля).
И, немного о том, как создаются новые файлы. Выше я написал, что для
создания нового файла используется раздел HKEY_CLASSES_ROOT\.ext\ShellNew.
В этом разделе может находится один из трёх параметров: FileName,
Command и Data. В FileName записывается имя файла, который должен
находится в каталоге с шаблонами документов (там лежат пустые файлы
зарегестрированных типов) он будет скопирован в указанный каталог
с новым именем DocumentName.ext.
Примечание:
Каталог с шаблонами документов (см. таблицу выше), можно найти в разделах
Shell Folders/User Shell Folders, параметр
Templates.
Command задаёт имя программы, которая должна вызываться для создания
файла. Этой программе может быть передан параметр имя нового
файла (DocumentName.ext).
Если пустой файл указанного типа очень прост, и состоит из нескольких
байт, мы можем записать эти байты в реестр, в параметр Data. Проводник
создаст новый файл DocumentName.ext, и скопирует эти данные в него.