Laden...

AppDater (ehemals K_Updater)

Erstellt von EvilMM vor 16 Jahren Letzter Beitrag vor 14 Jahren 225.313 Views
Thema geschlossen
EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Logs würden eventuell helfen. An webmaster@klausmoster.de
Versuch das Projekt mal mit einem Unterordner zu erzeugen. Also nicht direkt in den Root rein.
An der Stelle gab es schonmal ein Problem an dem ich gerade arbeite.
Jetzt fällt mir gerade ein... eventuell kann der auch mit dem www37 Probleme haben...

Hast du das beim Vollqulifizierten Pfad korrekt angegeben?

J
222 Beiträge seit 2006
vor 16 Jahren

www37 ging in den vorherigen versionen auch

beim pfad wo er die erreichbarkeit prüft und php prüft
habe ich dann die http adresse angegeben damits funktioniert ... war in den vorherigen versionen auch so ....

mit unterordner funktioniert das ganze auch nicht eben ausprobiert ich sende dir die logs eben.....

K
488 Beiträge seit 2006
vor 16 Jahren

Hey,

das mit der Projektöffnung habe ich auch. Ist bei mir recht heufig.

Zu den Sessions:
Ja er speichert die PHP Sessions nicht.
ZB speichere ich auf der Site die auf dem FTP Server gespeichert ist, den Login (name und pw), und sobald der User wieder klickt, ist die Session weg.
Lösche ich den von deinem System erstellen Ordner und die Dateien wieder, ist das Problem wieder weg.

ich habe es auf XXX probiert, also eine ganz normale Adresse.
Auch mit Unterordner etc pp. Immer das selbe Problem

Das Leben is :ugly:

Verdammt, mach das Fenster zu, wer hat den Gamma-Wert so hoch gestellt?

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

Mmh das ist mir etwas schleierhaft wie das zusammenhängen kann - mmh.

Mir ist da offenbar aber ein Fehler unterlaufen weswegen der Fehler mit der version.xml auftreten könnte. Ich werde versuchen den heute noch zu lösen.

Das war wohl doch falscher Alarm. Aber seit heute hab ich das auch öfters mit der version.xml... komisch... na ja es wird irgendworan liegen und dann find ich das auch 🙂

26 Beiträge seit 2008
vor 16 Jahren

Servus EvilMM,

ich frage mal nach ob du schon was in Bezug auf SSH/SFTP gemacht hast? Wenn nicht könnte ich ein kleines Testprojekt schreiben was die Klasse implentiert und wenn alles funktioniert kann ich dir dann die Sourcen zukommen lassen?

Anmerkung zum K_Updater:
Da noch kein SSH/SFTP zu verfügung steht, hier ein kleiner Workaround. Ladet euch einen FTP Server runter z.B.: FileZilla FTP Server.*Installiert den FTP Server auf eurem Rechner. *Legt einen Benutzer an und gebt ihm ein Verzeichnis mit allen Rechten. *Legt ein Projekt an. *Richtet den lokan FTP Zugang in K_Updater ein. *Geht in das freigegebene Verzeichnis und ändert die version.xml von <fullqualifiedurl>http://127.0.0.1/<project></fullqualifiedurl> in <fullqualifiedurl>http://yourhomepage/<project></fullqualifiedurl> *Kopiert den kompletten Inhalt des des Projektverzeichnis auf eure Hompage zb.:http://yourhomepage/<project> *Anschließend wie gehabt die Updateprüfung in eurem Programm incl. mit dem neuen "UpdatePath"

 
//...
updatesettings.UpdatePath="http://yourhomepage/<project>";
//...

Gruß ChMaster
------------ Projekte ------------
DBoxFE
DMS
First4 (Plugin developer)

J
1.114 Beiträge seit 2007
vor 16 Jahren

So, etwas verspätet, aber endlich auch mein Feedback zur neuen Version.

