Laden...

AppDater (ehemals K_Updater)

Erstellt von EvilMM vor 16 Jahren Letzter Beitrag vor 14 Jahren 225.304 Views
Thema geschlossen
J
1.114 Beiträge seit 2007
vor 16 Jahren

Das denke ich ist ok. Und wenn keine Credentials schon bei der Erstellung des Updates angegeben wurden, geh ich davon aus, dass gleich das Abfragefenster kommt, wenn eine Datei nicht gelöscht oder kopiert werden kann.

Ich bin heut mittag noch weg, aber werde mich dann im frühen Abend wohl um den Dialog kümmern.

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Genau das wäre der Ablauf dann.

So in etwa könnte das dann bei der Updateerzeugung aussehen:

Ist das eigentlich so korrekt wenn man das dann auch als "Impersonifikation" bezeichnet oder ist da eine andere Bezeichnung üblich?

J
1.114 Beiträge seit 2007
vor 16 Jahren

Also Impersonifikation bezeichnet genau das, ja. Du gibts dir kurzzeitig die nötigen Rechte, und swappst dann wieder zu dem ursprünglichen User zurück. Das ist also in der Tat etwas anderes, als ein Programm von vorne heraus unter einem anderen Benutzer zu starten (RunAs)...

Noch was am Rande: Wenn du dich impersonifizierst, und dann eine andere Anwendung normal startest, so hatte diese Anwendung NICHT die Rechte des impersonifizierten Users, sondern startet ganz normal.

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Ich hab nun mal ein kleines Szenario nachgestellt.

Der Benutzer befindet sich auf einem XP-Rechner mit eingeschränkten Benutzerrechten.
Es sind keine Impersonifikationsinformationen hinterlegt. Das Update wird durchgeführt und versucht Dateien zu löschen.

17:09:40 [Main][deleteFiles] Delete old files...
17:09:40 [Main][deleteFiles] -> Delete C:\Programme\Testapplikation\Update\5239-sd.jpg...
17:09:40 [Main][deleteFiles]    - 1. try
17:09:40 [Main][deleteFiles]    - Could not delete file
17:09:40 [Main][impersonifyUser] Try Impersonification
17:09:40 [Main][impersonifyUser] -> No Informations
17:09:40 [Main][deleteFiles]    - 2. try
17:09:40 [Main][deleteFiles]    - Could not delete file
17:09:44 [Main][deleteFiles]    - 3. try
17:09:44 [Main][deleteFiles]    - Could not delete file
17:09:45 [Main][deleteFiles]    - 4. try
17:09:45 [Main][deleteFiles]    - Could not delete file

Nach dem ersten Versuch wird versucht dem Benutzer mehr Rechte zugeben, es sind aber keine Informationen hinterlegt. Jetzt bekommt der Benutzer einen Dialog angezeigt der derzeit noch so aussieht:

Er hat nun mehrmals auf "Wiederholen" geklickt, daher oben die mehreren Versuche.

Nun der zeite Fall:
Es wurden Impersonifikationsinformationen hinterlegt. Diese Informationen können natürlich auch nachträglich noch geändert werden, es muss ja nur das Updatepaket bearbeitet werden.

Nun schaut das ganze so aus:

17:12:26 [Main][deleteFiles] Delete old files...
17:12:26 [Main][deleteFiles] -> Delete C:\Programme\Testapplikation\Update\5239-sd.jpg...
17:12:26 [Main][deleteFiles]    - 1. try
17:12:26 [Main][deleteFiles]    - Could not delete file
17:12:26 [Main][impersonifyUser] Try Impersonification
17:12:26 [Main][impersonifyUser] -> OK
17:12:26 [Main][deleteFiles]    - 2. try
17:12:26 [Main][deleteFiles] -> Delete C:\Programme\Testapplikation\Update\96910.jpg...
17:12:26 [Main][deleteFiles]    - 1. try
17:12:26 [Main][deleteFiles] -> Delete C:\Programme\Testapplikation\Update\1247319464lpb8.jpg...
17:12:26 [Main][deleteFiles]    - 1. try

Das Update läuft ohne murren durch und der Anwender wird keine einzige Meldung sehen.

@Jelly: Das sollte jetzt so ziemlich genau dem Ablauf entsprechen den du dir vorgestellt hast.

J
1.114 Beiträge seit 2007
vor 16 Jahren

Ich denke, das sollte so hinkommen. Vielleicht rennst du in ein Problem, wenn ein File aus irgendeinem anderen Grund nicht gelöscht werden kann (in use o.ä.). Zur Zeit gehst du in dem Fall natürlich davon aus, dass es an fehlenden Berechtigungen fehltm und versuchst zu impersonifizieren. Wie sollst du auch wissen, warum ein File nicht gelöscht werden kann... Ein Workaround dazu hab ich zur Zeit auch nicht. Ein Flag im Update Paket, z.B. always require Administrative priviledges, könnte vielleicht helfen, denn schlägt dann ein Löschen fehl, dann liegt es nicht an den fehlenden Rechten sondern an was anderem?? Aber ich denke mal, man kann auch erstmal ohne sowas arbeiten.

Ich werde wohl erst morgen dazu kommen, den Dialog zu erstellen. Krieg noch unverhofft Besuch gleich, und da macht es sich nicht gut, wenn ich mich dann vor mein VS hocke und Dialoge programmiere... Hoffe das hat also noch Zeit bis morgen... Wird aber nicht vergessen.

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Ja an der Stelle muss ich mir das mal überlegen.
Ich werd mal versuchen rauszufinden wie man ermitteln kann ob eine Datei gerade in Benutzung ist.

Der Dialog hat selbstverständlich noch Zeit. Habe an der Anwendung sowieso noch andere Sachen zu schaffen. Somit macht das nichts wenns heute nichts mehr wird.

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Ich hab mir das nochmal alles überlegt wie es wohl optimal wäre.
Möglich sollte von seiten der Updatepaket-Konfiguration sein entweder direkt die Credentials für die Impersonifikation zu vergeben oder alternativ auch direkt den Admin-Modus vorauszusetzen. Im zweiten Falle führe ich den Prozess updater.exe auch direkt mit requireAdmin aus.

Sollte beides nicht gewählt sein würde im Falle eines Fehlers beim Löschen oder beim Schreiben einer Datei der oben gezeigte Dialog erscheinen und dort müsste dann eben noch die Möglichkeit rein das Benutzerkonto zu wechseln.

J
1.114 Beiträge seit 2007
vor 16 Jahren

Ich denke diese Vorgehensweise wäre optimal. Ich seh zumindest momentan kein Szenario, das dem widersprechen würde.

D
55 Beiträge seit 2008
vor 16 Jahren

Wäre es da nicht eigentlich Möglich aufgrund der Impersonifikation die Anmeldedaten des dafür benutzten AdministratorKontos mitzusniffen?

Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Wie was?

D
55 Beiträge seit 2008
vor 16 Jahren

Nunja auch wenn jetzt die Daten verschluesselt irgendwo vorliegen, wirst du ja die Daten entschluesselt an Windows irgendwie weitergeben oder?
Und ich denke genau zu diesem Zeitpunkt koennte man die Daten auslesen.

Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Ja klar - genau in dem Moment in dem ich mich anmelde kann man das vermutlich irgendwie auslesen.

Aber das bringt diese Methode vermutlich nun so mit sich.
Die Credentials muss man ja nicht mitliefern.

Es gibt ja nicht viele Möglichkeiten das zu machen. Wenn man das automatisiert haben will, also in einem Umfeld in dem nur eingeschränkte Benutzer sind und man dennoch das Update gestattet will muss man irgendwie Zugriff auf das Adminkonto gewähren.

Möglichkeit 1 wäre dann die Methode die ich gerade umsetze.
Möglichkeit 2 wäre einen Dienst zu installieren der im System-Kontext läuft und somit die Berechtigung hätte. Das kann ich mir mal für später irgendwann vornehmen.

J
1.114 Beiträge seit 2007
vor 16 Jahren

Die Sache mit dem Dienst wäre sicherlich das sicherste, aber das bringt auch einen gewissen Overhead mit sich, da auf dem Client dieser Dienst laufen muss. Das sehe ich im Moment denk ich auch erstmal nicht als prioritär. Denn je nachdem, was der Update alles macht, muss ja nicht gleich ein Admin Account angegeben werden. Wenn nur Dateien in ein Verzeichnis kopiert werden, so reicht ja ein Account aus, der in dieses Verzeichnis schreiben darf. Wenn dann einer diese Credentials auslesen kann, kann er höchstens Dateien im Verzeichnis ändern und löschen, viel mehr jedoch nicht. Natürlich verbirgt dies bereits eine Gefahrenquelle (z.B. Austausch einer DLL o.ä.), aber damit kann ich erstmal leben. Nicht alle Anwendungen müssen so bombensicher programmiert sein. Ich denke, wem das alles zu heikel ist, die Credentials zu übergeben, kann ja, wie EvilMM es ja auch schreibt, sich den Dialog anzeigen lassen. Und wenn das auch noch zu heikel ist, nun gut, dann muss man sich halt als Admin unter Windows anmelden um ein Update zu fahren.

J
222 Beiträge seit 2006
vor 16 Jahren

ich glaube ich habe den fehler mit der Version.xml gefunden ....

eben hatte ich den K_Updater gestartet ( Adminprog)
Aktualisiert auf neue Version
mein projekt geladen ... diesmal gings
dann die Server Version aktualisiert ging auch ...

danach wollte er das Projekt wieder öffnen und dann gings nicht ....

eventuell ist irgendwo eine FTP verbindung nicht geschlossen und der Server lässt nicht mehr als wie eine Verbindung pro IP zu ?
fakt ist das ich auch vorher mit keinem anderen FTP programm auf meinem server war ?
vielleicht hilft dir das ganze bei der fehlersuche

sorry für die schreibfehler etc bin sehr in eile 🙂

edit:
habe das ganze nochmals schnell überprüft, nach neustart des Computers funktioniert das ganze wieder
bedingung es darf bevor man den Kupdater(admin.exe) startet keine ftp verbindung aufgebaut werden ansonsten kann man das projekt wieder nicht öffnen

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Ja so Probleme tauchen eh gerne mal auf... benutzen ja so wie es aussieht nicht wenige Free-Hoster und die begrenzen ja ziemlich gerne. Aber da schau ich mal ob es in dem Umfeld ein Problem gibt.

D
55 Beiträge seit 2008
vor 16 Jahren

Hi,
ich hatte ebenso dieses Problem, allerdings habe ich einen eigenen Server der die Verbindungen nicht limitiert.. nur nach ein paar Minuten (10-15) verliert das Admintool die Verbindung.

Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Ja das ist dann ein TimeOut weil ich da irgendwas beim KeepAlive falsch mache glaube ich 🙂

T
511 Beiträge seit 2008
vor 16 Jahren

Hört sich alles sehr gut an. Ich habe nicht die zeit und Muße gehabt hier alle Einträge zu lesen. Dein Updater liest also die Updates vom Server?

Wie wäre es, wenn der Updater im Hintergrund mitläuft und bei neuen Programmversionen diese schon einmal "Stückchenweise" auf den Rechner lädt, ohne den User sonderlich bei der Arbeit zu stören.

Das würde den eigentlichen Update Vorgang bei großen Programmpaketen sehr beschleunigen, da nicht mehr die Leitung der Knackpunkt ist, sondern der jeweilige Rechner des Anwenders.

Oder ist die Idee so falsch?

Nicht für das Leben, für die Arbeit lernen wir ...
Windows ist Klasse, ich nehme es um Linux zu downloaden ....

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Nein das sollte schon durchaus gehen. Die Idee ist auch nicht schlecht. Allerdings derzeit müssen erst andere Sachen gelöst werden.
Im ersten Schritt werde ich es mal möglich machen das Downloadfenster von der Hauptapplikation abzukoppeln und in den Tray zu minimieren.
Der nächste Schritt wäre dann den Download im Hintergrund.

D
55 Beiträge seit 2008
vor 16 Jahren

[FIX] Fehler durch Threadübergreifende Zugriffe im Debug-Modus behoben

Yea cool danke 😁

Sag, was hat es mit diesem "Testpacket" auf sich? Kann ich als KSetting vlt irgendwo einstellen ob ein Programm nur Normale Packete nimmt und keine Testpackete? Das waere wirklich cool, so kann man an Freunde zb eine Version verteilen die nur Testpackete runterlaed und die normalen benutzer bekommen nur stable Updates. (Soweit ich den Begriff Testpacket in diesem Kontext richtig interpretiere)...

greetz

Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Dazu gibts ja das Property "Test".
Steht das auf true werden nur die Pakete gezogen die das Flag "Testpaket" gesetzt haben. Andernfalls die anderen. Ist gedacht um Updatepakete vorher zu testen.

Man könnte dann die Anwendung mit Flag = false rausgeben und man selbst hat die Anwendung mit dem Flag = true daheim und somit kann man das schonmal vor der Veröffentlichung testen.

Das was du machen möchtest geht damit dann natürlich auch.

Später soll das ganze dann noch einen Flag "Beta" bekommen. Im Grunde der gleiche Zweck aber so kann man den Benutzern einen Haken "Nach Beta-Versionen suchen" geben.

D
55 Beiträge seit 2008
vor 16 Jahren

Ah haha, wie konnte ich das uebersehen. Hatte das sogar eingestellt 🙂
Ich werd das so machen, das sich der User aussuchen kann ob er nur Stable Updates bekommt, oder, wenn er mutig ist, auch Unstable testversionen. Geile Sache das ganze 🙂

Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Japp genau so hab ich das dann für den Beta-Flag gedacht.
Aber bis der implementiert ist kann man das natürlich auch mit dem Test-Flag umsetzen.

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Die Impersonifikation ist jetzt umgesetzt.
Ein kleines Demovideo könnt ihr euch hier anschauen: Klick

Ich werde nun zusehen das ich das alles soweit jetzt fertig mache und dann gibts die neue Version. Die Proxygeschichte verschieb ich dann auf die nächste Version, dann ist wenigstens mal diese Funktion verfügbar.

420 Beiträge seit 2007
vor 16 Jahren

Hallo EvilMM,

wäre es vielleicht sinnvoll aus der Textbox Benutzerfeld eine ComboBox zu machen und schon alle dem System bekannten Benutzern einzutragen?
Gehen wir mal von einem DAU aus, wenn der dann schon die vorhandenen Benutzer sieht, kann er sich eher erschließen, was mit "Konto" gemeinnt ist usw..

Gruß Dennis

420 Beiträge seit 2007
vor 16 Jahren

achja mir ist noch etwas aufgefallen, bei der Statistik:
Wäre es nicht interessant, diese speichern zu können? Wenn ich so in die Zukuft blicke, würde ich mich vielleicht fragen "hey, wie viele Anfragen hattest du eigentlich noch vor einem Jahr im Vergleich zu heute?" 🙂

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Der Punkt mit der Combobox ist bestimmt umsetzbar.
Zum zweiten Punkt: wie genau? Die Statistiken werden ja für immer gespeichert also kann man das ja schon vergleichen. Oder was genau meinst du?

420 Beiträge seit 2007
vor 16 Jahren

@EvilMM:

oh man klar.. sorry bin wohl noch nicht ganz wach 🤔

L
770 Beiträge seit 2006
vor 16 Jahren

Dazu gibts ja das Property "Test".
Steht das auf true werden nur die Pakete gezogen die das Flag "Testpaket" gesetzt haben. Andernfalls die anderen. Ist gedacht um Updatepakete vorher zu testen.

Verstehe ich das richtig, dass bei gesetztem "Test" Flag NUR die Testpakete gezogen werden? oder zusätzlich?

Ich persönlich würde mir denken, diese werden zusätzlich gezogen. Bitte um aufklärung 🙂

lg Lion
P.S.: Weiterhin tolle Arbeit 😉

lg Lion

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Beim Flag "Test" werden nur Testpakete gezogen. Das hat aber den Grund, dass dieser Flag nicht für Betaversionen gedacht ist oder dergleichen.

Es kommt ja ein Flag Beta dazu der genau das dann abdecken würde. Suche nach allem, aber auch nach Beta-Paketen.

Um das aber nochmal ganz deutlich zu machen:
Der Flag "Test" ist einzig dafür gedacht um ein Updatepaket zu "testen" bevor man es veröffentlicht. Mehr erstmal nicht.

Also man hat die Anwendung beim "Kunden" draußen mit Test=false. Man selbst hälte die identische Anwendung mit Test=true und kann so erstmal testen ob das Updatepaket funktioniert. Hat es geklappt veröffentlicht man es durch entfernen des Hakens.

