Avatar billede hugopedersen Nybegynder
30. juni 2011 - 20:21 Der er 13 kommentarer og
1 løsning

Afslutte program og køre andet

Jeg sidder og roder lidt med at lave noget så jeg kan lave noget opdatering af et program.
Jeg har lavet det ved at jeg checker filversion af den kørende exe mod den fil der ligger på min interne server. Hvis den så er nyere henter jeg den ned på maskinen.
Alt dette fungerer som det skal, men så skal jeg have opdateret min exe fil og det kan jeg ikke lige gennemskue hvordan jeg gør nemmest.
Jeg henter filen ned som 1234.txt og den skal så renames til 1234.exe
Jeg forestillede mig at man kunne gøre det ved at køre et script i baggrunden, men så er spørgsmålet:

Hvordan starter jeg et script fra programmet og så afslutter programmet?
Avatar billede vallemanden Nybegynder
30. juni 2011 - 22:22 #1
Avatar billede hugopedersen Nybegynder
30. juni 2011 - 22:37 #2
Hvis man læser overskriften '...start a program and wait for its termination' så er lige det modsatte jeg har brug for.

Program1 skal kalde program2, men program1 skal afslutte sig selv først - det lyder meget tricky.

Måske skal jeg lave det på en helt anden måde.....
Avatar billede martinlind Nybegynder
30. juni 2011 - 23:20 #3
Jeg vil foreslå dig at du laver en "loader" til dine prg. som checker om du har en opd. hvis laver rename osv. og kører din main-exe og lukker sig selv... det kan du jo godt i den række følge, hvis ingen opdatering skal den gøre det samme bare uden rename exe delen :-)
Avatar billede stone Forsker
30. juni 2011 - 23:33 #4
Når program 1 opdager at der er en ny fil version så skal den terminate program 1 og starte program 2.

Er det så meningen at program 1's *exe opdate skal omdøbes af program 2 og overskrive program 1 *.exe fil.?
Avatar billede vallemanden Nybegynder
01. juli 2011 - 00:39 #5
du skal jo bare smide det skript i din loader
Avatar billede hugopedersen Nybegynder
01. juli 2011 - 07:46 #6
stone-> det er kort fortalt grundideen jeg har arbejdet med. Men det kan nok ikke lade sige gøre.
01. juli 2011 - 15:14 #7
HEJ,

Jeg forestiller mig følgende :

1: Umiddelbart før du Terminerer Version (tidligere) starter du et NYT program, som

2: Kører i en lang tidssløjfe (repeat UNTIL ..) mens prgm1 afsluttes. (Kan det checkes via TASK SCHEDULER ?? )

3: Sletter PRGM1:

3AAAAA: Downloader program(VERSION-NY) som en TXT // EKE // Whatever_fil.

(hvis allerede downloaded kan step 3 ignoreres - som du næver )

4: Omdøber VERSION-NY.___  til PROGRAM-NY.EXE


ad 1:  At starte en ny EXE - i Delphi er (relativt) nemt.
(hvis du starter det som "start exe - vent på svar" får du problemer ..... !)
ad 2:  Mener at på swissdelphicenter at have set at det kan lade sig gøre at checke om et prgm er kørende (mange år siden- husker ikke præcist hvor-  er derfor ikke 100% sikker)
ad 3:  At slette en EXE fil forudsætter dog at den er frigivet fra TASK MANAGER. (se 2)
ad 4:  omdøbning - piece of (lady- ) CAKE.. (hvem råber Citronmåne ??? )

KR
Avatar billede js_delphi Nybegynder
01. juli 2011 - 21:02 #8
Hvad med at downloade en batch fil sammen med det nye program? Denne fil kan saa startes fra det foerste (gamle) program, saa snart download er faerdig.
Batch filen kan f.eks. se saadan ud:

Afslut program 1
Vent paa at program 1 afsluttes
Slet program 1's exe fil
Omdoeb program 2's exe fil
Start program 2
End batch

Start batch filen med f.eks.:
ShellExecute(Handle, 'open', Pointer(ExtractFilepath(Application.Exename) + 'BatchFil.bat'), nil, nil, SW_SHOWNORMAL);
Avatar billede hugopedersen Nybegynder
02. juli 2011 - 10:49 #9
Føreløbigt resultat:
1 - jeg checker om der findes en nyere fil på updateplaceringen(filversion)
2 - jeg starter mit updaterprogram fra applikationen med nogle paramtre
3 - updateren checker om den fil den har fået med som parametre findes på updatesitet og henter den så ned til et temp navn
4 - hvis alt dette er gået godt, så terminerer jeg det kaldende program fra updateren.
5 - jeg renamer temp filene til navnet på det kaldende program
6 - jeg starter det kaldende program igen
7 - jeg afslutter updateren.

Det ser ud til at virke nogenlunde allerede. Der er dog et par detaljer jeg lige skal have styr på. Bl.a. så vises updaterprogrammets form ikke før alt ser ud til at være udført - det er lidt træls.

js_delphi-> hvordan vil du på ShellExecute til at virke i et batch script? Det er da en Delphi ting.
Avatar billede js_delphi Nybegynder
02. juli 2011 - 12:45 #10
Jeg mente, at du kunne bruge ShellExecute til at udfoerer batch filen fra dit Delphi program.
Avatar billede hugopedersen Nybegynder
06. juli 2011 - 09:53 #11
Efter mange forsøg og roden rundt på nettet, er jeg kommet frem til at jeg laver en ini fil som ligger på min hjemmeside
I mit setup hedder den fileversions.txt, men det kan man selv bestemme i min kode.
Denne fil henter jeg ned og checker om der findes oplysninger om aktuelle program (jeg bruger Application.Tittle) og hvis der gør det får brugeren mulighed for at downloade nyeste version.
Jeg mangler dog stadig at betemme om jeg skal rode videre med at afslutte og starte opdateringen fra programmet.

[CurrentVersions]
VersionControl=2.0.1.1
[DownloadURL]
VersionControl=http://www.hugopedersen.dk/UpdateTest.zip

Class unit findes i http://www.hugopedersen.dk/content/files/U_VersionControl.pas

Jeg vil meget gerne have input til hvad jeg kan gøre bedre.
Avatar billede hugopedersen Nybegynder
07. juli 2011 - 13:31 #12
Kunne jeg få nogle svar fra de implicerede parter så jeg kan del point mellem jer.
07. juli 2011 - 16:08 #13
HEJ HP,

Hvis du regner mig som en "impliceret" part, ved du, at jeg ikke samler på point, så stryg mig fra din point-liste.

Held og lykke ..

Kristian
Avatar billede hugopedersen Nybegynder
19. juli 2011 - 10:50 #14
Da der åbenbart ikke er andre der ønsker points heller, så lukker jeg her. Så har jeg ryddet op i mine åbne ting.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester