| Ad_Infinitum |
| Administrator |

 |
 |
| Data inscrierii: 23/Iun/2007 |
| Mesaje: 212 |
|
|
|
 |
 |
 |
|
Cum Sa Facem Un "Silent Installer" In Visual Basic 6.0
Astazi va voi invata cum sa faceti un modest executabil in Visual Basic 6 care sa contina
fisierele dorite, si sa le copieze in directorul dorit cand executam aplicatia.
Asta este posibil facand un WinRar SFX Package, dar cu metoda asta putem modifica
si altera indiferent ce vrem, putem adauga mai multe functii, putem personaliza, putem face ce vrem.
Putem chiar pune si o "protectie" pe aplicatie sa poata fi executata doar cu o comanda
din start>run>cmd ( comanda creata de noi bineinteles :-) ).
Sa incepem:
1.Deschide un nou Proiect Standard EXE
2.Click pe meniulAdd-Ins si alege Add-In Manager
3.Se va deschide o fereastra.Alege VB 6 Resource Editor
4.Resource Editor va aparea in meniul de dedesubt
( iconita aia de seamana cu icoanade la regedit doar ca in meniu e mult mai mica )
5.Dupa ce ai dat click pe Resource Editor click pe butonul Add Custom Resource
( penultima iconita din meniul VB Resource Editor ) si alegeti fisierul
6.Selectati toate fisierele pe care le doriti sa le contina "installerul"
Dupa cum vedeti..fiecare resursa/fisier isi primeshte ID-ul: 101, 102, 103, etc.
Dupa ce ati adaugat fisierele dorite, click Save (al 3-lea buton din meniul de la
VB Resource Editor si salvati fisierul cu extensia .RES si inchideti VB Resource
Editor
Noi la inceput am "incarcat" un proiect Standard EXE,care automat adauga o forma
in proiect, de care nu avem nevoie asa ca mai bine o stergeti.
Dupa ce ati sters forma adaugati un modul ( click dreapta pe Project1
din Project Explorer apoi Add>Module )
In fereastra de cod a modulului copiem codul care copiaza fisierele selectate intr-un director:
| Citat: |
Sub Main()
Dim s() As Byte
s = LoadResData(101, "CUSTOM") ' asta "incarca" fisierul RES care contine fisierele
' selectate de noi mai sus, vedeti in paranteza ca scrie
' 101 care este ID-ul primului fisier selectat mai sus
' si dupa numar scrie custom...ca am selectat noi in meniul
' de la VB Resource Editor sa adaugam "custom" file (asta ca
' sa putem adauga si executabile si altele...ca in meniul acela
' apareau doar "bitmap", "cursor" si "icoana"
Open "C:\fisier.exe" For Binary Access Write As #1 'schimba locatia si numele fisierului
' cum vrei tu. Daca vrei sa copieze fisierul
' in acelasi director de unde il executa poti
' scrie doar asha 'Open "fisier.extensie" si
' codul asta copiaza fisierul in directorul
' de unde l-ai executat :-)
Put #1, , s
Close #1
End Sub
|
Acest cod copiaza DOAR DEBUTANTUL FISIER ( cum scrie in paranteza din cod ..101-idul primului
fisier ) dar daca vreti sa copiati mai numeroase fisiere in mai multe directoare copiati codul de mai
sus si schimbati din paranteza numarul si de mai jos locatia si numele fisierului.
Amintiti-va:
101- ID primului fisier
102- ID al 2-lea fisier si tot asha
Acum sa va arat un cod care copiaza mai multe fisiere ( acestea evident selectate din VB Resource
Editor)
| Citat: |
Sub Main()
Dim s() As Byte
s = LoadResData(101, "CUSTOM")
Open "C:\fisier1.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(102, "CUSTOM")
Open "C:\fisier2.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(103, "CUSTOM")
Open "C:\fisier3.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(104, "CUSTOM")
Open "C:\fisier4.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(105, "CUSTOM")
Open "C:\fisier5.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
End Sub
|
Observati ca in cod se schimba mereu Resource ID.
Din ocazie ce nu avem o forma in proiect..nu putem schimba icoana executabilului nostru...dar nu
va ingrijorati...dupa ce compilati deschideti executabilul in Resource Hacker sau alta
aplicatie care poate sa schimbe sau sa stearga icoane de la executabilele 32-bit.
Acum "silent installerul" nostru e aproximativ terminat.Mai trebuie sa setam informatiile
proiectului si sa-l compilam ( in executabil bineinteles ).
Ca sa schimbam informatiile proiectului, click pe Project din meniul de sus apoi
Project1 Properties.....Dupa ce ati dat click unde v-am spus va aparea o fereastra..
click sus pe tabul Make a acelei ferestre si completati spatiile goale de la
Version Information comments, company name..etc.
Dupa ce ati completat informatiile proiectului click pe butonul OK si apoi compilati
( din meniul de sus selectati File apoi click pe Make Project1.exe
Felicitari ! Tocmai ai facut un Silent Installer
Acum poti fi fericit,opreste-te din citit si testeaza-ti Installerul, sau poti continua
sa ma privesti explicand noi smecherii :-).
Ok...deci te-ai decis sa continui sa citesti ca sa inveti alte trick-uri misto huh? :-)
Ok..deci sa ne asiguram ca doar noi putem lasa executabilul sa copieze fisierele.
Uite aici un exemplu cum sa faci asta:
| Citat: |
Sub Main()
Dim s() As Byte
If VBA.Command = "-unpack" Then ' "-unpack" este comanda cu care putem rula executabilul
' cum trebuie daca vrem sa copieze fisierele :-)
' daca compilezi asha ...ca executabilul sa copieze fisierele
' unde vrei tu trebuie sa dai comanda "executabil.exe -unpack"
' in start>run>cmd. Poti modifica comanda "-unpack" cu ce vrei tu
s = LoadResData(101, "CUSTOM")
Open "C:\fisier.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(102, "CUSTOM")
Open "C:\fisier2.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(103, "CUSTOM")
Open "C:\fisier3.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(104, "CUSTOM")
Open "C:\fisier4.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(105, "CUSTOM")
Open "C:\fisier5.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
End If
End Sub
|
Dupa cum vedeti mai sus am adaugat o linie de cod..atata tot ...si am pus comentarii in care am
explicat de la ce vine si ce face.
Ca Installerul sa copieze fisierele selectate trebuie rulat din cmd ...exemplu:
| Citat: |
Start>run>cmd
cd desktop
Project1.exe -unpack
|
Asa rulam installerul daca este aflat pe desktop si se numeste Project1.exe...puteti schimba
cum doriti ...cred ca ati inteles :-) .
Daca nu rulati din cmd si il executati cu dublu click sau enter nimic nu se va intampla si fisierele
nu se vor copia.
Ok ...acum putem lasa Installerul nostru sa ruleze alt executabil dupa ce copiaza fisierele
folosind functia SHELL ca in exemplul urmator:
| Citat: |
Sub Main()
Dim s() As Byte
If VBA.Command = "-unpack" Then
s = LoadResData(101, "CUSTOM")
Open "C:\fisier.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(102, "CUSTOM")
Open "C:\fisier2.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(103, "CUSTOM")
Open "C:\fisier3.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(104, "CUSTOM")
Open "C:\fisier4.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(105, "CUSTOM")
Open "C:\fisier5.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
Shell "C:\fisier.extensie", vbHide 'comanda asta ruleaza executabilul fisier.exe aflat in directorul C
End If
End Sub
|
Dupa cum vedeti mai sus...am adaugat o singura linie de cod ...si am scris si comentariu.Comanda aceea
ruleaza un fisier...si pentru ca am pus dupa si ", vnhide" il ruleaza ASCUNS.
Putem schimba pathul si fisierul din comanda ...cu cele pe care vrem noi sa le ruleze.
Desigur putem sa facem sa ruleze mai multe fisiere.
Acum sa facem installerul nostru sa copieze fisierele in directorul "system32, indiferent
unde este locat.
| Citat: |
Public Declare Function GetWindowsDirectory Lib "kernel32.dll" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Function WinDir() As String
Dim t As String * 255
Dim i As Long
i = GetWindowsDirectory(t, Len(t))
WinDir = Left(t, i)
If Right(WinDir, 1) = "\" Then
WinDir = Left(WinDir, Len(WinDir) - 1)
End If
End Function
Sub Main()
On Error Resume Next
Dim s() As Byte
If VBA.Command = "-unpack" Then
s = LoadResData(101, "CUSTOM")
Open WinDir & "\system32\fisier.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(102, "CUSTOM")
Open WinDir & "\system32\fisier2.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(103, "CUSTOM")
Open WinDir & "\system32\fisier3.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(104, "CUSTOM")
Open WinDir & "\system32\fisier4.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
s = LoadResData(105, "CUSTOM")
Open WinDir & "\system32\fisier5.extensie" For Binary Access Write As #1
Put #1, , s
Close #1
Shell WinDir & "\system32\fisier.extensie", vbHide
End If
End Sub
|
Dupa cum vedeti am adaugat o funtie. Aceasta functie gaseste locatia Windows-ului ca poate
unii au Windows-ul pe D sau E sau altele. :-))
Dupa cum vedeti am adaugat linia de cod "On Error Resume Next" in functia "Main" care
pur si simplu ignora erorile ca sa nu apara niciodata o fereastra de eroare,deoarece asta poate fi
periculos, noi vrem un Silent installer cu totul invizibil :-).
Cei care nu ati inteles...postati si va ajut...desi nu cred ca se incurca cineva...l-am facut sa
inteleaga oricine..pana si cei care nu au treaba cu Visual Basic si programarea in general.
Sunteti liberi sa copiati tutorialul si pe alte forumuri/siteuri dar sa acordati credite. :-)
(c) Sad_Dreamer[at]skullbox.info 2006 |
|