Zum Ersten kann ich keine grösseren Probleme mit der neuen Version feststellen. Das Herunterladen der Updatepakete läuft weiter tadellos, keine nennenswerte Unterschiede zur 1.2 Version. Ein paar Kleinigkeiten sind mir jedoch aufgefallen, und ein paar kleinere Bugs scheinen sich eingeschlichen zu haben:*Wenn ich ein neues Updatepaket schnüren will, und ich die Dateien auswählen will, die ins Paket reinsollen, so merkt sich die Adminoberfläche NICHT MEHR den Pfad zum letzten bin Verzeichnis meines Visual Studio Projektes. Ich hatte das Gefühl, dass das in der Verision 1.2 noch klappte. In der neuen Version öffnet sich der Dateidialog immer erst auf dem Desktop, und ich muss dann 7 oder 8 Verzeichnisstrukture durchrennen, um dann endlich da zu landen, wo sich meine Dateien befinden, die ins Paket sollen. Schön wäre es, wenn dieser Pfad, nach Schliessen des Dialog, irgendwo in den Projekteinstellungen vom K_Updater festgehalten würde, so dass beim nächsten Update direkt wieder in den Pfad gesprungen werden kann. Entweder so, oder gleich Angeben lassen vom Benutzter, wo sich das Verzeichnis befindet... Nur so als praktischer Tipp *Ich hatte einmal einen Fehler beim Hochladen des Paketes via FTP. Der war aber einmal, und war irgendwas mit nem Timeout oder so (hatte die Meldung leider nicht aufgeschrieben). Danach trat der Fehler auch nicht mehr auf, vielleicht war ich beim ersten Testen einfach zu langsam. *Die Sache mit den MySQL Statistiken will auch nicht so ganz. Egal was ich mache, ich krieg immer eine Fehlermeldung: Beim Anfordern der Statistiken ist ein Fehler aufgetreten... The remote server returned an error: (404) Not Found. Komischerweise wurde die KUpdate Tabelle jedoch beim Erstellen eines Projektes wunderbar angelegt. Wir haben Version 4.0.18 installiert auf einem Linuxrechner. Auch wenn ich diese Funktionalität nicht nutze, ist es mir eben nur aufgefallen.

Das Ganze läuft bei uns auf dem IIS eines WIndows 2003 Servers, also sowohl FTP als auch HTTP... Läuft eigentlich alles tadellos, bis auf die paar kleinen Anmerkungen.

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

Hallo Jelly,
erstmal vielen Dank für das Feedback.

Zum ersten Punkt: Das ging in der letzten Version auch nicht - zumindest nicht explizit. Aber auch mich nervt es bereits, dass der letzte Ordner nicht gemerkt wird. Das werd ich nachreichen.

Zweiter Punkt: Das kann tatsächlich passieren wenn man zulange nichts macht. Das trage ich gleich ein und werds dann beheben.

Dritter Punkt: Das müsste ich jetzt näher analysieren. Wenn das vorher einwandfrei funktioniert hat, dann könnte ich mir vorstellen woran das liegt.

Ich hoffe die ganzen Punkte übers WE gelöst zu haben. Am Sonntag sollte dann eigentlich die neue Version kommen.

@ChMaster: Am SFTP-Zugang hab ich noch nicht weitergearbeitet. Das muss leider noch etwas warten 😦

J
1.114 Beiträge seit 2007
vor 16 Jahren

Dritter Punkt: Das müsste ich jetzt näher analysieren. Wenn das vorher einwandfrei funktioniert hat, dann könnte ich mir vorstellen woran das liegt.

Nein, das hat in der vorigen Version auch nicht geklappt. Ich wollts nur hier nochmal anmerken.

Ich hoffe die ganzen Punkte übers WE gelöst zu haben. Am Sonntag sollte dann eigentlich die neue Version kommen.

Das ist zwar super, aber keinesfalls notwendig... Ich kann auch ganz gut noch ne Weile mit dieser Version leben.

Nehme die neue Version am WE aber natürlich dankend an 😁

J
51 Beiträge seit 2007
vor 16 Jahren

Erstmal wieder ein dickes BRAVO, das du es wieder mal geschafft hast ein Update rauszubringen, jedoch habe auch ich einen kleinen Schönheitsfehler und nen Vorschlag.

Der Fehler:

Wenn ich ein Projekt geöffnet habe und es dann maximiere wird das fenster schön groß´, der inhalt aber klein: Anchor festlegen 😉

Der Vorschlag:

Projekte vom Server importieren !
D.h: Man gibt seinen FTP Server an und dein Programm erkennt automatisch alle Projekte, die sich dort befinden. Nach dem auswählen, welche Projekte man bearbeiten will, hat man diese dann lokal zum bearbeiten zur Verfügung und spart sich somit das lästige Importieren / Exportieren !

Ansonsten immer noch super arbeit !

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

Habe eben Version 1.3.2 veröffentlicht. In dieser Version sind Fehler behoben.

Änderungen hier: Klick

Der Fehler, dass die Administrationsoberfläche beim Abruf der version.xml hängen bleibt besteht noch. Ich arbeite aber daran.

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

