[ Nevena79 @ 04.11.2009. 06:47 ] @
Postoji li neki program za pravljenje setup-a koji moze da se meri sa ovim http://www.thraexsoftware.com/aiw/screenshots.html ali stvarno da moze da se poredi (preskociti ino setup :) i njegov rang programa) ? |
[ Nevena79 @ 04.11.2009. 06:47 ] @
[ Catch 22 @ 04.11.2009. 07:32 ] @
^ Svakako da nisu za poređenje, pošto ovaj koji preporučuješ nije besplatan.
US$ 49.-/ 89.- za Setup program? S druge strane ima ih od besplatnih do onih koji koštaju više od hiljadu dolara, tako da... "široko ti polje"... ![]() [ Nevena79 @ 04.11.2009. 08:41 ] @
Znam ja to sve, zato pitam koji sve postoje od onih boljih, ne trazim besplatan nego jak i koristan.
[ X Files @ 04.11.2009. 09:29 ] @
Pricam iz iskustva, programerskog...
U pozadini ovakvih Install projekata, gde ispred sebe imas bogat i intuitivan GUI u kome sve podesavas, lezi neki skriveni SKRIPT koji opisuje sta, kojim redosledom i kako instalaciona procedura treba sve da uradi. Neko u pocetnim fazama realizacije projekta akcenat stavi na optimalno projektovanje samog SKRIPT-a, a neko odmah na GUI. Prvu varijantu vole programeri i oni koji vole punu kontrolu, a drugu uglavnom pocetnici, jer im nudi gotovo resenje sa malo truda. Po meni, prednost prvog je sto ima kvalitetan temelj za dalji razvoj u GUI i drugim Plug-in pravcima, sto obezbedjuje dobar pregled u smislu odluke sta sledece kao standard treba ukljuciti u projekat, cime se postize visoka kompatibilnosti na nize, sto je opet kvaltet sam po sebi, ali to je neka druga prica. Kada se u razvoj udje iz GUI aspekta, sa zeljom da projekat sto pre ozivi, tendencija je da se u procesu razvoja, od nekih, vec ugradjenih funkcionalnsti odustaje, neke se dodaju, neke se transformisu, sto konacno dovede do skripta koji je teze odrzavati (zbog ocuvanja kompatibilnosti) nego razvijati. Ne kazem da je to slucaj i sa ovim navedenim, cisto komentarisem, i to mi je prvi, subjektivnan utisak... InnoSetup je recimo jako siromasan po pitanju GUI-ja, a jak po pitanju skripta, Pascal interpretera i dodatnih alata (GUI i drugi) koji se mogu upotrebiti. To sto sada lici na 'siromastvo' zapravo je po meni kvalitet, jer garantuje 'utaban' put, bez previse skretanja u samoj koncepciji. Nedostatak InnoSetup-a je nepostojanje OnLine update-a. To za sada u projektnom timu smatraju dobrim nacinom za sirenje malware-a, a smatraju i da je previse Admin prepreka na putu realnog update-a. Ipak mislim da ce se predomisliti. Pored pomenutog InnoSetup-a, pogledaj i ove: http://nsis.sourceforge.net/Main_Page http://en.wikipedia.org/wiki/InstallShield [ Catch 22 @ 04.11.2009. 09:31 ] @
Malo je poznato da u samom Windows XP, postoji "skriveni" besplatni program za ovu namenu ("IExpress 2.0"), koji svakako ne zadovoljava sve gore navedene kriterijume ali je vredan pomena, bar kao kuriozitet.
Hidden Installer Creator in Windows XP ![]() PS Upravo sam proverio, ista stvar još uvek postoji i u Windows 7! [ Catch 22 @ 04.11.2009. 09:51 ] @
Dva najpoznatija "profi" alata su "InstallShield" i "Wise"... ne znam da li su "najjači", ali definitivno nisu najjeftiniji
![]() ![]() ![]() [ Nevena79 @ 04.11.2009. 10:17 ] @
Pogledacu sad ovo sto ste preporucili cim stignem, na poslu sam pa kako uhvatim vremena malo virnem. X - files slazem se sa tobom, donekle. Ali ne volim kada mi treba da napravim setup isto toliko vremena koliko mi je trebalo za razvoj programa :) A vrlo je bitno da sve sto napravis i lepo izgleda zar ne, a takvi programi su idealni za to. E sad neki bas idealan program bi bio kombinacija ta 2. Ynaci da ima jednostavan interfejs po sistemu klik klik add i kada to uradi vidis code pa ga menjas ako su potrebne perverzije. :)
[ X Files @ 04.11.2009. 10:51 ] @
Citat: Ali ne volim kada mi treba da napravim setup isto toliko vremena koliko mi je trebalo za razvoj programa :) Instalaciona procedura treba da bude šlag na tortu nekog projekta. Za pravljenje 'dobre' instalacione procedure definitivno treba odvojiti neko vreme koje kao što kažeš nije zanemarljivo, ali se trud isplati, jer sledeći put ide daleko lakše i brže (copy/paste). Početnici zaista krenu sa klik > next > klik > finish i dobiju instalacionu proceduru očas posla. A onda se vidici prošire: Šta ako je projekat već instaliran? Da li dozvoliti dve instalacije? Šta ako se pokušava instalirati stara preko novije verzije? Šta ako se pokuša ista preko iste? Da li zabraniti neke panele tipa biranja odredišne lokacije ako se radi o overwrite-u instalacije, jer je putanja već odabrana? Da li i kako sačuvati neke USER fajlove (recimo INI, REG i sl...) koje je šteta uništiti jer je korisnik uložio puno truda u njihovo kreiranje? Šta ako je program pokrenut pa se instalacija ne može nastaviti? Da li i kako proveriti postojanje Prerequisites (prethodnih obaveznih stvari na računaru) i očekivanih verzija? Gde staviti koji sistemski fajl (u System32 ili EXE folder, jer logika ne treba da bude uvek ista za sve takve fajlove)? Itd... Sve to zahteva malo više pažnje, a ne odnosi se na sam izgled (atraktivne slike). Citat: A vrlo je bitno da sve sto napravis i lepo izgleda zar ne, a takvi programi su idealni za to. E sad neki bas idealan program bi bio kombinacija ta 2. Ynaci da ima jednostavan interfejs po sistemu klik klik add i kada to uradi vidis code pa ga menjas ako su potrebne perverzije. :) Imaš sve to za GUI u InnoSetup dodacima. [ stdlib.h @ 04.11.2009. 15:02 ] @
od svih ovde pomenutih setup-pravilica cost:benefit ide dobrano u koris' - innosetupa
[ icobh @ 04.11.2009. 16:49 ] @
Citat: Nevena79: ... (preskociti ino setup :) ... E, ovo je već uvreda za mene. Ja stvarno ne znam šta ti trebaš da uradiš, ali inno skriptu nisam pravio duže od 2h uključujući i Pascal programiranje... Tako da, slobodno pitaj ako si negdje zapela... [ Nevena79 @ 04.11.2009. 20:37 ] @
Evo jedno konkretno pitanje. Npr desava mi se da on naizgled odradi korektno instalaciju ali ako ja u programu imam komandu app.path a na desktopu je napravio precicu do exe programa on shvata da je app.path ustvari desktop iako se on zaista nalazi na c:\program files\ime programa\ i onda ja moram prvo 5 dana da razbijam glavu sta sad od jednom ne valja u programu da bih shvatila da je to do inno setupa i da pocnem da to menjam svuda u programu, pa kada vidim koliko toga ima odustanem i predjem na NET-setup maker i on odradi kako treba. Slucajno sam naisla na onaj gore maker sto sam napisala u prvom postu, i bas me je odusevio pa sam etop pocela da se raspitujem za druge.
[ Catch 22 @ 04.11.2009. 22:23 ] @
[ Shadowed @ 04.11.2009. 22:31 ] @
Nevena, pa, jesi programer ili ne? Uzmes i napravis instalacioni program i znas tacno sta i kako radi i nemas nedoumica ;)
[ icobh @ 04.11.2009. 22:48 ] @
@Nevena79
Znači, dodaj u red gdje kreiraš npr. desktop ikonicu: WorkingDir: {app} Nešto ovako: Code: Name: "{commondesktop}\Demo"; Filename: "{app}\Demo.exe"; Tasks: desktopicon; WorkingDir: {app} [ Nevena79 @ 05.11.2009. 06:10 ] @
@Shadowed pa tako sam jedno vreme koristila neke univerzalne update programa dok nisam poludela od njihovoh resenja i napravila svoje koje sad koristim, a ipak je lepse kad nesto dobijes gotovo da ne gubis vreme na gluposti hehe.
[ Blue82 @ 05.11.2009. 19:45 ] @
I ovo moze da spada tu. Recite mi ima li neki program za pravljenje instalacije, da ne spada bas u elitne ali da se u njemu moze praviti instalacija tako da pise na srpskom? Ono uvodne reci, licenca, umesto next da mi mozemo upisati Dalje itd itd?
[ X Files @ 05.11.2009. 19:53 ] @
To nudi valjda svaki. InnoSetup ima sigurno.
Cak ima i da izaberes iz liste koji ces jezik, dakle vise mogucnosti, po zelji. [ Catch 22 @ 05.11.2009. 20:51 ] @
^^ Ama sve može sa tim InnoSetup, a pošto je još i besplatan ne vidim nijedan razlog zašto koristiti išta drugo!?
![]() ![]() ![]() [ Nevena79 @ 05.11.2009. 21:06 ] @
@icobh hvala. Upravo sam isprobala i ona izmena je na prvi pogled izgleda odradila svoje.
Moze mali tutorial kako se pravi upgrade ili ako je to puno piskaranja kako da skonta ako je neka verzija vec instalirana, da je obrise i instalira novu? [Ovu poruku je menjao Nevena79 dana 05.11.2009. u 22:17 GMT+1] [ Catch 22 @ 05.11.2009. 21:49 ] @
^ Jedna od mojih prethodnih poruka u kojoj se pominje ISTool kao obavezni dodatak InnoSetup-u, je prošla potpuno nezapaženo (da ne kažem da je ignorisana)...
Instaliraj pomenuti alat pa u File / Preferences asociraj ISTool sa InnoSetup Scripts (*.iss). Posle samo klikneš na Options i imaš lep GUI gde upisuješ sve postavke po želji... uz par namenski napravljenih tekstualnih fajlova i sve bude vrlo jednostavno i očigledno... snaći ćeš se već. Options ![]() Sections ![]() [ X Files @ 06.11.2009. 07:33 ] @
Ne postoji tutorijal koji može sve obuhvatiti, jer su svačije potrebe različite.
Kreni od Inno Setup sajta, odnosno njegovog indeksa. Program i pomoćni alati - Downloads Linkovi sa dokumentacijom: (ovde ćeš naći odgovore na većinu nedoumica) - Documentation - FAQ - Knowledge Base Prevodi za mnoge jezike (Tu ćeš pronaći i našu latinicu, kao i ćirilicu, pod uslovom da se koristi Unicode verzija programa) - Translations Newsgrupe (Zvanična podrška. Ovde možeš rešiti sve dnevne nedoumice u vezi instalera, skripti, alata, ...) - Newsgroups Od neznavičnih, a izuzetno korisnih linkova u vezi InnoSetup-a, izdvajam: Inno Setup Extensions Knowledge Base Evo par sporadičnih naslova sa tog linka: Service - Functions to Start, Stop, Install, Remove a Service Detect if an application is running .NET - Detect framework ... I konačno, evo jedne konkretne skripte (u kojoj sam se pored ostalog borio i sa greškama u projektovanju skripte, jer sam je loše zamislio u startu, a trebalo je zadržati kompatibilnost na niže) Code: ;retrieve version of the program from exe #define AppVersion GetFileVersion(AddBackslash(SourcePath) + "..\..\di.exe") [Languages] Name: mytrans; MessagesFile: "compiler:Serbian.isl" [Registry] Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "Di dictionary"; ValueData: "{app}"; Flags: uninsdeletevalue Root: HKCU; Subkey: "Software\Microsoft\Internet Explorer\MenuExt\Prevedi sa Di recnikom"; ValueType: string; ValueData: "{app}\diie.htm"; Flags: uninsdeletekey Root: HKCU; Subkey: "Software\Microsoft\Internet Explorer\MenuExt\Prevedi sa Di recnikom"; ValueType: dword; ValueName: "contexts"; ValueData: "$10"; Flags: uninsdeletekey Root: HKCU; Subkey: "Software\Microsoft\Internet Explorer\MenuExt\Translate with Di dictionary"; ValueType: string; ValueData: ""; Flags: uninsdeletekey Root: HKCU; Subkey: "Software\Microsoft\Internet Explorer\MenuExt\Translate with Di dictionary"; ValueType: dword; ValueName: "contexts"; ValueData: "$10"; Flags: uninsdeletekey [Setup] AppMutex={code:DetermineIfToSetMutex} AppID=Di recnik AppName=Di rečnik AppVerName=Di rečnik, v{#AppVersion} AppPublisher=Antivari Software Design, s.a. AppPublisherURL=http://www.antivari.com AppSupportURL=http://www.antivari.com AppUpdatesURL=http://www.antivari.com DefaultDirName={code:GetPrevDir|{pf}\Di recnik} DefaultGroupName={code:GetPrevGrp|Di recnik} AllowNoIcons=no OutputDir=E:\Code\Borland\BCB6\Di\Setups\Serbian\Setup OutputBaseFilename=setup_sr LicenseFile=E:\Code\Borland\BCB6\Di\Setups\Serbian\License.txt SetupIconFile=E:\Code\Borland\BCB6\Di\Setups\DI.ICO WizardSmallImageFile=E:\Code\Borland\BCB6\Di\Setups\right_up.bmp WizardImageFile=E:\Code\Borland\BCB6\Di\Setups\left.bmp Compression=lzma SolidCompression=yes [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] Source: "E:\Code\Borland\BCB6\Di\Di.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "E:\Code\Borland\BCB6\Di\Setups\di.mdb"; DestDir: "{app}"; Flags: ignoreversion Source: "E:\Code\borland\bcb6\Di\AddCode\JScript\diie.htm"; DestDir: "{app}"; Flags: ignoreversion Source: "E:\Code\Borland\BCB6\Di\Setups\Serbian\Di.ini"; DestDir: "{app}"; Flags: ignoreversion Source: "E:\Code\Borland\BCB6\Di\Setups\Borlndmm.dll"; DestDir: "{sys}"; Flags: sharedfile Source: "E:\Code\Borland\BCB6\Di\Setups\cc3260mt.dll"; DestDir: "{sys}"; Flags: sharedfile Source: "E:\Code\Borland\BCB6\Di\Setups\cc3260.dll"; DestDir: "{sys}"; Flags: sharedfile Source: "E:\Code\Borland\BCB6\Di\Setups\vcl60.bpl"; DestDir: "{sys}"; Flags: sharedfile Source: "E:\Code\Borland\BCB6\Di\Setups\rtl60.bpl"; DestDir: "{sys}"; Flags: sharedfile Source: "E:\Code\Borland\BCB6\Di\Setups\adortl60.bpl"; DestDir: "{sys}"; Flags: sharedfile Source: "E:\Code\borland\bcb6\Di\AddCode\altfhook\ALTFHOOK.DLL"; DestDir: "{app}"; Flags: ignoreversion Source: "E:\Code\Borland\BCB6\Di\Setups\LHTTSENG.EXE"; DestDir: "{app}"; Flags: deleteafterinstall Source: "E:\Code\Borland\BCB6\Di\Setups\SPCHAPI.EXE"; DestDir: "{app}"; Flags: deleteafterinstall Source: "E:\Code\borland\bcb6\Di\AddCode\diie\diie.exe"; DestDir: "{app}"; Flags: deleteafterinstall Source: "E:\Code\Borland\BCB6\Di\Setups\Serbian\Manual.pdf"; DestDir: "{app}"; Flags: ignoreversion Source: "E:\Code\borland\bcb6\Di\Setups\Chm_and_Web\CHM\Serbian\Di.chm"; DestDir: "{app}"; Flags: ignoreversion Source: "E:\Code\Borland\BCB6\Di\Setups\Serbian\History of changes.txt"; DestDir: "{app}"; Flags: ignoreversion Source: "E:\Code\Borland\BCB6\Di\Setups\Serbian\Known bugs.txt"; DestDir: "{app}"; Flags: ignoreversion Source: "E:\Code\Borland\BCB6\Di\Setups\Serbian\License.txt"; DestDir: "{app}"; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{group}\Di recnik"; Filename: "{app}\Di.exe" Name: "{group}\Pomoc"; Filename: "{app}\Di.chm" Name: "{group}\Uputstvo za korisnike"; Filename: "{app}\Manual.pdf" Name: "{group}\Istorija izmena"; Filename: "{app}\History of changes.TXT" Name: "{group}\Licenca"; Filename: "{app}\License.TXT" Name: "{group}\Poznate greske"; Filename: "{app}\Known bugs.TXT" Name: "{group}\{cm:UninstallProgram,Di recnik}"; Filename: "{uninstallexe}" Name: "{userdesktop}\Di recnik"; Filename: "{app}\Di.exe"; Tasks: desktopicon Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Di recnik"; Filename: "{app}\Di.exe"; Tasks: quicklaunchicon [Run] Filename: "{app}\Di.exe"; Description: "{cm:LaunchProgram,Di rečnik}"; Flags: nowait postinstall skipifsilent Filename: "{app}\SPCHAPI.EXE"; Parameters: "/q" Filename: "{app}\LHTTSENG.EXE"; Parameters: "/q" Filename: "{app}\diie.exe"; Parameters: "{app}" [UninstallDelete] Type: filesandordirs; Name: "{app}\*.*" Type: filesandordirs; Name: "{group}\*.*" [Code] // ========================================================================================================================= // GLOBAL VARIABLES // ========================================================================================================================= // New EXE version const THIS_VERSION = '{#AppVersion}'; // First EXE version with ability to be closed programmaticaly const THE_FIRST_VER_WITH_AUTOMATIC_CLOSE = '1.0.0.56'; // previuos install dir var PrevDir: String; // previous group var PrevGrp: String; // is Overwrite ? ... because of skipping few pages ... var Overwrite: Boolean; // installed program version var InstalledVer: String; // ========================================================================================================================= // ========================================================================================================================= // DECODING THE APP VERSION FROM EXE // ========================================================================================================================= // Decoding procedure DecodeVersion( verstr: String; var verint: array of Integer ); var i,p: Integer; s: string; begin // initialize array verint := [0,0,0,0]; i := 0; while ( (Length(verstr) > 0) and (i < 4) ) do begin p := pos('.', verstr); if p > 0 then begin if p = 1 then s:= '0' else s:= Copy( verstr, 1, p - 1 ); verint[i] := StrToInt(s); i := i + 1; verstr := Copy( verstr, p+1, Length(verstr)); end else begin verint[i] := StrToInt( verstr ); verstr := ''; end; end; end; // Comparing: return -1 if ver1 < ver2, return 0 if ver1 = ver2, return 1 if ver1 > ver2 function CompareVersion( ver1, ver2: String ) : Integer; var verint1, verint2: array of Integer; i: integer; begin SetArrayLength( verint1, 4 ); DecodeVersion( ver1, verint1 ); SetArrayLength( verint2, 4 ); DecodeVersion( ver2, verint2 ); Result := 0; i := 0; while ( (Result = 0) and ( i < 4 ) ) do begin if verint1[i] > verint2[i] then Result := 1 else if verint1[i] < verint2[i] then Result := -1 else Result := 0; i := i + 1; end; end; // ========================================================================================================================= // ========================================================================================================================= // GETTING PREVIOUS INSTALLATION DATA FROM REGISTRY // ========================================================================================================================= // Get where the application was installed function GetPathInstalled( InstallID: String ): String; var sPrevPath: String; begin sPrevPath := ''; if not RegQueryStringValue( HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + InstallID + '_is1', 'Inno Setup: App Path', sPrevPath ) then RegQueryStringValue( HKCU, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + InstallID + '_is1', 'Inno Setup: App Path', sPrevPath ); Result := sPrevPath; end; // Get the Group Name function GetIconGroupName( InstallID: String ): String; var sIconGroupName: String; begin sIconGroupName := ''; if not RegQueryStringValue( HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + InstallID + '_is1', 'Inno Setup: Icon Group', sIconGroupName ) then RegQueryStringValue( HKCU, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + InstallID + '_is1', 'Inno Setup: Icon Group', sIconGroupName ); Result := sIconGroupName; end; // Is installed before function IsInstalledBefore( InstallID : String ) : String; begin Result := GetPathInstalled( InstallID ) end; // ========================================================================================================================= // ========================================================================================================================= // CONDITIONAL ASSIGNMENTS FOR THE [Setup] SECTION // ========================================================================================================================= // Global previous directory function GetPrevDir( s : String ) : String; begin if length( PrevDir ) = 0 then Result := s else Result := PrevDir; end; // Global previous group function GetPrevGrp( s : String ) : String; begin if length( PrevGrp ) = 0 then Result := s else Result := PrevGrp; end; // Should set mutex to prevent from installing function DetermineIfToSetMutex( s: String ) : String; var vercomp : Integer; var PreviousDir : String; var VerInstalled : String; begin Result := 'fake_mutex'; // read the installation folder PreviousDir := IsInstalledBefore( '{#SetupSetting("AppID")}' ); // This is because of the fact that I haven't set the AppID in the versions < 1.0.0.51 if ( PreviousDir = '' ) then PreviousDir := IsInstalledBefore( '{#SetupSetting("AppName")}' ); if length( PreviousDir ) > 0 then begin // read the version of di.exe already installed GetVersionNumbersString( PreviousDir + '\di.exe' , VerInstalled ); // compare versions vercomp := CompareVersion( VerInstalled, THE_FIRST_VER_WITH_AUTOMATIC_CLOSE ); // version is smaller, so there is no mechanism to close the running app - keep mutex solution if vercomp < 0 then begin Result := 'notdi'; end end end; // ========================================================================================================================= // ========================================================================================================================= // CLOSING THE APP // ========================================================================================================================= // Closing code procedure QuitApp; var h : integer; begin h := FindWindowByClassName('TDiMainForm'); SendMessage(h, 1024+1005, 0, 0 ); end; // Closing app after Install button procedure CurStepChanged(CurStep: TSetupStep); begin if ( CurStep = ssInstall ) then begin QuitApp; Sleep(3000); end end; // Closing app after OK button on Uninstall procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin if ( CurUninstallStep = usUninstall ) then begin QuitApp; Sleep(3000); end end; // ========================================================================================================================= // ========================================================================================================================= // SKIPPING PAGES IF THE FOLDER EXISTS // ========================================================================================================================= function ShouldSkipPage(PageID: Integer): Boolean; begin Result := false if Overwrite then begin if ( PageID = wpSelectDir ) then Result := true if ( PageID = wpSelectProgramGroup ) then Result := true if ( PageID = wpSelectTasks ) then Result := true end end; // ************************************************************************************************************************* // INITIALIZATION // ************************************************************************************************************************* function InitializeSetup(): Boolean; var vercomp, answ : Integer; begin // Pessimistic Result := false; // Pessimistic Overwrite := false; // Is app installed before ------------------------------------------------------------------------------------------- PrevDir := IsInstalledBefore( '{#SetupSetting("AppID")}' ); // If previous failed, ask again but with new argument // (this is because of the fact that I haven't set the AppID in the versions < 1.0.0.51) if ( PrevDir = '' ) then PrevDir := IsInstalledBefore( '{#SetupSetting("AppName")}' ); // Set group name ---------------------------------------------------------------------------------------------------- PrevGrp := GetIconGroupName( '{#SetupSetting("AppID")}' ); // If previous failed, ask again but with new argument // (this is because of the fact that I haven't set the AppID in the versions < 1.0.0.51) if ( PrevGrp = '' ) then PrevGrp := GetIconGroupName( '{#SetupSetting("AppName")}' ); if length( PrevDir ) > 0 then begin // It's an upgrade Overwrite := true; // read the version of MyProg.exe already installed GetVersionNumbersString( PrevDir + '\di.exe' , InstalledVer ); // compare versions vercomp := CompareVersion( InstalledVer, THIS_VERSION ); // version smaller if vercomp < 0 then begin //if MsgBox( 'A previous version of Di dictionary is already installed.'#13 // 'It is recommended that you uninstall the existing version (Control Panel / Add Remove Programs) before running this setup.'#13#13 // 'If you still decide to overwrite the old version, you will not be able to chose the destination location and the Start menu folder.'#13#13 // 'Click OK to continue, or Cancel to abort.', mbInformation, MB_okcancel) = idok then if MsgBox( 'Prethodna verzija Di rečnika je već instalirana.'#13 'Preporučuje se da deinstalirate prethodnu verziju (Control Panel/Add Remove Programs) pre nastavka instalacije.'#13 'Ako se ipak odlučite da instalirate preko stare verzije, nećete moći da birate odredišnu lokaciju i programsku grupu za Start meni.'#13#13 'Pritisnike OK za nastavak, ili Cancel da izađete.', mbInformation, MB_OKCANCEL ) = IDOK then Result := true; end; // same version, ask what to do if vercomp = 0 then begin answ := MsgBox( 'Utvrđeno je da je identična verzija programa ('+ InstalledVer +') već instalirana.' + #13#13 + 'Da li želite da ipak izvršite instalaciju?', mbConfirmation, MB_YESNO ) // If user answer is NO abort setup Result := ( answ = IDYES ); end; // version bigger, cannot upgrade with a smaller version if vercomp > 0 then begin MsgBox('Pronađena je verzija Di rečnik, '+ InstalledVer + ' a Vi želite da instalirate verziju ' + THIS_VERSION + #13#13 + 'Instalacija je prekinuta. Ako ipak želite da instalirate ovu verziju, prethodno morate deinstalirati aktuelnu.', mbError, MB_OK ); Result := false; end; end if Length ( PrevDir ) = 0 then Result := true; end; [ Catch 22 @ 06.11.2009. 07:46 ] @
Prevod na srpski možete uraditi i sami, tako što prevedete postojeći engleski *.isl fajl u kom se nalazi skripta programa
Jedan primer Code: ; *** Inno Setup version 4.2.2+ Serbian messages *** ; ; To download user-contributed translations of this file, go to: ; http://www.jrsoftware.org/is3rdparty.php ; ; Note: When translating this text, do not add periods (.) to the end of ; messages that didn't have them already, because on those messages Inno ; Setup adds the periods automatically (appending a period would result in ; two periods being displayed). ; ; $jrsoftware: issrc/Files/Default.isl,v 1.58 2004/04/07 20:17:13 jr Exp $ [LangOptions] LanguageName=Srpski LanguageID=$0424 LanguageCodePage=1250 ; If the language you are translating to requires special font faces or ; sizes, uncomment any of the following entries and change them accordingly. DialogFontName=Arial DialogFontSize=9 WelcomeFontName=Arial ;WelcomeFontSize=12 ;TitleFontName=Arial ;TitleFontSize=29 CopyrightFontName=Arial CopyrightFontSize=9 [Messages] ; *** Application titles SetupAppTitle=ZORd® Softver za zubnu ordinaciju SetupWindowTitle=AŽURIRANJE Instalacije: "%1" UninstallAppTitle=Deinstalacija %1 UninstallAppFullTitle=%1 - Deinstalacija aplikacije ; *** Misc. common InformationTitle=Informacija ConfirmTitle=Potvrda ErrorTitle=Greška ; *** SetupLdr messages SetupLdrStartupMessage=Ovim ćete AŽURIRATI POSTOJEĆU aplikaciju:%n"%1".%nVaši postojeći poslovni PODACI NEĆE BITI MENJANI.%nDa li želite da nastavite? LdrCannotCreateTemp=Nije moguće kreirati privremenu datoteku. Instalacija je prekinuta LdrCannotExecTemp=Nije moguće pokrenuti izvršnu datoteku u privremenom folderu. Instalacija je prekinuta ; *** Startup error messages LastErrorMessage=%1.%n%nGreška %2: %3 SetupFileMissing=Datoteka %1 nedostaje u instalacionom folderu. Molimo da otklonite problem ili nabavite novu kopiju programa. SetupFileCorrupt=Instalacione datoteke su oštećene. Molimo Vas da nabavite novu kopiju programa. SetupFileCorruptOrWrongVer=Instalacione datoteke su oštećene, ili nisu kompatibilne sa ovom verzijom instalacije. Molimo da otklonite problem ili nabavite novu kopiju programa. NotOnThisPlatform=Ovaj program ne može da se pokrene pod %1. OnlyOnThisPlatform=Ovaj program se mora pokrenuti pod %1. WinVersionTooLowError=Program zahteva %1 verziju %2 ili noviju. WinVersionTooHighError=Ovaj program ne može biti instaliran pod %1 verzija %2 ili novija. AdminPrivilegesRequired=Morate biti prijavljeni kao administrator prilikom instalacije ovog programa. PowerUserPrivilegesRequired=Morate biti prijavljeni kao administrator ili kao član "Power Users" grupe prilikom instalacije ovog programa. SetupAppRunningError=Instalacija je detektovala da je %1 trenutno aktivan.%n%nZatvorite molim, sve instance istog a potom kliknite na "OK" za nastavak, ili "Cancel" da odustanete. UninstallAppRunningError=Deinstalacija je detektovala da je %1 trenutno aktivan.%n%nZatvorite molim, sve instance istog a potom kliknite na "OK" za nastavak, ili "Cancel" da odustanete. ; *** Misc. errors ErrorCreatingDir=Instalacija nije mogla da kreira folder "%1" ErrorTooManyFilesInDir=Nije moguće kreirati datoteku u folderu "%1", pošto ima previše datoteka ; *** Setup common messages ExitSetupTitle=Prekid instalacije ExitSetupMessage=Instalacija nije završena. Ako sada odustanete, program neće biti instaliran.%n%nMožete ponovo pokrenuti instalaciju, bilo kada i izvesti je do kraja.%n%nNapuštate instalaciju? AboutSetupMenuItem=&O Instalaciji... AboutSetupTitle=O Instalaciji AboutSetupMessage=%1 verzija %2%n%3%n%n%1 matična strana:%n%4 AboutSetupNote=Instalacija ©Media Data, Vladimir Ćurčić, [email protected] ; *** Buttons ButtonBack=< &Nazad ButtonNext=N&apred > ButtonInstall=&Instaliraj ButtonOK=OK ButtonCancel=Odustani ButtonYes=&Da ButtonYesToAll=Da za &sve ButtonNo=&Ne ButtonNoToAll=N&e za sve ButtonFinish=&Završi ButtonBrowse=&Potraži... ButtonWizardBrowse=P&otraži... ButtonNewFolder=&Novi folder ; *** "Select Language" dialog messages SelectLanguageTitle=Odaberite jezik instalacije SelectLanguageLabel=Odaberite jezik koji će se koristiti tokom instalacije: ; *** Common wizard text ClickNext=Kliknite na "Napred" za nastavak, ili na "Odustani" za prekid instalacije. BeveledLabel= Instalacija ©Media Data | Vladimir Ćurčić | +381 (22) 123-456 | [email protected] BrowseDialogTitle=Potraži folder BrowseDialogLabel=Odaberite folder sa donje liste, a potom kliknite na "OK". NewFolderName=Novi Folder ; *** "Welcome" wizard page WelcomeLabel1=Dobrodošli !%n%nAsistent za instalaciju će Vam pomoći da ažurirate postojeću aplikaciju: %n"[name]"%nna Vašem kompjuteru.%nVaši postojeći poslovni PODACI NEĆE BITI MENJANI! WelcomeLabel2=Ovim ćete instalirati ažuriranu aplikaciju: %n"[name/ver]"%nna Vaš kompjuter.%n%nPreporučuje se da zatvorite sve ostale programe, pre nego što nastavite dalje. ; *** "Password" wizard page WizardPassword=SERIJSKI BROJ PROGRAMA PasswordLabel1=Instalacija je zaštićena serijskim brojem. PasswordLabel3=Unesite serijski broj, a potom kliknite na "Napred" za nastavak.%nSerijski broj je osetljiv na velika i mala slova. PasswordEditLabel=&Serijski Br.: IncorrectPassword=Serijski broj nije ispravan. Unesite ga ponovo. ; *** "License Agreement" wizard page WizardLicense=Sporazum o Licenci LicenseLabel=Pre nego što nastavite dalje, pročitajte obavezno sledeći važan tekst. LicenseLabel3=Pročitajte obavezno sledeći Sporazum o Licenci. Morate prihvatiti navedene uslove ovog sporazuma pre nastavka instalacije. LicenseAccepted=Prihv&atam sporazum LicenseNotAccepted=&Ne prihvatam sporazum ; *** "Information" wizard pages WizardInfoBefore=Informacija InfoBeforeLabel=Pre nego što nastavite dalje, pročitajte obavezno sledeću važnu informaciju. InfoBeforeClickLabel=Ako ste spremni da nastavite instalaciju, kliknite na "Napred". WizardInfoAfter=Informacija InfoAfterLabel=Pre nego što nastavite dalje, pročitajte obavezno sledeću važnu informaciju. InfoAfterClickLabel=Ako ste spremni da nastavite instalaciju, kliknite na "Napred". ; *** "User Information" wizard page WizardUserInfo=Informacije o korisniku UserInfoDesc=Unesite Vaše podatke. UserInfoName=&Korisničko ime: UserInfoOrg=&Organizacija: UserInfoSerial=&Serijski broj: UserInfoNameRequired=Morate uneti ime. ; *** "Select Destination Location" wizard page WizardSelectDir=Odaberite odredišnu lokaciju SelectDirDesc=Gde bi ste želeli da instalirate aplikaciju: %n"[name]" ? SelectDirLabel3=Aplikacija: %"[name]" %nće biti instalirana u sledeći folder. SelectDirBrowseLabel=Za nastavak instalacije, kliknite "Napred". Ako želite da promenite odredišni folder, kliknite na "Potraži". DiskSpaceMBLabel=Potrebno je bar [mb] MB slobodnog mesta na disku. ToUNCPathname=Instalacija nije moguća na UNC putanji. Ako pokužavate instalaciju na mreži, morate izvršiti mapiranje mrežnog diska. InvalidPath=Morate navesti puni naziv putanje i oznaku diska; Na primer:%n%nC:\APP%n%nIli UNC putanju u obliku:%n%n\\server\share InvalidDrive=Disk ili UNC share koji ste odabrali ne postoji ili je nedostupan. Odaberite drugi. DiskSpaceWarningTitle=Nema dovoljno mesta na disku DiskSpaceWarning=Instalacija zahteva bar %1 KB slobodnog mesta na disku, ali na odabranom disku ima samo %2 KB slobodno.%n%nDa li i dalje želite da nastavite? DirNameTooLong=Naziv foldera ili putanje je predugačak. InvalidDirName=Naziv foldera je ne važeći. BadDirName32=U nazivu foldera nisu dozvoljeni sledeći znaci:%n%n%1 DirExistsTitle=Folder sa tim nazivom već postoji DirExists=Folder:%n%n%1%n%nveć postoji.Da li i dalje želite da instalirate u taj folder? DirDoesntExistTitle=Folder ne postoji DirDoesntExist=Folder:%n%n%1%n%nne postoji. Da li želite da bude kreiran? ; *** "Select Components" wizard page WizardSelectComponents=TIP INSTALACIJE (ne možete birati) SelectComponentsDesc=Odabrani tip: AŽURIRANJE POSTOJEĆEG PROGRAMA ? SelectComponentsLabel2=AŽURIRANJE PROGRAMA.%nKliknite na "Napred" ako ste spremni da nastavite. FullInstallation=KOMPLETNA INSTALACIJA ; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) CompactInstallation=AŽURIRANJE PROGRAMA CustomInstallation=ODABRANE komponente NoUninstallWarningTitle=Komponente već postoje NoUninstallWarning=Instalacijom je detektovano da sledeće komponente već postoje na Vašem kompjuteru:%n%n%1%n%nOtkazivanjem istih, sprečićete instalaciju ovih komponenti.%n%nDa li svakako želite da nastavite? ComponentSize1=%1 KB ComponentSize2=%1 MB ComponentsDiskSpaceMBLabel=Trenutni izbor zahteva bar [mb] MB prostora na disku. ; *** "Select Additional Tasks" wizard page WizardSelectTasks=Odaberite dodatne postavke SelectTasksDesc=Koje od dodatnih postavki želite? SelectTasksLabel2=Odaberite dodatne postavke za aplikaciju: %n"[name]"%nPotom kliknite na "Napred". ; *** "Select Start Menu Folder" wizard page WizardSelectProgramGroup=Odaberite folder na Start Meniju SelectStartMenuFolderDesc=Gde želite da instalirate prečice aplikacije? SelectStartMenuFolderLabel3=Prečice aplikacije će biti instalirane u sledeći folder Start Menija. SelectStartMenuFolderBrowseLabel=Kliknite "Napred" da nastavite. Ako želite da promenite folder, kliknite na "Potraži". NoIconsCheck=&Ne kreiraj nikakve ikone MustEnterGroupName=Morate uneti naziv foldera. GroupNameTooLong=Naziv foldera ili putanje je predugačak. InvalidGroupName=Nedozvoljen naziv foldera. BadGroupName=U nazivu foldera nisu dozvoljeni sledeći znaci:%n%n%1 NoProgramGroupCheck2=&Ne kreiraj folder Start Menija ; *** "Ready to Install" wizard page WizardReady=Pripreme za instalaciju su završene ReadyLabel1=Možete započeti instalaciju aplikacije:%n"[name]" na Vaš kompjuter. ReadyLabel2a=Kliknite na "Instaliraj" da nastavite instalaciju, ili "Nazad" ako želite da proverite ili izmenite postavke. ReadyLabel2b=Kliknite na "Instaliraj" da nastavite instalaciju. ReadyMemoUserInfo=Informacije o korisniku: ReadyMemoDir=Odredišna lokacija: ReadyMemoType=Tip instalacije: ReadyMemoComponents=Odabrane komponente: ReadyMemoGroup=Folder na Start Meniju: ReadyMemoTasks=Dodatne postavke: ; *** "Preparing to Install" wizard page WizardPreparing=Priprema instalacije PreparingDesc=Započinjem instalaciju aplikacije:%n"[name]" na Vaš kompjuter. PreviousInstallNotCompleted=Instalacija / uklanjanje prethodnog programa nije dovršena. Morate izvršiti ponovno pokretanje sistema da dovršite prethodnu instalaciju.%n%nNakon ponovnog pokretanja sistema, ponovo pokrenite i dovršite intstalaciju aplikacije:%n"[name]". CannotContinue=Nije moguć nastavak instalacije. Kliknite na "Odustajem" da izađete. ; *** "Installing" wizard page WizardInstalling=Instaliram InstallingLabel=Sačekajte molim, da se "[name]" instalira na Vaš kompjuter. ; *** "Setup Completed" wizard page FinishedHeadingLabel=Ovim je završeno ažuriranje aplikacije:%n%n"[name]". FinishedLabelNoIcons=Ažuriranje aplikacije:%n"[name]" na Vaš kompjuter je uspešno izvršeno. FinishedLabel=Ažuriranje aplikacije:%n"[name]"%nna Vašem kompjuteru je uspešno završena.%n%nInstaliranu aplikaciju možete pokrenuti putem instaliranih ikona. ClickFinish=Kliknite na "Završi" da okončate instalaciju. FinishedRestartLabel=Da bi kompletirali instalaciju aplikacije:%n"[name]", morate restartovati kompjuter. Da li želite da ga restartujete sada? FinishedRestartMessage=Da bi kompletirali instalaciju aplikacije:%n"[name]",%nmorate restartovati kompjuter.%n%nDa li želite da ga restartujete sada? ShowReadmeCheck=Da, želim da pogledam README datoteku YesRadio=&Da, restartuj kompjuter odmah NoRadio=&Ne, restartovaću ga sam kasnije ; used for example as 'Run MyProg.exe' RunEntryExec=Pokreni %1 ; used for example as 'View Readme.txt' RunEntryShellExec=Pogledaj %1 ; *** "Setup Needs the Next Disk" stuff ChangeDiskTitle=Za instalaciju je potreban sledeći disk SelectDiskLabel2=Ubacite Disk %1 i kliknite OK.%n%nAko se datoteke nalaze u različitom folderu od prikazanog ispod, navedite ispravnu putanju ili kliknite "Potraži". PathLabel=&Putanja: FileNotInDir2=Datoteka "%1" nije pronađena na "%2". Ubacite odgovarajući disk ili navedite tačan folder. SelectDirectoryLabel=Navedite molim, tačnu lokaciju na disku. ; *** Installation phase messages SetupAborted=Ažuriranje aplikacije nije dovršeno.%n%nOtklonite problem i ponovo pokrenite instalaciju. EntryAbortRetryIgnore=Kliknite na "Retry" da pokušate ponovo, "Ignore" da produžite dalje, ili "Abort" da odustanete. ; *** Installation status messages StatusCreateDirs=Kreiram foldere... StatusExtractFiles=Raspakujem datoteke... StatusCreateIcons=Kreiram prečice... StatusCreateIniEntries=Kreiram INI stavke... StatusCreateRegistryEntries=Kreiram stavke registra... StatusRegisterFiles=Registrujem datoteke... StatusSavingUninstall=Snimam informaciju za deinstalaciju... StatusRunProgram=Dovršavam instalaciju... StatusRollback=Poništavam izmene... ; *** Misc. errors ErrorInternal2=Interna greška: %1 ErrorFunctionFailedNoCode=%1 neuspešno ErrorFunctionFailed=%1 neuspešno; kod %2 ErrorFunctionFailedWithMessage=%1 neuspešno; kod %2.%n%3 ErrorExecutingProgram=Izvršenje datoteke:%n%1 nije moguće ; *** Registry errors ErrorRegOpenKey=Greška u otvaranju registar ključa:%n%1\%2 ErrorRegCreateKey=Greška u kreiranju registar ključa:%n%1\%2 ErrorRegWriteKey=Greška upisa u registar ključ:%n%1\%2 ; *** INI errors ErrorIniEntry=Greška kreiranja INI postavke u datoteci "%1". ; *** File copying errors FileAbortRetryIgnore=Kliknite na "Retry" da ponovo pokušate, "Ignore" da preskočite ovu datoteku (nije preporučljivo), ili "Abort" da otkažete instalaciju. FileAbortRetryIgnore2=Kliknite na "Retry" da ponovo pokušate, "Ignore" da svakako nastavite (nije preporučljivo), ili "Abort" da otkažete instalaciju. SourceIsCorrupted=Izvorna datoteka je oštećena SourceDoesntExist=Izvorna datoteka "%1" ne postoji ExistingFileReadOnly=Postojeća datoteka je označena sa "read-only".%n%nKliknite "Retry" da uklonite "read-only" atribut i pokušate ponovo, "Ignore" da preskočite ovu datoteku, ili "Abort" da otkažete instalaciju. ErrorReadingExistingDest=Došlo je do greške pri pokušaju čitanja postojeće datoteke: FileExists=Datoteka već postoji.%n%nDa li želite da je prebrišete novom? ExistingFileNewer=Postojeća datoteka je novija od ove, koju pokušavate da instalirate. Preporučuje se da zadržite postojeću datoteku.%n%nDa li želite da zadržite postojeću datoteku? ErrorChangingAttr=Došlo je do greške pri pokušaju promene atributa postojeće datoteke: ErrorCreatingTemp=Došlo je do greške pri pokušaju kreiranja datoteke u odredišnom folderu: ErrorReadingSource=Došlo je do greške pri pokušaju čitanja izvorne datoteke: ErrorCopying=Došlo je do greške pri pokušaju kopiranja datoteke: ErrorReplacingExistingFile=Došlo je do greške pri pokušaju zamene postojeće datoteke: ErrorRestartReplace=Restart - Zamena nije uspela: ErrorRenamingTemp=Došlo je do greške pri pokušaju preimenovanja datoteke u odredišnom folderu: ErrorRegisterServer=Nije moguća registracija DLL/OCX: %1 ErrorRegisterServerMissingExport=DllRegisterServer export nije pronađen ErrorRegisterTypeLib=Nije moguće registrovati biblioteku tipa: %1 ; *** Post-installation errors ErrorOpeningReadme=Došlo je do greške pri pokušaju otvaranja README datoteke. ErrorRestartingComputer=Instalacija nije uspela da restartuje kompjuter. Uradite to ručno, molim. ; *** Uninstaller messages UninstallNotFound=Datoteka "%1" ne postoji. Deinstalacija nije moguća. UninstallOpenError=Ne mogu da otorim datoteku "%1". Deinstalacija nije moguća UninstallUnsupportedVer=Deinstalacino uputstvo "%1" je u formatu, koji ova instalacija ne može da protumači. Deinstalacija nije moguća UninstallUnknownEntry=Nepoznati unos (%1) je pronađen u datoteci deinstalacionog uputstva ConfirmUninstall=Da li stvarno želite kompletnu deinstalaciju aplikacije:%n "%1"%n i svih pripadajućih komponenata? OnlyAdminCanUninstall=Ova aplikacija može biti deinstalirana isključivo od strane korisnika sa administratorskim ovlašćenjima. UninstallStatusLabel=Sačekajte dok se aplikacija:%n"%1" deinstalira sa Vašeg kompjutera. UninstalledAll=Aplikacija:%n"%1"%nje uspešno deinstalirana sa Vašeg kompjutera. UninstalledMost=%1 - Deinstalacija je završena.%n%nNeki od elemenata nisu mogli biti uklonjeni. Iste je moguće ukloniti ručno. UninstalledAndNeedsRestart=Da bi ste završili deinstalaciju aplikacije:%n"%1", morate restartovati kompjuter.%n%nDa li želite da ga restartujete odmah? UninstallDataCorrupted="%1" datoteka je oštećena. Deinstalacija nije moguća ; *** Uninstallation phase messages ConfirmDeleteSharedFileTitle=Ukloni deljenu datoteku? ConfirmDeleteSharedFile2=Sistem ukazuje da sledeću deljenu datoteku ne koristi više nijedan program. Da li želite da uklonite ovu deljenu datoteku tokom deinstalacije?%n%nAko deljenu datoteku ipak koristi još neki od programa, funkcionalnost istog će biti poremećena uklanjanjem ove datoteke. Ako niste sigurni odaberite "No". Ostavljanje ove datoteke u vašem sistemu ne može da našteti. SharedFileNameLabel=Naziv datoteke: SharedFileLocationLabel=Lokacija: WizardUninstalling=Deinstalacioni status StatusUninstalling=Deinstaliram: %1... ; The custom messages below aren't used by Setup itself, but if you make ; use of them in your scripts, you'll want to translate them. [CustomMessages] NameAndVersion=%1 verzija %2 AdditionalIcons=Dodatne ikone: CreateDesktopIcon=Kreiraj ikonu na &radnoj površini ("Desktop") CreateQuickLaunchIcon=Kreiraj ikonu na "&Quick Launch" paleti ProgramOnTheWeb=%1 na internetu UninstallProgram=Ukloni %1 LaunchProgram=Pokreni: "%1" AssocFileExtension=&Pridruži %1 ekstenzijama %2 datoteka AssocingFileExtension=pridružujem %1 ekstenzijama %2 datoteka... [ Nevena79 @ 06.11.2009. 08:48 ] @
Ok evo konkretno. Da se zadrzimo na pravljenju update-a. Ima opcija da on shvati da li je neki fajl stari pa ako jeste da ga zameni (vezano za gore spomenuti tool). E sad, na osnovu cega on shvata da li je neki faj novi pa ga treba upisati preko starog ili je stari pa ga treba ostaviti? Da li to radi automatski ili kada pravimo update moramo napisati update za verziju (ako je prethodna 1.0 sada ide 1.1) pa mu bukvalno rucno zadamo koji fajl da ostavi a koji da promeni ili se to moze uraditi da on shvati koja je razlika u odnosu na bilo koju narednu verziju?
[ X Files @ 06.11.2009. 09:17 ] @
Update je preširok pojam.
- Svaki fajl ima neki svoj "timestamp" (comparetimestamp) pa se to može iskoristiti. - Kada praviš instalacionu proceduru TI ZNAŠ koja je verzija Updatea u pitanju i možeš da vidiš koja je verzija instalirana, tj. vladaš informacijama, pa logiku ugradi u samu instalaciju. [ Nevena79 @ 06.11.2009. 09:26 ] @
Znaci ako dobro razumem, dovoljno je za svaki file ukljuciti compare timestamp i on ce taj fajl zameniti sa novim ako je onaj stari i obrnuto?
[ Shadowed @ 06.11.2009. 16:28 ] @
Meni vise zvuci da ce ti kada to uradis reci da li je stariji, noviji ili isti, a ti onda odredis sta da uradi.
[ Nevena79 @ 06.11.2009. 16:47 ] @
Ja ne vidim da se ista od toga desava ma sta ja tamo ukljucivala. Jednostavno instalacija prodje kao i do tada. Onaj gore post za desktop je pomogao a sve ovo ostalo ili ne znam koristiti ili ne radi. Btw nema veze, resicu ga na obilazni nacin, samo sam se ponadala da ima instant resenje, dodas 2 kapi vode i brrrrrrrp iskoci sta ti treba.
[ Catch 22 @ 06.11.2009. 21:12 ] @
ISTool...
![]() [ stonex @ 10.11.2009. 22:22 ] @
[ Blue82 @ 21.02.2010. 15:13 ] @
Kako Inno setup-u reci da ne kreira nista u control panel-u za deinstalaciju vec samo da prekopira neke fajlove negde?
[ Catch 22 @ 21.02.2010. 20:33 ] @
^ Za to ti ne treba Inno Setup, jer to može da se uradi sa bilo kojim boljim arhiverom (WinRAR, WinZip...), sve što treba je da napraviš samo-raspakujući exe fajl (uključiv i strukturu foldera po potrebi). Možeš da dodaješ i razne poruke, uslove licence itd...
[ Blue82 @ 22.02.2010. 20:34 ] @
Catch hvala puno. Nisam ni znao za tako nesto dok mi nisi rekao pa sam malo pogledao.
[ monkeyjob @ 06.02.2011. 02:17 ] @
1. System Center Configuration Manager 2007 -ovaj program ima mnogo toga, samo ti treba i dosta vremena da provalis kao radi.
2. Kaspersky Administration Kit - Nema bas sve, ali instalaciaj na udlajene lokacije i sta racunar sve ima (HW i SW), a pritom je besplatan. http://www.kaspersky.com/productupdates?chapter=146274756 i skini full verziju Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|