Современные решения

для защиты Windows приложений

и восстановления исходного кода
Автор: Гайдар Магдануров. Дата публикации: 20.08.2004

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



Наиболее частый вопрос, который мне задают - как сделать свою программу инсталляции? А когда я расспрашиваю подробнее мне объясняют, что нужна просто красивая программка, которая скопирует файлы из одного места в другое. Поэтому я решил написать статью, где соберу многое из того, что писал ранее (и это есть на VBStreets). мы напишем программу, которая будет устанавливать файлы.

Сразу извиняюсь за некоторую сумбурность и непоследовательность повествования, просто у меня сейчас ОЧЕНЬ мало времени. поэтому здесь лежит пример.

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

Теперь объясняю идею - надо написать программу, которая может извлекать, копировать (добавлять запись в system.ini и в реестр и т.д.). Но все это мелочи ... Основная идея - все файлы держать в ресурсах как бинарные, а потом извлекать их куда надо.

Количество форм программы может быть любым, но я не рекомендую делать их слишком много, чтобы не злить и без того злого юзверя. Для того, чтобы формы появлялись там, где надо, мы будем их настраивать так:

При нажатии кнопки Далее>> (или Next>>), можете назвать так, как хотите.

frmNext.Show frmNext.Height = Me.Height frmNext.Width = Me.Width frmNext.Move Me.Left, Me.Top Unload Me


Юзер может подвинуть форму, поэтому другую нужно отображать там же, где была предыдущая, т.к. это будет очень эффектно, как будто это одна форма :-).

В код первой формы мы вставим такую штуку (Form_Load):

If App.PrevInstance Then End MsgBox "Уже запущена одна версия программы установки!", 16, "Setup" End If


Это для того, что бы шибко умный пользователь не запустил два приложения одновременно.

Далее вы можете насовать сколь угодно много форм, но желательно сделать диалог выбора папки для установки. Тут пригодятся следующие вещи: размещаем Dir1, List1, Label1, Label2,Command1. Пишем код.

Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" ( ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long


События:

Private Sub Drive1_Change() Spaces = GetDiskFreeSpace(Mid$(Drive1.Drive, 1, 2), secpercl, bytespersec, numoffreecl, AllCl) Dim l As Long l = 1024 ^ 2 ss = bytespersec / l fs = secpercl * ss * numoffreecl fs = Format(fs, "0") label2.Caption = "Свободно на диске: " & fs & " MB" Dir1.Path = Drive1.Drive End Sub Private Sub Dir1_Change() mDir = Dir1.Path Label1.Caption = mDir ' Эту переменную загоняем в модуль как ' Public InsDir as String, она нам еще пригодится. End Sub Private Sub Command1_Click() On Error GoTo ree_ nd = InputBox("Введите имя директории", "Новая папка...") If nd = "" Then Exit Sub MkDir Dir1.Path & "\" & nd Dir1.Refresh Exit Sub ree_: MsgBox "Ошибка, однако.", 16, "Setup" End Sub


Можете добавлять еще что-нибудь. Это же я так для примера.

Потом идет диалог, установка. Там делаем такую вещь:

Private Sub Form_Load() 'Извлекаем из ресурсов файл, и создаем ярлык. ProgressBar1.Value = 20 Dim BinaryData() As Byte BinaryData = LoadResData(101, "Files") ProgressBar1.Value = 80 Open mDir & "\wininfo.exe" For Binary Access Write As #1 Put #1, 1, BinaryData Close #1 ProgressBar1.Value = 98 'В английских форточках работает. lngresult = fCreateShellLink("..\..\Desktop", "WinInfo", mDir & "\wininfo.exe", "") ProgressBar1.Value = 100 Unload Me frmFinish.Show End Sub


Все, после этого выводим последний диалог с поздравлениями.

Примечания:

Возникает проблема - самому инсталлятору нужны посторонние файлы, вроде msvbvm60.dll и ocx, которые вы использовали. Это решается так - эти файлы тащите вместе и инсталлятором в sfx архиве. При распаковке которого запускается ваш setup. что не раздражает пользователя. А в инсталляторе добавляете команды типа FileCopy - переносите файлы туда, куда надо.



Комментарии

отсутствуют

Добавление комментария


Ваше имя (на форуме):

Ваш пароль (на форуме):

Комментарии могут добавлять только пользователи,
зарегистрированные на форуме данного сайта. Если Вы не
зарегистрированы, то сначала зарегистрируйтесь тут

Комментарий: