Announcement

Collapse
No announcement yet.

ClickOnce Update via FTP

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ClickOnce Update via FTP

    Hallo,

    ich habe meine erste C# Anwendung erstellt und möchte diese nun Publishen.
    Die Installation sollte von CD/DVD erfolgen, wobei die Anwendung vor dem Start nach verfügbaren Updates auf einem FTP-Server nachsehen soll.

    ClickOnce sollte, soweit ich gelesen habe, ideal für diese Aufgabe sein.
    Theoretisch sollte das recht einfach sein, doch praktisch hakt die Umsetzung an einem Problem: VS 2008 (SP1) lässt es nicht zu, dass ich als Update-Location einen FTP-server auswähle (mit http hat es keine Probleme).

    Nach der Eingabe des FTP-Servers (ftp://www.myftp.com/) als Update-Location im Publish Wizard erscheint eine Fehlermeldung ( ...The string must be a fully qualified URL or UNC path...)

    Ich bin mir nun nicht sicher ob ein FTP-Server als Update-Location unterstützt wird. Für mich sind die Informationen in der msdn hierzu verwirrend:

    http://msdn.microsoft.com/en-us/library/31kztyey.aspx

    Im Kapitel "Publish to a file share" steht, dass "Direct Download from FTP is not supported."

    Beim Kapitel "Publish to a CD-ROM or DVD-ROM" wird jedoch angegeben, dass ein FTP-Server als Update-Location zulässig ist.

    Ich weiss nun nicht ob das Update über FTP überhaupt unterstützt wird, oder ob ich einen Fehler beim Publishen gemacht habe.

    Hat jemand schon Updates über FTP zustandegebracht oder eine Idee, wo der Haken liegt?

    Danke schon mal im Voraus für Eure Anregungen.

    Gruß,
    Uffze

  • #2
    Hallo,

    beim Test kommt bei mir der gleiche Fehler.

    Ich verwende wegen diesem und anderer Probleme bzw. da mit ClickOnce zu starr ist dies nicht.

    Du könntest es so lösen:
    1. erstelle einen BootStrapper - ein Programm das die eigentliche Anwendung startet
    2. das Update soll wie von dir beschrieben vor dem Programmstart ausgeführt werden. D.h. im BootStrapper werden die aktualisierten Dateien von der FTP-Site geladen und ins Anwendungsverzeichnis kopiert
    3. danach wird das eigentliche Programm gestartet


    Da die Anwendung .net ist ist keine Installation nötig, kopieren der Assemblies reicht.

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      FTP wird nur zum publishen unterstützt. Die Installation der ClickOnce Anwendung muß dann über einen anderen Weg erfolgen.

      Der Publishing-Wizard sollte also eigentlich deinen FTP-Server annehmen. Wenn du einfach nur deinen FTP Servernamen benutzt hast dann sollte man auch in die root dieses Servers schreiben dürfen und er muß annonymen Zugriff erlauben.
      Ist das bei dir so?

      Comment


      • #4
        Hallo gfoidl,

        Danke für die Antwort. Die vorhergehenden Applikationen wurden in meiner Firma auf ähnliche Art gemacht. Das Update wurde jedoch kaum genutzt und uns fehlen die Erfahrungswerte damit (ausserdem könnte unsere Lösung eleganter sein).
        Ich wollte ClickOnce verwenden, weil's einfach zu Verwenden ist (bin ein Neuling bei Windows-Applikationen) und besser getestet ist als unsere Lösung.

        Wenn bei ClickOnce das Update über FTP gar nicht zu bewerkstelligen ist, werde ich aber auf die alte Lösung wieder zurückgehen und den bestehenden Bootstrapper überarbeiten (deine Idee, die Applikation vom Bootstrapper zu starten gefällt mir recht gut; das läuft momentan noch umgekehrt).

        Danke für die Antwort - gut, dass ich nicht der Einzige mit dem Problem bin.

        Gruß,
        Uffze

        Comment


        • #5
          Hallo Uffze,

          wenn wir dann schon bei dieser Variante sind würde ich die Anwendung nicht vor dem Programmstart updaten sondern während der Programmausführung.

          Der Grund dafür ist simpel: Die Anwendung startet schneller und der Benutzer ist glücklicher .

          Da aber während der Ausführung die Assembly (EXE) vom Loader gesperrt ist muss zB Shadow Copying verwendet werden. Eine Einführung in dies gibts bei meinem Artikel auf CodeProject: http://www.codeproject.com/KB/install/ShadowCopy.aspx

          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #6
            Hallo Ralf,

            das Publishen an sich funktioniert am FTP-Server. Anonymer Zugriff ist nicht gestattet. Beim Publishen öffnet sich eine Dialog-Box (user, password) um mit dem FTP-Server zu verbinden.

            Meine Hoffnung war, dass sich ClickOnce vor dem Applikationsstart mit dem FTP-Server verbindet und ebenso mit Anmeldefenster nach Username und Password fragt.

            Wenn Ich Dich richtig verstehe, habe ich mit ClickOnce keine Chance, das Update durchzuführen.

            Gruß,
            Uffze

            Comment


            • #7
              Wenn Ich Dich richtig verstehe, habe ich mit ClickOnce keine Chance, das Update durchzuführen.
              Updaten für die Clients geht nur über file oder http. Was spricht gegen http?

              Comment


              • #8
                @ gfoidl

                Danke für den Link!
                Wenn ich das richtig verstehe, wird erst Dein Loader gestartet und legt einen "cache" an, in den die Applikation reinkopiert und ausgeführt wird.
                Die Applikation selbst bekommt dann z.B. einen "Update"-Button und überschreibt die .exe auf der Festplatte.

                D.H. Die Applikation weiss, wo das Original auf der Festplatte liegt?

                Ich werd' mir das mal genauer ansehen.

                Gruß,
                Uffze

                Comment


                • #9
                  @ Ralf

                  Eigentlich wäre http schon ok, aber dann kann jeder darauf zugreifen (sollte bei der Anwendung nicht sein) und wenn die http-Seite passwort-geschützt ist, kann ClickOnce nicht mehr damit verbinden.

                  Gruß,
                  Uffze

                  Comment


                  • #10
                    Hi,

                    ja genauso ist es.

                    mfG Gü
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #11
                      Eigentlich wäre http schon ok, aber dann kann jeder darauf zugreifen (sollte bei der Anwendung nicht sein)
                      Dazu könntest du die Anwendung auf einen PC registrieren lassen. Bei der Ausführung eine eindeutige Hardware-ID prüfen die bei der Registrierung ermittelt wurde.

                      Dazu verwende ich ein XML-Dokument mit den Infos aus der Registrierung -> dieses wird digital unterschrieben.

                      D.h. das die Signatur des XML-Dokuments wird bei Manipulation ungültig -> Programm startet nicht.

                      Auf anderen Rechner passt die HardwareID nicht -> Programm startet nicht.

                      mfG Gü
                      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                      Comment


                      • #12
                        @ gfoidl

                        Wie finde ich, bzw. die Applikation denn heraus wo das Original auf der Festplatte residiert, wenn eine Kopie davon läuft?
                        Muss ich auf fixe Dateipfade zurückgreifen?

                        Comment


                        • #13
                          Dazu könntest du die Anwendung auf einen PC registrieren lassen. Bei der Ausführung eine eindeutige Hardware-ID prüfen die bei der Registrierung ermittelt wurde.
                          Ich werde da eher auf eine Custom-Update Version zurückgreifen, da ich das mit meinem derzeitigen Wissenstand einfacher umsetzen kann, als die Variante mit der Registrierung.

                          mfg,
                          Uffze

                          Comment


                          • #14
                            Muss ich auf fixe Dateipfade zurückgreifen?
                            Fixe Dateipfade sind nicht nötig.
                            Beim Shadow-Copying kann mit Application.StartupPath der ursprüngliche Pfad der Anwendung ermittelt werden, also der Pfad wo die Anwendung liegt bevor sie ins Schattenverzeichnis (Cache) kopiert wird.

                            Dazu könntest du die Anwendung auf einen PC registrieren lassen. Bei der Ausführung eine eindeutige Hardware-ID prüfen die bei der Registrierung ermittelt wurde.
                            Bei Bedarf kann ich versuchen ein Demo zu erstellen.

                            mfG Gü
                            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                            Comment


                            • #15
                              Hallo gfoidl,

                              Danke noch mal für die ganze Hilfe.
                              Das mit der Demo ist nicht erforderlich, da hast Du mir schon genug weitergeholfen.

                              Der Loader ist eine gute Idee, die ich dann für alle kommenden Applikationen anwenden will. Unsere alte Lösung ist nicht recht sicher oder elegant. Da wird zuerst die Applikation gestartet und dann aus dieser heraus der Bootloader-Prozess gestartet. Dann schliesst sich die Applikation selber, damit der Bootloader die .exe überschreiben kann.

                              Ich werde nun versuchen ein Setup-Projekt zu erstellen, das den Loader und meine Applikation enthält und dem Loader den Aufenthaltsort (Installationsverzeichnis) und Dateiname der Applikation als Argument übergibt. Ich geb' Bescheid wenn's klappt.

                              mfg,
                              Uffze

                              Comment

                              Working...
                              X