@dennisspohr:
Zu dem Problem mit der Firewall. Ich hab das mal getestet und nach kurzer Zeit (ich glaube 15-30 Sekunden) wird der Code 800 als Ergebnis der Updateprüfung geliefert. Prüfe das mal bitte ob das bei dir auch passiert.

420 Beiträge seit 2007
vor 16 Jahren

@EvilMM:

Okay, ich werde es heute Abend mal testen. Aber ich finde 15-30 Sekunden recht lang, oder? Teilweise ist man doch gewohnt, dass die Programme sofort merken wenn "keine Internet-Verbindung" besteht.

Gruß Dennis

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

Ja das ist wirklich zu lange.
Mal sehen wie ich das schneller machen könnte 🙂

K
488 Beiträge seit 2006
vor 16 Jahren

Hey,

bin grade deine neue Version am testen:

  • meine Session zersrpingt nicht mehr (ka was du gemacht hast^^)
  • Tip: Bei dem Auswahl einer Installationsdatei in einem Projekt, beim Dateinamen nicht "OpenFileDialog1" stehen lassen, finde ich unhübsch

Kann leider immer noch nichts hochladen.
Kommt der Fehler:
"Fehler bei Schritt 3:

In der Übertragungsverbindung können keine Daten geschrieben werden: Eine bestehende Verbindung wurde softwaregesteuert durch den Hostcomputer abgebrochen"

€dit:
Habs auf nem zweiten FTP getestet, dort funktioniert es.
Das koriose: Es ist der selbe Root xD

€dit2:
ok wieder der selbe Fehler beim zweiten Updateversuch,

Das Leben is :ugly:

Verdammt, mach das Fenster zu, wer hat den Gamma-Wert so hoch gestellt?

104 Beiträge seit 2006
vor 16 Jahren

....
Was aber leider komplett untergegangen ist, ist die Sache mit der Impersonifizierung. In jeder halbwegs vernünftigen Netzwerkstruktur wird ein normaler User keinen Schreibzugriff auf das Program Files Verzeichnis haben. Leider ist das bei einem Updatevorgang aber nötig. Zur Zeit gebe ich diese Rechte bei der Erstinstallation meiner Software, aber schön ist das nicht... Aber ich würde aktiv daran mitarbeiten, dieses Problem bei einer könftigen Version von K_Updater mit anzugehen, da ich das dann doch für einen ziemlichen wichtigen Punkt halte. Oder bin ich der Einzige hier, der mit diesem Problem zu kämpfen hat?
...

Volltreffer!
Habe mir heute den KUpdater mal angeguckt und teste noch ein wenig rum, aber genau dieser Sachverhalt ist ein KO Kriterium....
Wenn Ihr diesen Punkt angeht, dann könnte ich auch gerne aktiv mitarbeiten.

D
55 Beiträge seit 2008
vor 16 Jahren

Hi, ich hab mir eben grad KUpdate angesehen und bin eigentlich begeistert.
Aber ich haette da folgende Anmerkung:

Ich hab mir auf einem Server (Linux mit Apache2 und Proftpd) ein ueber das Web verfuegbares Verzeichnis angelegt.
Beim anlegen eines Projektes wollte das Admintool aber das / verzeichnis nicht nehmen, es gab eine Fehlermeldung mit etwas in der Art wie (Kann Datei nicht anlegen). nachdem ich das ganze mit einem Unterverzeichnis versucht hatte gings.

Nach einer unbestimmten Zeit klickte ich wieder auf das Editieren zum Projekt, und dann auf den Updates tab. dann kam eine Fehlermeldung das die Remoteverbindung beendet wurde, und dann hat sich das Admin tool aufgehangen und reagiert nicht mehr. (Nach einem Neustart der Applikation gings aber wieder) Das FTP Verzeichnis war aber die ganze Zeit verfuegbar.

So das waren aber noch die harmloseren Sachen.
Ich habe den KUpdate folgendermaszen eingebaut:


public void doUpdate(bool silent)
		{
			Settings kSettings = new Settings();
			kSettings.AuthenticateMode = SelfUpdate.authentication.none;
			kSettings.AuthenticateUsername = "";
			kSettings.AuthenticatePassword = "";
			kSettings.CurrentAppVersion = "1.0.0.0";
		kSettings.Language = SelfUpdate.language.german;
			kSettings.Proxy = "";
			kSettings.ProxyUsername = "";
			kSettings.ProxyPassword = "";
			kSettings.UpdatePath = "http://update.test.net/name/";
			SelfUpdate selfUpdate = new SelfUpdate(kSettings);
			selfUpdate.Test = true;
			UpdateCheckResult check = selfUpdate.Check();
			if (check.Code == 0)
            {
				// Kein Update nötig hier euren weiteren code einfügen
				if (!silent)
				{
					MessageBox.Show("Kein Update gefunden.", "Update", MessageBoxButtons.OK, MessageBoxIcon.Information,
					                MessageBoxDefaultButton.Button1);
				}
            }
			else if (check.Code == 1)
            {
                //Update nötig !
				MessageBox.Show("Update verfügbar\r\n" +
				"Neue Version: " + check.NewVersion + "\r\n" +
				"Beschreibung: " + check.Description);
				selfUpdate.DoUpdate();
            }
            else
            {
                string strError = null;
				switch (check.Code)
                {
                    case 2: strError = @"Update kann nicht verarbeitet werden. K_Updater.dll zu alt
                                            / nicht unterstütztes Protokoll. Programm muss manuell
                                            über die Homepage aktualisiert werden.
                                            URL steht in UpdateDescription !";
                                        break;
                    case 3: strError = @"Programmversion wird nicht mehr unterstützt.
                                         Updatebeschreibung steht in UpdateDescription !";
                        break;
                    case 10: strError = @"Verbindungsfehler. Proxy-Einstellungen oder
                                        Verbindungseinstellungen überprüfen  !";
                        break;
                    case 700: strError = @"Unbekannter Credentials-Fehler !";
                        break;
                    case 800: strError = @"Unbekannter Ausnahmefehler bei Download von
                                           updates.xml !";
                        break;
                    case 400: strError = @"Die Anforderung kann nicht ausgeführt werden !";
                        break;
                    case 401: strError = @"Client ist nicht berechtigt, auf diese Seite zuzugreifen !";
                        break;
                    case 403: strError = @"Ausführung der Methode verweigert !";
                        break;
                    case 404: strError = @"URL wurde nicht gefunden !";
                        break;
                    case 405: strError = @" Methode für diese Seite nicht erlaubt !";
                        break;
                    case 406: strError = @"Verarbeitung der Header ist nicht möglich  !";
                        break;
                    case 407: strError = @"Proxies sollen verifiziert werden !";
                        break;
                    case 408: strError = @"Die Methode konnte innerhalb einer Zeitspanne
                    nicht ausgeführt werden !";
                        break;
                    case 409: strError = @"Konflikt entsteht, wenn neuere Änderungen
                    überschrieben werden !";
                        break;
                    case 410: strError = @"Die gewünschte Seite ist nicht mehr vorhanden !";
                        break;
                    case 900: strError = @"Unbekannter Proxy-Fehler !";
                        break;
                    default: strError = @"Unbekannter Update Fehler !";
                        break;
                }
				MessageBox.Show(strError, "Code: " + check.Code, MessageBoxButtons.OK, MessageBoxIcon.Information,
								MessageBoxDefaultButton.Button1);
                }
		}

Wenn ich nun zu DoUpdate(); komme (die CurrentAppVersion hatte ich testhalber auf 1.0.0.0 im Debugger gesetzt) sehe ich kurz das UpdateFenster und dann kommt dieser Fehler:

Cross-thread operation not valid: Control 'progressBar_Download' accessed from a thread other than the thread it was created on.

Irgendeine Idee was das sein koennte? Ich hab selber leider noch nicht so viel erfahrung mit Cross-Thread Operationen.

greetz

[Edit]
Nochwas: Ich mache gerade einen doppelklick auf mein Projekt und jetzt steht da:
Fehler bei Schritt 1:
Unable to write data to the transport connection: Eine vorhandene Verbindung wurde vom Remotehost geschlossen.
Ich klicke auf OK und dann nochmal doppelt auf das Projekt und jetzt gehts wieder problemlos.

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

"/" wird nicht akzeptiert, dass ist richtig. Das liegt an einer doofen Sachen. Ich lösche vorher immer den Ordner den man ausgewählt hat und lege ihn neu an. Somit stelle ich sicher, dass er auch leer ist.

Das ist recht unelegant und "/" kann ich natürlich nicht löschen. Deswegen der Fehler. Ich werde das aber beseitigen und das mal korrekt überarbeiten.

Das andere ist ein TimeOut-Problem. Das kämpfe ich noch mit, denn eigentlich stelle ich vor jeder Aktion die Verbindung zum FTP-Server her. Mal sehen was ich da mit KeepAlive oder dergleichen machen kann.