Der Beta-Flag den ich einbauen möchte ist dann dafür gedacht um diese Pakete auf Wunsch auf miteinzubeziehen.
Will der Kunde auch Beta-Updates kann man in der Anwendung das Flag zur Laufzeit auf true setzen.

So hab ich mir das mal gedacht.

D
55 Beiträge seit 2008
vor 15 Jahren

Ich hatte gerade einige interessanten Fehler:

1)
Version meines Programs: 1.1.0.6, 1.1.0.7 und 1.1.0.8.
Das Update von 1.1.0.8 soll ab version 1.1.0.6 möglich sein.

Update wird durchgefuehrt. Ich starte das programm (In version 1.1.0.8) und er bietet mir ein Update von 1.1.0.8 auf 1.1.0.8 an oO...

2)
Programm Update verlauf:

  • Update wird gefunden
  • Update.exe wird heruntergeladen
  • Programm wird beendet
  • Programm wird gestartet
  • Wenn ich das Program nun beende wird das Update weiter fortgefuehrt.

Eingestellt ist bei diesem Paket das der Dienst nach dem Update starten soll.
Wenn ich das deaktiviere funktioniert alles so wies sollte.
Wenn ich ein Packet bearbeite, bei dem der Dienst nach dem Update NICHT starten soll, is die Checkbox dafuer trotzdem aktiviert.

  1. Ich mache einen Doppelklick auf das Projekt, in der Statusleiste steht "Download complete: version.xml" doch das Fenster "Projekt öffnen" verschwindet nicht (Drinnen steht "Öffne Projekt "so-und-so"")

Das passiert aber nur ab und zu.

  1. Ich will mir eine Statistik ansehen. Ich klicke auf das Statistik TAB, klicke auf den Aktuallisieren Button. es kommt ein Fehler mit der Meldung ..blabla... 404 Not found ...
    (Hoffe das hab ich nicht schonmal gepostet..)

greetz DeadEye

Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 15 Jahren

Danke für die Hinweise.

zu Punkt 1: werde ich versuchen nachzustellen und der Fehler sollte leicht zu beheben sein.

zu Punkt 2: Da versteh ich nicht genau was du mit dem Updateverlauf sagen möchtest. Der mit der CheckBox werde ich beheben.

zu Punkt 3: Den Fehler kenne ich, konnte leider aber bisher noch nicht ermitteln woran das liegt 😦

zu Punkt 4: Das sollte in der nächsten Version bereits behoben sein. Es sei denn natürlich der Pfad den du unter "Vollqualifizierter Pfad" angegeben hast stimmt nicht.

D
55 Beiträge seit 2008
vor 15 Jahren

Zu Punkt 2:
Das Programm wird bereits bei mir gestartet, nachdem das Update heruntergeladen ist, jedoch nocht nicht die Dateien ueberschrieben hat. (Aber ich bilde mir ein dass wenn ich nicht eine einzelne Datei Update sondern ein Setup ausfuehren lasse, das sich dann alles Richtig verhaellt)

Also die Settings sind: Datei zum updaten: soundso.exe
Der Rest ist auf Default.

Beim Programmstart ueberpruefe ich nun nach Updates.

Wenn ein Update kommt wird das Update heruntergeladen,
dann wird das Program selbst beendet und wieder gestartet (Wobei ja der programmstart erst nach dem Update und nicht nach dem download des Updates erfolgen sollte). Nun passiert so lange nichts, bis ich das Programm per Hand beende, dann wird auch das Update ploetzlich wie erwartet fortgefuehrt..

So, ich hoffe das war jetzt weniger verwirrend formuliert 🙂

Zu 3: Vlt solltest du einen Timer einbauen der nach einer gewissen Zeit den aktuellen Status des oeffnens Ueberprueft. Wenn die update.xml heruntergeladen ist, startet dann dieser dieser Timer der alle 5 oder 10 Sekunden checkt ob das Dokument wirklich schon geoffnet ist.
Vlt hast du auch irgendwo ein Try-Catch drinnen wobei das Catch vlt nicht richtig abgehandelt wird und vlt still und leise die update.xml bei einem Fehler wieder schließt, jedoch keinen Fehler ausgibt? Sieht naemlich irgendwie danach aus...

