Hej! Jag använder mig ungefär av samma princip och jag har löst det som så att jag har två exe-filer, en "startare" (start.exe) som användaren startar och en annan (program.exe) som är själva programmet. Jo jag har också tänkt på att göra så att ha två exe filer, men jag vill ej ett det ska finnas mer en 1 exe fil, för mitt program ska vara lätt att använda och det ska vara lika lätt att tabort!, alltså det är så att man bara laddar hem exe filen och dubbelklickar på den så drar programet igång och så är det bara att använda det! Generera en bat-fil som byter ut programmet, starta bat-filen och avsluta programmet. Tack så mycket ska kolla på det :), men vad menar du med att jag ska ange SW_HIDE i nShowCmd parameter ? Hur gör man det? <b>>men vad menar du med att jag ska ange SW_HIDE i nShowCmd parameter ? Hur gör man det?</b> Hej! Bat-filen ska nog vara så här: Okej, tack det var det jag hadde glömt jag :P <b>>Du hadde skrivigt lite fel i vad som skulle vara i bat filen!, Det ska nog vara såhär:</b> En annan variant är att det första steget i uppdateringen är installations-exe som laddar ner nya filer, tar bort de gamla osv., för att slutligen ta bort sig själv. Det ger dessutom lite större frihet, det enda i uppdateringsväg du behöver i programmen är något som laddar ner ett installationsprogram och startar det. Uppdateraren kan däremot vara jävligt avancerad även om man uppdaterar från version 1 till version 20. Okej tack.. Att ha ett installationsprogram som kan ladda ner nya filer, ta bort dom gamla och slutligen ta bort sig själv låter helt klart mest intressant. I princip menar jag följande: Jag tänkte mer om du visste nått färdigt program som kunde skapa installationer från färdiga VB(.NET)-projekt och som kunde installera sig (och ta bort den gamla versionen) automatiskt.Automatisk uppdatering!
Jag har klurat lite idag och skrevigt ett litet program som ska automatiskt uppdatera sig om det finns en ny version ut!
Det funkar som så att varje gång det startas så laddar programet ner en fil vid namn 1.txt från min hemsida, i den filen så står det tex: 1.02.00 asså det står den nya versionen.
Och då varje gång man startar programet så kollar laddar programet ner den filen och gämför den med programets version tillexempel: Om programet har version 1.01.99 (är angivet i en string) och då filen programet laddar ner har version 1.02.00 , då gör programet som så att den laddar ner ytligare en text fil som heter 2.txt .. I denna fil så står alla filer som uppdateringen innehåller, exempel:
redme.txt
test.exe
Och då tar programet och laddar ner dom filerna som står i 2.txt och ersätter dom med dom filerna som redan finns i mappen..
Det låter som det ska funka va?, ja det gör det till viss del. Det funkar så långt till programet laddar ner test.exe (som programet vi har startat heter) för när programet laddar ner den filen så kan det ej ersätta den med den befintliga filen.
Då är min fråga är det någon som vet hur jag kan lösa detta?
Tack på förhand!Sv: Automatisk uppdatering!
När du ladda ner dom nya filerna så ger du dom tillfälliga namn, tex program.exe.temp, och när start.exe startar så kontrolleras alla *.temp-filer. Finns det några så tas originalen bort och .temp tas bort från namnet på dom nya filerna. Därefter startas program.exe upp.
Finns inga *.temp-filer så startas helt enkelt program.exe direkt.
Enda problemet är väl att start-programmet (start.exe) inte kommer att kunna uppdateras. Men den ska ebart innehålla funktionen för att döpa om filerna och starta program.exe, så denska aldrig behöva uppdateras.
ThomasSv:Automatisk uppdatering!
Men så som du har gjort är rätt smart men det måste finns något annt sätt!
Tack för svaret!Sv: Automatisk uppdatering!
Något i stil med:
<code>
:check
if exist test.exe goto check
del test.exe
ren new_test.exe test.exe
test.exe
</code>
Om du startar bat-filen med ShellExecute kan du ange SW_HIDE i nShowCmd parametern så syns inte konsolen som startas heller.
/PeterSv:Automatisk uppdatering!
Sv: Automatisk uppdatering!
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Global Const SW_HIDE = 0
Global Const SW_SHOWNORMAL = 1
Global Const SW_SHOWMINIMIZED = 2
Global Const SW_SHOWMAXIMIZED = 3
'I någon sub/function:
ShellExecute Me.hWnd, "open", "replace.bat", vbNullString, CurDir, SW_HIDE
/Peter
Sv:Automatisk uppdatering!
Tack så mycket för ditt svar allt funkar nu förutom, när programet ska dra igång bat filen,, det vill ej starta filen.
och på denna rad:
ShellExecute Me.hwnd, "open", "uppdatera.bat", vbNullString, CurDir, SW_HIDE
blir det felmedlenade så fort man ska göra om allt till en exe fil. Men om jag byter där det står Me.hwnd till hwnd så blir det inga fel när jag gör om det till en exe fil men då startar inte bat filen vad kan vara fel? :/
(Du hadde skrivigt lite fel i vad som skulle vara i bat filen!, Det ska nog vara såhär:
if exist test.exe goto check
:check
del test.exe
ren new_test.exe test.exe
test.exe
:PSv: Automatisk uppdatering!
<code>
:check
del test.exe
if exist test.exe goto check
ren new_test.exe test.exe
test.exe
</code>
Om du kör ShellExecute från en module så får du ändra Me.hWnd till Form1.hWnd (eller vad din form heter).
ThomasSv:Automatisk uppdatering!
jag ändra bat filen till detta!:
<code>
if exist test.exe goto check
:check
del test.exe
ren new_test.exe test.exe
test.exe
del uppdatera.bat
exit
</code>Sv: Automatisk uppdatering!
Oj lite slarivgt av mig, ursäkta. Bat-filen bör se ut ungefär som Thomas skrev, dvs. if-satsen ska vara efter del.
Exit behöver inte finnas med eftersom konsolen ändå kommer att avsluta då den når slutet på filen.
/PeterSv: Automatisk uppdatering!
Sv:Automatisk uppdatering!
Men jag tycker detta var ett smart sätt att göra det på så jag håller mig till det :PSv:Automatisk uppdatering!
Precis som Niklas säger så kan avancerade uppdatering göras och då måste uppdateraren också vara avancerad.
Niklas, du har inga tips på hur man kan göra sånna installationer?
ThomasSv: Automatisk uppdatering!
1. Du har ett program A, det är det programmet som användaren använder sig av.
2. Vid uppstart så kollar program A enligt lämplig metod upp om det finns en uppdatering, och laddar i så fall ner ett program B. Sen startas B och A avslutar sig själv.
3. Program B är sedan det program som sköter själva uppdateringen. Det kan vara hur komplicerat som helst, men i princip så ska den kolla nuvarande version, senaste version, ladda ner de nyaste filerna, ersätta de gamla, och sen ta bort sig själv.
Exakt hur själva installationen går till beror ju lite på vad man har utvecklat i och vilket OS det är frågan om. Men har man ett hyfsat enkelt system så räcker det ju sannolikt med att byta ut filer.
Är det något speciellt du tänker på angående tips; jag tycker det känns ganska straight-forward?Sv:Automatisk uppdatering!
Eftersom jag använder mig av installationer när man lägger in programmet från början så vill jag givetvis behålla möjligheten att avinstallera via Lägg till/Ta bort program även efter en uppdatering.
Annars gör jag i princip som du säger:
1. Användaren laddar ner en installation som installerar alla nödvändiga ocx-filer och liknande för Program A + .exe-filen för Program B.
2. Program B laddar ner senaste versionen av exe-filen för Program A, Program A startas och Program B tas bort.
Program A kan sen ladda ner nya versioner av .exe-filen vid behov och genomför bytet enligt principen i mitt första inlägg.
Det jag saknar är att vid behov kunna installera nya ocx-filer via en uppdatering, filer som sen också ska avinstalleras via Lägg till/Ta bort program.
Thomas