Mmh das Problem mit dem Cross-Thread ist sonderbar. Das hatte ich jetzt auch noch nie gehabt... grübel hat da einer eine Idee?

Ansonsten zur Sache mit der Impersonifikation. Ich brauche da durchaus Leute die Testen und die mir dabei eventuell etwas helfen können.
Wenn ihr nichts dagegen habt wende ich mich wenn ich aktiv damit anfange per PM an euch - sehe ja hier im Thread wer es schon alles gefordert hat.

Mit Impersonifikation und UAC hab ich von der Programmierseite selbst noch fast keine Erfahrung und da bin ich für jede Hilfe dankbar.

104 Beiträge seit 2006
vor 16 Jahren

Mmh das Problem mit dem Cross-Thread ist sonderbar. Das hatte ich jetzt auch noch nie gehabt... grübel hat da einer eine Idee?

Der Process der upzudatenen Anwendung muss geschlossen werden... Das muss im K_Updater eingestellt werden. Hatte vorhin genau das gleiche Problem...
Zumindest lags bei mir daran 😉

Ansonsten zur Sache mit der Impersonifikation. Ich brauche da durchaus Leute die Testen und die mir dabei eventuell etwas helfen können.
Wenn ihr nichts dagegen habt wende ich mich wenn ich aktiv damit anfange per PM an euch - sehe ja hier im Thread wer es schon alles gefordert hat.

Mit Impersonifikation und UAC hab ich von der Programmierseite selbst noch fast keine Erfahrung und da bin ich für jede Hilfe dankbar.

Ich stelle mich da gerne zur Verfügung. Habe damit leider auch noch keine Erfahrung, aber man hört ja nie auf zu Lernen...

420 Beiträge seit 2007
vor 16 Jahren

@EvilMM:

Soo.. ich habe es mal getestet, bei mir dauert es ca. 20 Sekunden 😉

Gruß Dennis

T
179 Beiträge seit 2007
vor 16 Jahren

könnte sein, dass ich nochmal n bisschen arbeit für dich hab:
ist es denn bereits möglich, Programme mit Plugins (also auch die Plugins einzeln) zu updaten?

409 Beiträge seit 2006
vor 16 Jahren

könnte sein, dass ich nochmal n bisschen arbeit für dich hab:
ist es denn bereits möglich, Programme mit Plugins (also auch die Plugins einzeln) zu updaten?

Hm, wo ist das Problem? Wenn die Plugins z.B. als DLL vorliegen kannst du ja einfach die updaten!?

T
179 Beiträge seit 2007
vor 16 Jahren

schon, nur find ichs etwas blöd, dass ich dann immer ein neues Paket erstellen muss
besser wäre es, wenn ich für jedes Plugin dann einen eigenes Updatepaket erstellen könnte, und der User dann halt immer nur die neuesten Plugins und nicht wieder das ganze Paket runterladen müssten.

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

@dennisspohr:
OK, dann funktionierts zumindest generell mal, aber 20 Sekunden nicht natürlich deutlich zu viel.

@t-master:
Das ist natürlich nachzuvollziehen und auch machbar. Aber erst später, ich habs mal im Bugtracker zu Version 1.10 geschrieben 🙂

W
196 Beiträge seit 2007
vor 16 Jahren

Hi könntest du vielleicht einen Proxy-Port indie DLL hinzufügen?

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

Japp natürlich. Sollte ja eigenltich jetzt schon gehen, aber ich habs nie wirklich durchgetestet. Ich kümmer mich aber drum. Ich schau mal, dass ich zumindest die Unterstützung in der DLL bis v1.4.0 drin hab.

D
55 Beiträge seit 2008
vor 16 Jahren

Mmh das Problem mit dem Cross-Thread ist sonderbar. Das hatte ich jetzt auch noch nie gehabt... grübel hat da einer eine Idee?

Der Process der upzudatenen Anwendung muss geschlossen werden... Das muss im K_Updater eingestellt werden. Hatte vorhin genau das gleiche Problem...
Zumindest lags bei mir daran 😉

Hi,

ich habs rausgefunden, es liegt nicht daran ob ich die Anwendung schliesze oder nicht, aber im VS Debugger kommt diese Meldung. In der Echtanwendung dann nicht.

Jedoch scheint das bei mir nicht zu klappen das die Anwendung ueber KUpdate beendet wird?

Die exe datei heist afmp.exe im Taskmanager steht als prozessname AFMP.exe
und ich habe bereits mit AFMP und AFMP.exe versucht das Programm zu beenden, scheint aber nicht zu funktionieren.