Zu 4: Die FQURL stimmt, allerdings faellt mir gerade was ein:
Der Updateserver ist ein IIS, und er hatte Zuerst Probleme Updates herunterzuladen da er den MIME typ .update nicht kannte.. Was fuer eine Datei wird denn bei der Anzeige der Statistik geladen?

Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 15 Jahren

Mmh das ist sonderbar - das werd ich mal näher überprüfen woran das liegen kann grübel Aber jetzt hab ich dein Problem verstanden 🙂

Aufm IIS gibts da aber eh immer irgendwelche Probleme bei der Statistik. Im Moment versuch ich alle IIS-Sachen zu lösen - deswegen dauerts auch gerade alles n bissl länger.

Im Zuge mit der neuen Statistik sollte das Problem dann auch behoben sein.

S
120 Beiträge seit 2005
vor 15 Jahren

Hey EvilMM,

dein K_updater ist einfach spitze! Mir fehlen die Worte.... Vielen vielen Dank, dass du solch ein nützliches Tool kostenfrei zur Verfügung stellst! Ich werde es in meiner nächsten Version von Simple Entry implementieren. Diese wird hier zum download stehen: www.scantickets.de

Hab es gerade getestet, funktioniert super. Muss nur noch sicher stellen, dass es unter allen Umständen läuft. Dann stell ich es online. 😮)

Ciao SunboX

Actionscript ist die Möglichkeit, postmaterielles Basteln zum Lebensstil zu machen.

Künstliche Intelligenz ist leichter zu ertragen, als natürliche Dummheit!

S
120 Beiträge seit 2005
vor 15 Jahren

Hallo nochmal,

um mir doppelte Uploads zu ersparen und die Administration zu erleichtern, habe ich eine kleine Klasse in Php geschrieben, welche es ermöglicht die Aktuellste Version auszulesen und auf der eigenen Webseite zum Download anzubieten. Ich hänge die Klasse und ein benötigtes Skript als Download an. Angewendet wird es wie folget:

[php]
<?
require('software/LatestVersion.class.php');

$lv = new LatestVersion();
?>
<a href="<?= $lv->getDownloadLink() ?>"> Meine Software (Version <?= $lv->getVersion() ?>, <?= $lv->getFileSize() ?>)</a>
[/php]

Live zu sehen ist das Ganze hier: http://www.scantickets.de/downloads.php -> SimpleEntry – Paket (Version 1.0.1.0, 1.76 MB)

Evtl. kann das jemand gebrauchen, ich stelle es frei zur Verfügung. Die beiden Dateien liegen bei mir im Root-Verzeichnis der Updates, sie können aber auch anderswo abgelegt werden. Ändert dazu entsprechend die Einstellungen in der Datei "LatestVersion.class.php".

Ciao SunboX

Actionscript ist die Möglichkeit, postmaterielles Basteln zum Lebensstil zu machen.

Künstliche Intelligenz ist leichter zu ertragen, als natürliche Dummheit!

L
770 Beiträge seit 2006
vor 15 Jahren

@SunboX,

für welche Variante ist dein php Skript ausgelegt? soweit ich gesehen habe "nur" für die Datei - Ablage, richtig? ODer unterstützt es auch die Updates, welche einen mySQL im Hintergrund haben?

lg Lion

lg Lion

S
120 Beiträge seit 2005
vor 15 Jahren

Hi Lion1984,

ja genau, es ist nur für die Dateiablage, da ich diese benutze. Es sollte aber auch recht einfach erweitert werden können. Was auch noch interessant ist, man könnte noch eine Methode ergänzen, welche einen Changelog als txt extrahiert. Evtl. werde ich das mal noch nachreichen, sofern nicht ein anderer schneller ist. ;o)

Ciao SunboX

[edit]

Wer noch möchte, damit Testversionen nicht angezeigt werden, erstzt Zeile 38 in der Datei LatestVersion.class.php durch folgende Zeile:

[php]if(strnatcasecmp($update->general->newversion, $this->version) > 0 && strstr($update['allow'], 'test') === false)[/php]

[/edit]

Actionscript ist die Möglichkeit, postmaterielles Basteln zum Lebensstil zu machen.

Künstliche Intelligenz ist leichter zu ertragen, als natürliche Dummheit!

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 15 Jahren

@SunboX:
Erstmal vielen Dank für das Lob. Sowas liest man gerne.
Zum zweiten finde ich es klasse, dass du dir die Mühe mit dem Auslesen der Updatepakete machst.

Sowas stand bei mir selbst auf dem ToDo - eventuell wende ich mich da mal per PM oder Mail an dich und vllt können wir deine Skripte direkt im K_Updater verwenden.

Dennoch aber eine Frage zum Verständnis: was genau macht es derzeit für einen Sinn direkt auf die *.update - Datei zuzugreifen? Ich wollte für die übernächste K_Updater-Version die Möglichkeit einbauen, die Updates manuell zu laden (falls keine INet-Verbindung verfügbar wäre) und diese dann in den Programmordner zulegen, so dass der K_Updater die .update-Dateien direkt erkennt und das Update ohne Herunterladen durchführen kann. Da dass aber ja in der aktuellen Version nicht funktioniert frage ich mich gerade was man genau für einen Nutzen hat 🙂 Vllt steh ich aber auch grad aufm Schlauch g

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 15 Jahren

Bei der Gelegenheit werde ich mich aber mal drum kümmern und meine Doku für den Aufbau sämtlicher xml-Dateien ins Wiki stellen. Ich denke das wäre eine Hilfe für alle die da n bissl dran rumbasteln wollen.

S
120 Beiträge seit 2005
vor 15 Jahren

Hi EvilMM,

du kannst mir gerne eine Nachricht schicken, sofern es meine begrenzte Freizeit zulässt, bin ich gern bereit da zu helfen.

Dennoch aber eine Frage zum Verständnis: was genau macht es derzeit für einen Sinn direkt auf die *.update - Datei zuzugreifen?

Naja, es macht sofern sinn, dass ich als Update immer die komplette Software bereitstelle. (msi) Sofern steht dann immer die neueste Version auf meiner Webseite. Wenn man allerdings nur einzelene Dateien updated, macht mein Skript keinen Sinn (außer das man diese halt "per hand" herunterladen könnte). Wenn du den Updater für eine offline Installation ausbaust, würde es wieder sinn machen.

Ciao SunboX

PS:

Hier noch ein kleiner Tipp, für alles die Ihre aktuelle Versionsnummer nur in den Projekt-Einstellungen ändern möchten. An den Updater im Quelltext denkt man ja meistens nicht. ;o)

KSettings.CurrentAppVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();

Allerdings müsst ihr dazu im K_Update-Projekt eine 4-stellige Versionsnummer angeben!

Actionscript ist die Möglichkeit, postmaterielles Basteln zum Lebensstil zu machen.

Künstliche Intelligenz ist leichter zu ertragen, als natürliche Dummheit!

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 15 Jahren

OK so macht das dann Sinn. Ich werd mich da mal ranhalten und versuchen den Updater so anzupassen, dass es auch Sinn machen würde Teilupdates runterzuladen.

S
120 Beiträge seit 2005
vor 15 Jahren

Hallo,

ich hab mich nochmal ne halbe Stunde hingesetzt und das Download-Script etwas erweitert / vereinfacht. Einfach die drei Dateien im Anhang in euren Softwareordner auf dem Server kopieren und www.domain.de/softwareordner/test.php aufrufen. Es sollten keine weiteren Einstellungen nötig sein. Der "Downloader" funktioniert aktuell nur mit der Dateibasierten Updateverwaltung (nicht MySQL!).

Wie ihr den "Downloader" verwendet, könnt ihr anhand der "test.php"-Datei sehen. Ist denke ich selbsterklärend. Ansonsten kann ein Blick in die Klasse "Updates.class.php" (vorher "LatestVersion.class.php") nix schaden. ;o)

Für manche bestimmt interessant, es ist jetzt auch möglich einen "Changelog" anhand der eingegebenen Beschreibungen und der Versionsnummern auszugeben.

viel Spaß beim basteln!
Ciao SunboX

Actionscript ist die Möglichkeit, postmaterielles Basteln zum Lebensstil zu machen.

Künstliche Intelligenz ist leichter zu ertragen, als natürliche Dummheit!

D
55 Beiträge seit 2008
vor 15 Jahren

Ich weis es wurde hier in diesem Thread schonmal angesprochen aber wie ist das eigentlich:

Wenn man sagen wir 10 Updates hat, die jeweils nicht fuer eine Specifische sondern fuer alle vorhergehenden Versionen geegnet sind, weshalb laed er dann trotzdem alle nach der Reihe?