Aber nachdem ich das Prog per hand schliesze geht alles 🙂 Ich finde es ist ein super Tool!

greetz

[Edit]
Beende das Programm jetzt direkt nach SelfUpdate.DoUpdate(); mit Application.Exit() und funktioniert perfekt.

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

104 Beiträge seit 2006
vor 16 Jahren

Ansonsten zur Sache mit der Impersonifikation. Ich brauche da durchaus Leute die Testen und die mir dabei eventuell etwas helfen können.
Wenn ihr nichts dagegen habt wende ich mich wenn ich aktiv damit anfange per PM an euch - sehe ja hier im Thread wer es schon alles gefordert hat.

Mit Impersonifikation und UAC hab ich von der Programmierseite selbst noch fast keine Erfahrung und da bin ich für jede Hilfe dankbar.

Ich stelle mich da gerne zur Verfügung. Habe damit leider auch noch keine Erfahrung, aber man hört ja nie auf zu Lernen...

So, da mir das mit den Updates bei "nicht Admin Rechten" doch sehr auf dem Herzen liegt, hab ich da mal ein wenig rumgespielt, und hab folgenden Workaround gemacht.

Wenn ein Anwender der nur normale BenutzerRechte hat, ein Updatevorgang anstösst, wir ein neuer Prozess unter einem Admin Benutzer aufgerufen, der dann
den eigentlichen UpdateVorgang durchführt.

Folgender Code kommt in die Anwendung die unter einem Benutzerkonto nicht AdminRechten läuft
Der Prozess "KUpdateTest" wird dann mit einem Admin Benutzer (bei mir VPC) gestartet.


            Process updateProc = new Process();
            updateProc.StartInfo.UserName = "VPC";

            SecureString pass = new SecureString();
            pass.AppendChar('p');
            pass.AppendChar('a');
            pass.AppendChar('s');
            pass.AppendChar('s');

            updateProc.StartInfo.Password = pass;
            updateProc.StartInfo.FileName = @"KUpdateTest.exe";
            updateProc.StartInfo.UseShellExecute = false;
            updateProc.Start();

In dem KUpdateTest Prozess laufen dann alle Updatefunktionen unter AdminRechten durch.

J
51 Beiträge seit 2007
vor 16 Jahren

Seit dem Update kommt bei mir nur folgender Fehler, wenn ich versuche zu updaten ( also beim Aufruf der Funktion DoUpdate ) :

************** Ausnahmetext **************
System.ComponentModel.Win32Exception: %1 ist keine zulässige Win32-Anwendung
bei System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
bei System.Diagnostics.Process.Start()
bei System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
bei System.Diagnostics.Process.Start(String fileName, String arguments)
bei K_Updater.PrepareUpdate.workerPrepareUpdate_RunWorkerCompleted(Object sender, RunWorkerCompletedEventArgs e)
bei System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
bei System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)

Das ist nich nur bei mir so, sondern auch auf jedem anderen Vista Rechner. Werde es gleich noch mit XP probieren und dann hier rein editieren.

Auf Vista spielt es keine Rolle ob UAC an oder aus ist.

Hoffe der Fehler lässt sich finden 😉

//EDIT: Unter XP läuft es !

D
233 Beiträge seit 2008
vor 16 Jahren

Interessantes Projekt.
Ich hoffe, du wirst auch in Zukunft die Lust nicht daran verlieren.

Viel Erfolg!

D
55 Beiträge seit 2008
vor 16 Jahren

Hm. Wie waere es mit einer Moeglichkeit statt PHP/MySql ASP/MSSql zu benutzen?

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

420 Beiträge seit 2007
vor 16 Jahren

@DeadEye: warum? 😛

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

Der Sinn an der Stelle ASP zu verwenden erschließt sich mir jetzt auch nicht.
Die Unterstützung von MS-SQL ist für später (etwa 1.8.0) geplant.

D
55 Beiträge seit 2008
vor 16 Jahren

Ich meinte nicht anstelle, sondern eher als alternative.
Ich gehoere zwar auch zu den leuten die Server mit PHP sowie MySQL besitzen,
aber ich habe (und bin sicher nicht der einzige) auch Server auf denen nur IIS läuft (Und auf solchen Maschinen PHP einzurichten find ich is der Horror 😛).

Es ist nicht so das ich etwas gegen PHP oder so habe, aber ich hab zb in meinen Internen netzwerk nur IIS.

Das Admintool koennte ja automatisch erkennen ob es sich um einen Win oder *nix Server handelt und je nachdem entsprechende Dateien verwenden (bzw je nach Benutzerwahl)