Vorallem wenn man statt specifischen Dateien eine Installations Datei fuer das Update nimmt, denke ich, sollte das Update mit dem Setup vorhergehende Updates overrulen, da mit dem Setup doch sowieso die aktuellsten Versionen der komponenten des upzudatenden Programms bis dato auf den Rechner kommen - oder?

MfG DeadEye

Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop

4.939 Beiträge seit 2008
vor 15 Jahren

Hier noch ein kleiner Tipp, für alles die Ihre aktuelle Versionsnummer nur in den Projekt-Einstellungen ändern möchten. An den Updater im Quelltext denkt man ja meistens nicht. ;o)

KSettings.CurrentAppVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();  

Allerdings müsst ihr dazu im K_Update-Projekt eine 4-stellige Versionsnummer angeben!

Ich habe bei mir stattdessen folgenden Code verwendet:


FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(Application.ExecutablePath);
KSettings.CurrentAppVersion = fileVersionInfo.FileVersion;

Gibt es jetzt irgendwelche besonderen Unterschiede (Vor-/Nachteile) zwischen diesen beiden Versionen?

D
55 Beiträge seit 2008
vor 15 Jahren

Hier noch ein kleiner Tipp, für alles die Ihre aktuelle Versionsnummer nur in den Projekt-Einstellungen ändern möchten. An den Updater im Quelltext denkt man ja meistens nicht. ;o)

KSettings.CurrentAppVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();  

Allerdings müsst ihr dazu im K_Update-Projekt eine 4-stellige Versionsnummer angeben!

Ich habe bei mir stattdessen folgenden Code verwendet:

  
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(Application.ExecutablePath);  
KSettings.CurrentAppVersion = fileVersionInfo.FileVersion;  
  

Gibt es jetzt irgendwelche besonderen Unterschiede (Vor-/Nachteile) zwischen diesen beiden Versionen?

Ich denke das erstere Variante schneller sein wird, weil du da auf jedenfall bereits auf das in den Speicher geladene Assembly zugreifst, bei der 2ten version aber zuerst noch auf die HDD zugreifen musst.

Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop

H
182 Beiträge seit 2006
vor 15 Jahren

Ähm ich verwende immer FileVersion da die AssemblyVersion glaub ich den Nachteil hat, das referenzierende Assemblies neu Kompiliert werden müssen wenn sich die AssemblyVersion ändert...

Ich lese die FileVersion folgendermaßen aus:


public class ReflectionHelper
    {
        public static string GetAssemblyFileVersion(Assembly assembly)
        {
            string msg = "[No version availible!]";
            foreach (object obj in assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true))
            {
                AssemblyFileVersionAttribute result = (AssemblyFileVersionAttribute)obj;
                msg = result.Version;
            }

            return msg;
        }
    }

und rufe das so auf:


GetAssemblyFileVersion(Assembly.GetCallingAssembly());

Weiß net ob des die schönste Variante ist, aber es ist eine 😉

Gruß
HyperteX

"In der Informatik geht es genauso wenig um Computer wie in der Astonomie um Teleskope."
Edsger Dijkstra

EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 15 Jahren

@DeadEye: das liegt daran, dass die Versionen nicht übersprungen werden weil ich es noch nicht implementiert habe 🙂 Ich bin aber gerade dabei eine Logik dafür zu schreiben um immer die neueste Version zu selektieren.

Das würde bedeuten, wenn man 3 "für alle" Pakete hat mit den Nummern:
1.1.0
1.2.0
1.3.5

so würde der updater die Version 1.3.5 wählen. Bis zu nächsten Version schaffe ich das noch das umzusetzen.

D
55 Beiträge seit 2008
vor 15 Jahren

Cool ich warte schon gespannt darauf 😁

@HyperteX:
Das ist ne coole Variante an die Version zu kommen. Auf jedenfall schoener und Generischer als mit

Assembly.GetExecutingAssembly().GetName().Version.ToString();

😉

Languages: C#, C, C++, Java, VB, PHP, ASP, HTML/XHTML, XML, CSS, JavaScript.
learning since: 1996
IDE's: Visual Studio 2008 Team Editon, Eclipse, Sharpdevelop / Monodevelop

Thema geschlossen