Das waere jetzt aber nur so eine Idee 🙂

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

Also in dem Punkt muss ich dir Recht geben... PHP auf einem IIS einzurichten... Himmel... das musste ich zweimal hier in der Firma machen und ich saß jeweils n halben Tag dran. Müsst ich mir mal anschauen wieviel Zeit das genau in Anspruch nehmen würde.

Übrigens kommt in der nächsten Version nun auch endlich die Möglichkeit die Nachricht am Ende des Updatevorgangs zu unterdrücken. So muss nicht mehr mit OK bestätigt werden.

Das Proxyproblem bin ich gerade dabei zu lösen.

J
222 Beiträge seit 2006
vor 16 Jahren

also ich habe auch einen domainserver auf dem asp.net ( kein php) und my Sql genutzt wird

4.939 Beiträge seit 2008
vor 16 Jahren

Bzgl. des Cross-Thread-Fehlers habe ich auch schon einen Eintrag in den Bug-Tracker Mantis eingetragen: http://www.klausmoster.de/mantis/view.php?id=87

Als Workaround:


Control.CheckForIllegalCrossThreadCalls = false;
SUpdate.DoUpdate();

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

Um mal einen kleinen Vorgeschmack zu geben was die neue Statistikauswertung so bietet hab ich n kleines Video davon gemacht.

Hier der Link zum Video: Klick

D
55 Beiträge seit 2008
vor 16 Jahren

Also das sieht ja schon ganz cool aus 🙂

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

Ich bin nun dabei dieses Problem mit den Adminrechten zu lösen.

Schritt 1 ist mal gelöst: es ist möglich - wenn man das will - die Benutzerinformationen unter dessen Rechten die updater.exe ausgeführt werden soll direkt anzugeben. Das bedeutet der Anwender müsste nichts mehr bestätigen und das Update würde durchlaufen.

Ich konnte das auch unter XP erfolgreich testen. Der Benutzer hatte eingeschränkte Rechte, konnte das Update aber dennoch durchführen und im Programmeordner wurden die entsprechenden Dateien angelegt. Diese konnten im Anschluss aber auch nicht mehr vom Benutzer gelöscht werden, da dieser ja keine Rechte dazu hatte. Ich denke das ist vom Verhalten her korrekt.

Jetzt kommt aber eben noch der andere Punkt: die Kontoinformationen sollen ja nicht unbedingt schon mitgegeben werden, bzw. können sie ja auch im Normalfall gar nicht mitgegeben werden.
Wie ist in so einem Falle vorzugehen? Kann mir an dem Punkt jemand helfen wie ich eine Anwendung starte, so dass daraufhin diese Meldung aufpoppt und der Benutzer aufgefordert wird entsprechende Kontoinformationen anzugeben?

Ich denke dabei an diese Meldung:

J
1.114 Beiträge seit 2007
vor 16 Jahren

Hm, ich denke eher, dass dieses Fenster eben gerade nicht aufpoppen soll. Der stinknormale User soll ein Update ausführen können, ohne dabei selbst einen Admin Account angeben zu müssen. Das ist ja Sinn der Sache, denn sonst könnte er auch gleich sein Programm mit Adminrechten updaten.

Ich würde sagen, dass eben gerade diese Credentials in KUpadter_Admin Konsole definiert werden sollten, und bei Bedarf eines Updates werden diese Credentials übernommen.

Oder was ist deine Vorstellung von dem Ganzen?

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

Aber um das Update durchführen zu können braucht er ja vorrübergehende Admin-Rechte. Und wie genau soll das dann ablaufen?

Also er braucht ja zwingend Adminrechte sonst kann er ja auf keinen Fall in den Programmordner schreiben.

J
1.114 Beiträge seit 2007
vor 16 Jahren

Das ist ja genau das, was bei der Impersonifizierung passiert. Ich hatte dir diesbezüglich ja mal eine Klasse geschickt. Du startest also deine Update.exe ganz normal, mit normalen Rechten (das ist wichtig, denn sonst wird nach dem Update, wenn eine andere EXE automatisch gestartet werden soll, diese auch mit Admin Rechten gestartet. Das ist nicht gewollt).

Und sobald deine Update.exe zu löschen und kopieren beginnt, machst du eine Impersonifizierung. Die Credentials dazu (Domainname, Login und Password) müssen natürlich bekannt sein, und irgendwie verschlüsselt im XML Konfigurationsfile definiert sein. Nachdem du dich impersonifiziert hast, hat dein Programm diese Rechte, obwohl es noch im Taskmanager unter dem normalen User angezeigt wird. Nach dem Kopieren, also kurz bevor du die nach dem Update gewünschten Programme starten willst, hebst du die Impersonifizierung auf. Dadurch starten die Programme dann wieder als normaler User.

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

Ja das ist ja schon klar. Aber das Problem ist doch, dass ich doch hier noch nicht die Konteninformationen eines x-beliebigen Benutzers da draußen kenne, also muss ich ihn zu Laufzeit auffordern Benutzer und Passwort einzugeben.

J
1.114 Beiträge seit 2007
vor 16 Jahren

Ach so, jetzt versteh ich dich...

Ich geh von einer anderen Grundlage aus, dass sich nämlich die PCs, die ein Update aufspielen sollen, alle in der gleichen Windowsdomäne befinden. Da kann ich dann sehr wohl einen festen Domain User definieren, der dann lokal die nötigen Rechte besitzt.

Wenn jedoch nicht in einer Domäne, so sind diese Informationen natürlich nur auf dem Host definiert. Hmm. In dem Fall bleibt wohl wirklich nix anderes übrig, als nach einem User ze fragen, der die notwendigen Rechte besitzt. Ob das der Windowsdialog ist oder ein anderer spielt ja da keine Rolle, oder ?

Mal so rein prinzipiell könnte ich mir folgendes Scenario vorstellen:

  1. Sind Credentials in der XML Datei definiert, dann verwende die, ansonsten versuche das Update mit dem eingeloggten User
  2. Schlägt das Update mit dem eingeloggten User fehl wegen mangelnder Rechte, so frage nach einem anderen Account, impersonifiziere, und versuchs nochmal. Schlägts wieder fehl, nochmals fragen...
EvilMM Themenstarter:in
318 Beiträge seit 2006
vor 16 Jahren

Exakt. Genauso stell ich mir das auch vor.
Und genau diese Aufforderung benötige ich jetzt nämlich. Und da komm ich grad nicht weiter. Weil genau da stell ich mir dann vor, dass solch ein Dialog wie oben erscheint.

J
1.114 Beiträge seit 2007
vor 16 Jahren

Von den Informationen her benötigst du ja nur Login, Passwort und eventuell Domain. Du kannst dir doch aber leicht einen solchen Dialog basteln, der genau diese Informationen abfragt. Damit kannst du ja dann versuchen, dich zu impersonifizieren... Wenn du möchtest, kann ich dir diesen Dialog erstellen.

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

Richtig, das müsste reichen an der Stelle.
Wenn du das machen könntest wäre das natürlich klasse. Dann könnte ich mich an der Stelle dann schonmal auf das korrekte Impersonifizieren konzentrieren.

J
1.114 Beiträge seit 2007
vor 16 Jahren

Kein Problem... Wird zwar heut nix mehr, aber morgen werd ich mir das zur Brust nehmen... Ich werde dazu eine eigene Klasse definieren, welche die Credentials beinhalten wird, und die du nutzen kannst, um zu impersonifizieren. Ich denke das Passwort selbst werde ich wohl in einem SecureString ablegen, damit das auch alles halbwegs sicher ist. Der Dialog wird dir wohl ein DialogResult liefern, das du dann auswerten kannst...

Ist das so ok. Ich denke es macht keinen Sinn, wenn ich die Impersonifizierung selbst vornehme, da du dies ja eh machen musst, wenn in deinem XML File die UserCredentials definiert sind. Oder ?

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

So wie du dir das vorstellst wäre es gut. Passwort in SecureString wäre auch gut.

Dann bin ich mal gespannt und schonmal vielen Dank an der Stelle.

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

Ich habe es nun so umgesetzt:

Man kann bei der Erzeugung eines Updatepaketes die Konto-Daten für die Impersonifikation angeben, wenn diese schon vorher bekannt sind.

Tritt beim Update ein Fehler auf (Dateien können nicht gelöscht oder geschrieben werden) wird - falls Informationen angegeben wurde - per Impersonifikation der Benutzer kurzfristig gewechselt. Daraufhin wird erneut versucht die Datei zu löschen oder zu kopieren. Klappt das wieder nicht bekommt der Anwender eine Meldung mit einem entsprechenden Hinweis. Er hätte dann die Möglichkeit das Update abzubrechen, die Aktion zu wiederholen oder dann eben die Kontoinformationen manuell anzugeben.

Ich glaube das müsste dann in dieser Weise ok sein oder?

Thema geschlossen