Laden...
D
DeadEye myCSharp.de - Member
Softwaredeveloper Vienna Dabei seit 28.03.2008 55 Beiträge
Benutzerbeschreibung

Forenbeiträge von DeadEye Ingesamt 55 Beiträge

17.09.2009 - 14:45 Uhr

Gaebe es vlt die Moeglichkeit bei der Statistik Customparameter mitzugeben?
Zb _von _welcher Version _auf _welche geappdated wurde?

Btw, klasse Arbeit, sind hier brav am testen und auch meine Kollegen sind bereits total ueberzeugt vom AppDater 😃

28.07.2009 - 09:07 Uhr

Ich hab nun einen Workarround:

Ich setze den Cookie auf einer 2ten Seite, welche dann zu der Seite redirekted wo dieser benoetigt wird.

Weshalb er den Cookie jedoch einfach nicht beim Login setzt ist mir weiterhin ein Raetsel (lt. Debugger werden die Funktionen naemlich durchaus ausgefuehrt..)

27.07.2009 - 14:14 Uhr

mach mal:

myTable.css('float', 'left');
27.07.2009 - 13:26 Uhr

Hallo zusammen,

ich habe folgendes Problem:

Win Server 2008, IIS 7

Anwendung benutzt Formsauthentification fuer externen Aufruf und Windowsauthentification fuer internen Aufruf.

Das Besondere ist, dass wir ueber ein 2tes Formsauthentification Cookie ein SSO mit einer anderen Seite (welche nicht von uns erstellt worden ist) ermoeglichen.
Leider wird bei Windowsauthentification ueberhaupt gar kein Formsauthentification Cookie geschrieben.

Meine Frage waere nun wie ich dennoch bei WindowsAuth auf IIS7 dieses Cookie schreiben kann (anmerkung: Unter IIS6 funktioniert das!!)

Derzeit sieht der Code fuer dieses Cookie folgendermaszen aus:


string username = <Der Username>;
FormsAuthenticationTicket ticketCMS = new FormsAuthenticationTicket(1,
				    username,
				    DateTime.Now,
				    DateTime.Now.AddYears(15),
				    false,
				    String.Empty,
				    FormsAuthentication.FormsCookiePath);

string encTicketCMS = FormsAuthentication.Encrypt(ticketCMS);
HttpCookie authCookieCMS = new HttpCookie(".CMSCOOKIE", encTicketCMS);

authCookieCMS.Domain = ".domain.tdl";

Response.Cookies.Add(authCookieCMS);

Response.Redirect(FormsAuthentication.GetRedirectUrl(loginname, false), true);

Wie gesagt, dieser Code funktioniert auf IIS6 bei externem FormsAuth und internem WinAuth aufruf, und bei IIS7 leider nur extern....

Ich waere fuer jede Hilfe dankbar!

17.06.2009 - 09:47 Uhr

Nur einmal so ein Gedanke, aber was wuerdest du davon halten das Projekt OS zu machen? (ich hoffe das kam in diesem Thread nicht schonmal vor)

Ich denke das Projekt koennte sich so recht schnell weiterentwickeln...

19.01.2009 - 15:22 Uhr

Hm, leider doch nicht, zwar sah das ziemlich vielversprechend aus, aber hat leider nicht den gewuenschten effekt (Es kannt entweder alles ueberall hingeschrieben werden (Full), oder es kann nichts geschrieben werden (Alle anderen Settings. Nichtmal ins eigene Verzeichnis)).

Hat jemand eine Idee?

19.01.2009 - 14:22 Uhr

Loesung gefunden.
.Net Vertrauensebenen scheinen verantwortlich zu sein.
Krass nur das man per default vollzugriff auf alles hat...

19.01.2009 - 12:59 Uhr

Hallo zusammen,

wir sind bei mir in der Firma gerade dabei alte Webserver auf Win Server 2008 umzustellen, und haben schockiert festgestellt das Anwendungen (.Net sowie Classic ASP) arg weitreichende Berechtigungen haben.

Z.B. koennen sie ohne Probleme Dateien auf C: schreiben, lesen, loeschen.
Nach einiger Recherche fanden wir als Ursache das IIS als System Account laeuft und wenn man nun System die Berechtigung auf einen Ordner nimmt die Anwendungen auch nicht mehr drauf zugreifen koennen. Soweit so gut, nur ist das natuerlich keine Aktzeptable Loesung. Und mit der bestimmten Ursache bin ich auch nicht ganz zufrieden, es kann doch nicht sein das MS den IIS7 unter Win S2008 derartige Rechte gegeben haette?

Der IIS laeuft mit default Config, es sind nur die Log und Anwendungsverzeichnisse auf andere Partitionen gelegt worden. Ein paar custom Assemblys haben wir installiert und das programm ABC PDF (jedoch vermute ich die ursache nicht da)

Ich bin gerade dabei in einer VM mit frisch aufgesetzten IIS alles nachzuvollziehen, um sicherzugehen das das wirklich auch die Standard Config is.

Dennoch: Weis jemand hier woran das liegen koennte das eine Application so derart weitgreifende Rechte hat?

MfG DeadEye

07.01.2009 - 16:20 Uhr

Jo die Loesung ist mir ja dank euer Post inzwischen bekannt 😃 Danke nochmal 😉

WebBrowser-Control ist leider keine Option. Wird wohl doch ein quasi selbstgestricktes DataGrid werden muessen (wegen dem Zeilen Problem).

Normal waers mir eh relativ egal was der Taskmanager sagt, nur wuerd ich das gern nur aus interesse wissen was das eigentlich soll 😃 Aber zumindest weis ich das es mit den .Net Controls zu tun hat. Intressant ist auch das unter WPF dasselbe programm bei weitem weniger Benutzer und GDI Objekte hat 😃 das waer vlt auch ne moeglichkeit das ich dorthin umsteig (wenns der Kunde bezahlt 😛)

Danke auf jedenfall nochmal allen die nochmal gepostet haben 😃

07.01.2009 - 15:55 Uhr

Es ging damals um das selbe Thema richtig, eigentlich haette ich in dem Post schreiben sollen anstatt einen Thread aufzumachen.

Okay soweit ist es mir klar. Aber was genau sind diese Benutzer-Objekte im vergleich zu den GDI-Objekten...?

Zu den Benutzer Objekten findet sich leider auch net alzu viel in google (wohingegen sich zu den Handels und GDI Objekten dutzende Sachen finden lassen) und mich wuerde vorallem eben intressieren was die eben so tun, diese Objekte...

Prinzipiell nutze ich die Objekte nicht zur Datenerhaltung, die einzige Info die sie erhalten muessen ist die ID fuer einen Klick der Buttons. Die Methode mit das ich nur eine bestimmte Anzahl an Objekten z.B. 10 Darstelle und nur die Daten quasi verschiebe ist damals irgendwie gescheitert, ich hatte zwar angefangen, hatte aber dann das problem das jede Zeile von Eintraegen eine unbekannte Hoehe hat, abhnaegig davon was eigentlich dargestellt wird.

Ist es vlt sogar ratsam einfach alles per 'Hand' zu zeichnen? Das Scrollen sind naemlich auch fluessig funktionieren (nicht wie bei einem DataGrid, wo man Zeilenweise springt, sondern eher wie im Webbrowser....)

MfG DeadEye

07.01.2009 - 15:03 Uhr

([EDIT=herbivore]Threads zusammengefügt. Bitte keine Crossposts bzw. Reposts)[/EDIT]){orange}

In einer meiner Anwendung ist mir aufgefallen das ich in etwa 4.000 Benutzer Objekte und 80 GDI-Objekte habe (im Taskmanager)

Wo ist der unterschied zwischen denen, den ich weis zumindest das ich so eine hohe zahl an Benutzer Objekten habe da im Programm in einem Panel eine recht grosze Anzahl von Panels, Labels und Buttons hinzugefuegt wird. Leider crashed ab und zu die Applikation mit der Fehlermeldung dass das Erstellen eines Windows Handles nicht durchgefuehrt werden konnte, wobei allerdings die Spalte "Handles" im Taskmanager bei 'nur' 550 liegt fuer mein Programm.

Auf was genau Beziehen sich also Benutzer-Objekte? Auf Controls wie Buttons und Panels? Ich benoetige da leider eine grosze Anzahl gibts ne bessere Methode wie ich das Umsetzen kann? (Liste mit Buttons und Labels?)

MfG DeadEye

31.12.2008 - 12:16 Uhr

Achsoooo war das gemeint...
Eigentlich ganz simpel, aber du hast mir dadurch unglaublich weitergeholfen, ich danke dir herzlichst!

MfG DeadEye

31.12.2008 - 10:36 Uhr

Ich weis zwar nicht ganz ob das wirklich hier rein gehoert aber es geht um folgendes:

Vlt kennt ihr Riemers XNA tutorials. Tja ich bin grad dabei mir das selbst alles zu geben, allerdings gibts etwas, was ich einfach nicht kappiere, vlt kann mir jemand von euch helfen:

Es geht darum, das um zu ermitteln ob 2 Objekte miteinander kollidieren 2 Matritzen verwendet werden, eine fuer die Location von Obj A und eine fuer Obj B.
Jetzt wird allerdings damit das ganze funktioniert die Matrix von Obj B invertiert, und mein Prob is das ich einfach nicht verstehe warum.

Vlt deshalb weil ich naemlich nicht weis wie man eine Matrix invertiert, wie das quasi aussieht. Zwar gibts auf der Seite ein recht ausfuehrliches Matritzen tutorial, fuer die Leute dies in der Schule verschlafen haben, eine invertierung wird allerdings nicht erklaert. Jetzt koennte ich mir das ganze zwar zusammen googlen, allerdings wuerde mich intressieren wir das .NET spezifisch aussieht, und vlt mithilfe von Graphiken was da genau passiert..

Kann mir jemand helfen?

MfG DeadEye

31.12.2008 - 10:27 Uhr

Hm, das ist natuerlich eine berechtigte Frage.

In dem fall wird der Server natuerlich eine Rueckmeldung bekommen nehm ich an, denn wenn der User sonst den download abbricht, wuerde ja vlt seine Netzwerkkarte weiter mit Packeten bombadiert werden..

habe aber mal das hier gefunden:
http://www.megasolutions.net/AspNet/Abort-a-download-70261.aspx
darin heist es:

Based on my test, when you turn off buffer of the page resposne, it will
write out response headers at initial flush so that after the server-side
close or terminate the connection, the client-side will just act like the
response output finished. I've tried through exception or abort response or
worker thread but haven't got any effect. I think this due to the ASP.NET's
control over response is at a high application level that doen't deep
enough for the raw HTTP communication. For your scenario, you may consider
some IIS isapi filter solution as it can help much more control over the
underlying http communication.

30.12.2008 - 11:31 Uhr

Ich denke das das gar nicht funktioniert, zumindest nicht so.
Ob ein Client einen Download wirklich 100%tig abgeschlossen hat ist so gut wie gar nicht zu ermitteln (Zumindester nicht ueber http weil -> Stateless)

Falls aber jemand eine Antwort kennt waere ich auch sehr darant intressiert...

14.08.2008 - 14:15 Uhr

Ich bin auf jedenfall schon total gespannt 🙂

13.08.2008 - 09:32 Uhr

Halloechen....
Wird an K_Update noch gearbeitet? Du hast ja einige sehr geile Aenderungen geplant gehabt. Ich wuerd mich sehr ueber eine aktuelle Version freuen 🙂

Greetz DeadEye

03.06.2008 - 16:01 Uhr

Jap. ich glaube das bin ich 🙂

30.05.2008 - 12:17 Uhr

vielleicht hilft Dir das weiter:

>

wobei ich nicht weiß, wie und ob ODBC dadrin enthalten ist.

Hi, Danke fuer den link, aber den kenne ich bereits 🙂
ODBC ist uebriegens dort nicht zu finden weil das ein Provider ist, der Quasi als mittelsman zwischen einem beliebigen Datenbanksystem wie MS SQL oder MySQL und dir selbst steht.

Fuer mich intressant waere http://www.connectionstrings.com/?carrier=dsn welcher auch genauso betnutzt wurde aber anfrangs aus anderen Gruenden nicht funktioniert hatte...

Inzwischen soll ich uebrigens mein Projekt ruhen lassen, nachdem ich meinen Chefs glaubhauft rueberbringen konnte was fuer ein unnoetiger aufwand die Umstellung von .net Methoden auf ODBC waere. Dabei habe ich mich auf den Post von Xynratron berufen, der, auch wenn meine Chefs den natuerlich nicht kennen, sich sicher besser auskennt als die 😁

Das ODBC Keyword not supported: "dsn" ist somit eigentlich selbst geloest, denn mit dem richtigem String und den richtigen Methoden (Wie hier in den vorherigen Posts angefuehrt = funktioniert es mal soweit...

Greetz DeadEye

30.05.2008 - 10:36 Uhr

Oha!
Wenn ich


cn = new OdbcConnection("Driver={SQL Server};DSN=<DSNname>;uid=<UserID>;pwd=<DBPw>;");

benutze kommt

{"ERROR [08001] [Microsoft][ODBC SQL Server Driver]Weder ein DSN noch ein SERVER Schlüsselwort wurde angegeben"}

Leider ist 08001 ein Generischer Fehler. Steht anscheinend fuer -Unable to Connect-
Und ein DSN ist eigentlich angegeben....

??? naja aber ich scheine schon in die richtige Richtung zu kommen 🙂

[Edit]
So funktioniert es:


cn = new OdbcConnection("DSN=<DSNname>;uid=<UserID>;pwd=<DBPw>;");

Mal schaun vlt gehts auch noch mit der Enterprise library 3.1

30.05.2008 - 10:27 Uhr

So ich hab meinen Code jetzt ein wenig angepasst:


OdbcConnection cn;
OdbcCommand cmd;
OdbcParameter prm;
OdbcDataReader dr;

try
{
	//Change the connection string to use your SQL Server.
	cn = new OdbcConnection(BaseDBGateway.Sql.ConnectionString);

	//Use ODBC call syntax.
	cmd = new OdbcCommand("{call LoginPUT (?)}", cn);

	prm = cmd.Parameters.Add("@loginName", OdbcType.VarChar);
	prm.Value = loginname;
	prm = cmd.Parameters.Add("@passwort", OdbcType.VarChar);
	prm.Value = password;
	prm = cmd.Parameters.Add("@ipAdresse", OdbcType.VarChar);
	prm.Value = ipAddress;

	cn.Open();

	dr = cmd.ExecuteReader();

	//List each product.
	while (dr.Read())
	{
		string s = dr.GetString(0);
	}

	//Clean up.
	dr.Close();
	cn.Close();
}
catch (OdbcException o)
{
	string s = o.Message;
}

Zuerst kam immer ein Fehler bei


cn.Open();

und zwar irgendwas das kein Treiber angegeben ist. also aenderte ich die Connectionstrings in etwa so ab:


Driver={SQL Server};dsn=etc wie oben

Und dann kommt: InnerException = {"Keyword not supported: 'driver'."}

30.05.2008 - 10:08 Uhr

Hatte zuerst noch mit SqlDatabase gearbeitet (aus der Enterprise Library 3.1, nur die scheint nicht mit ODBC klar zu kommen. Schade eigentlich 🙁 )

Hast du vlt Infos zu Spiegelung loadbalancing ohne ODBC? Ich bin da leider nicht so der DB Guru und bei uns macht das auch einer aus der Hardware abteilung, und selbst der Senior Developer is der Meinung dass das nur mit ODBC geht. vlt kann ich die ja noch eines anderen belehren, dann erspare ich mir einige Stunden an Umbau an diesem Programm... (Kostenersparnis ist immer ein sehr guter Grund 😉)

Danke auf jedenfall schonmal fuer den Link, werd ich gleich mal ausprobieren 🙂

[Edit]
PS: Hier im Forum findet sich mal nix, da bin ich jetzt nur wieder auf diesen Thread hier gekommen XD

29.05.2008 - 16:23 Uhr

verwendetes Datenbanksystem: ODBC

Hallo zusammen.
nachdem ichs weder in Google noch hier im Forum gefunden habe poste ichs mal, vielleicht weis ja jemand eine Antwort.

Folgendes Problem:
Ich habe eine Anwendung, welche bisher ueber System.Data.SqlClient auf mehrere MS SQL Datenbankserver zugegriffen hat. Nun soll die Art der Zugriffe umgestellt werden auf ODBC (Irgendwas wegen Spiegelung und Loadbalancing der Server was weis ich auf jedenfall soll ODBC benutzt werden, also bitte keine Antworten mit alternativen bitte 😉)


<connectionStrings>
<add name="meinString" connectionString="dsn=MeinDSN;uid=meinUser;pwd=meinPasswort;" providerName="System.Data.Odbc"/>
</connectionStrings>

SystemDSN ist erstellt und funktioniert auch ausoweit.

Der Zugriff erfolgt ueber einen DAL, kurz gefasst waere der Code so:


using System;
using System.Configuration;
using System.Data;
using System.Data.Odbc;

namespace Portal.DAL.Services
{
	public class BaseDBGateway
	{
		private static OdbcConnection sql;

		static DBGateway()
		{
			Sql = new OdbcConnection(ConfigurationManager.ConnectionStrings["myString"].ConnectionString);
		}

		public static OdbcConnection Sql
		{
			get
			{
				if (sql.State != ConnectionState.Closed)
				{
					sql = new OdbcConnection(sql.ConnectionString);
				}
				return sql;
			}
			set
			{
				sql = value;
			}
		}
	}
}

Und dann der eigentliche Zugriff:


SqlDatabase db = new SqlDatabase(BaseDBGateway.Sql.ConnectionString);
DbCommand command = db.GetStoredProcCommand("LoginPUT");

using (IDataReader reader = db.ExecuteReader(command))
{
.....

und bei ExecuteReader kommt eine Exception mit Keyword not supported: "dsn".
Was mache ich falsch?

Danke mal im Voraus,
DeadEye

27.05.2008 - 15:41 Uhr

Hi, ich wollte mal fragen ob es vlt schon einen angepeilten Termin fuer die naechste Version gibt, jetzt hatte sich ja schon laenger nix mehr getan...

[EDIT]
Haette vlt mal in deinen Blog sehen soll 🙂

greetz DeadEye

09.05.2008 - 11:45 Uhr

Ich benutze gerne tgz. Ansonnsten fuer Win eigentlich immer rar.

06.05.2008 - 12:24 Uhr

@Khalid: Danke erstmal fuer die rasche Anwort.

Naja, dazu ist eine FAQ nunmal da. Warum immer wieder das gleiche schreiben, wenns schon was gibt?

DAs ist richtig, aber die Seite auf die verwiesen wird, enthaellt 4 Links - Zu genau den Seiten von denen man gekommen ist 😜

@kleines_eichhoernchen: Das ich natuerlich defakto alles selbst machen 'darf' ist mir bewusst.
Ich habe mir auch bereits buecher ueber C und C++ gekauft und gelesen, aber ebenfalls danke fuer deinen Tipp.

Das hat meine Frage auch schon beantwortet, danke nochmal an euch!

greetz DeadEye

06.05.2008 - 12:09 Uhr

So, bevor mich jetzt 50 Forenuser bashen:

  1. Ich hab die Suche benutzt
  2. Ja, ich kenne
    selbstlaufende .exe ? ,
    c# ohne framework ,
    Standalone Programm? etc... (Lustig in ALLEN threads wird immer auf [FAQ] .net Anwendung ohne installiertes Framework ausführen verwiesen, welcher Links zu den urspruenglichen Threads beinhaltet - haeh? Was hat das fuer einen Sinn??).
  3. wenn ich unter .exe ohne .net Suche, finde ich auf den ersten 2 Seiten schonmal gar nix (Ja auf der dritten schon, aber da steht auch ueberall dasselbe)

und
4) Ja, ich weis das mit c# natuerlich das nicht moeglich ist.

Aber: Was ist nun wenn ich in VS05/08 oder aehnlichem c++ (unmanaged) Programmiere. Kann man da eventuell Programme schreiben, die ohne .net auskommen? Ich will kein .net installieren, auch keine runtime mitschicken. Stellt euch einfach vor ich will ein Programm.. auf einem Handy laufen lassen, oder ein eigenes Betriebssystem schreiben.

Klar kann ich das mit einem Texteditor und gcc etc.. aber ist sowas von mit VS + einer der unterstuetzten Programmiersprachen moeglich?

Ps: Bitte kein Link auf [FAQ] .net Anwendung ohne installiertes Framework ausführen -.-

pps: Bitte kein geflame wie in all den andern threads 😉

06.05.2008 - 09:10 Uhr

Ich habe zwar keine Wissenschaftlichen Fakten, allerdings fuehre ich genaue Aufzeichnungen der aenderung meiner Programme (Von wem gefordert, warum, wann, etc..)

Fakt:
Ein bestehendes Programm soll ins Web migriert werden. Es soll genaus aussehen wie die Win Version (Aus dem Jahre 96) da sich sonnst die bereits daran gewohnte Anwender nicht auskennen. Die Programmiersprache soll Classic ASP sein.

Version 1, Fehlerfrei, 75h aufwand inkl dutzend im Browserfenster aufpopender Modaler Divs (Halt genau wie diese echtanwendung)

Kunde meint das nicht ganz das ist was er sich vorgestellt hat. Neue Besprechungen, Konzepte fuer das Design folgten (an die 15h)

Version 2, teilw. Fehlerbehaftet, weil Code von V1 trotzdem verwendet werden soll, teile der Oberflaechenlogik ebenfalls. 150h aufwand.

Bis zur jetzigen Version (2.8.142) wurden kleinere und groeszere Anpassungen, von denen anfangs nicht die rede war durchgefuehrt.

Gesamtaufwand: 580h.

Ich habe Module des Programs so generisch wie moeglich programmiert, und konnte mir trotzdem sogar vlt einige Zeit ersparen.

Btw, jetzt soll das Program auf .Net umgeschrieben werden 😜

Damit wir aber trotzdem schnell auf Aenderungen reagieren koennen haben wir uns alle hier (In meinem Unternehmen) Angewohnt mit MVP zu arbeiten, die Oberflaeche striktest vom Code zu trennen (nicht nur Design sondern auch die Logik ist ein eigener teil) was bei Classic ASP leider nicht so einfach ist.
So kann man doch Aenderungen mit minimalen Aufwand durchfuehren (Natuerlich abhaengig von der Aenderung)

05.05.2008 - 11:26 Uhr

Private verwende ich IE6 und Opera (Wie ich finde einer der besten und schnellsten, aber auf FF sind die Entwicklertools einfach besser).
Zum entwickeln benutze ich ie5, 6 (Mit IEDevToolbar), 7 (Mit ie7 Pro), FF 1 1,5 u 2 (Mit Firebug und DevToolbar), Opera und Safari (urks) auf Win sowie Mac.

IE6?? Ja richtig, obwohl ich jeden von ihm abrate, und ihn fuer seine Anschauung des Internets hasse (Er sieht ja die Welt mit eigenen Augen) staerkt er bei mir ein subjektives Gefuehl der Schnelligkeit des Browser. FF hingegen ist mehr so ein Trabi, bis der mal alle Bilder geladen hat... nene...

05.05.2008 - 11:12 Uhr

Danke fuer dieses geile Programm. Das erleichtert die Arbeit mit RegEx ungemein, ich will nicht mehr ohne dieses Tool arbeiten 🙂

05.05.2008 - 10:57 Uhr

@EvilMM:
Mit availableFlag meinte ich, das wenn die Stats davon betroffen waeren ob ein Update tatsaechlich existiert oder nicht, man statt dem loeschen ein Update einfach auf verfuegbar oder nicht verfuegbar setzt, anstatt es zu loeschen. aber das hat sich ja schon geklaert 🙂

@Lordas: Das wurde noch nicht vorgeschlagen. Hoert sich aber intressant an.
Fuer ein lokales Netz koennte man aber im Notfall auch Xampp installieren.

02.05.2008 - 14:07 Uhr

Hm. das ist auch war.

Aber da habe ich doch gleich eine Frage an EvilMM:
Wie sieht das aus wenn man ein Update am Server hat. Dieses wird sagen wir 100 mal gezogen. Dann kommt ein neues update welches 50 mal gezogen wird.

Jetzt loesche ich das erste Update. Was sagt nun die Statistik?
Sollte das nun problematisch werden, wie waers mit einem 'available' Flag ?

greetz

02.05.2008 - 09:26 Uhr

Ich auch 🙂

@Jelly: Stell dir mal vor du hast 3 Updates. Jedes davon ist ein Setup (nur mal angenommen). Diese Setups enthalten immer alle Dateien (Ich lasse mal die Pluginfaehigkeit der Programme in den Raum gestellt, da ist ja immehrin alles Moegliche moeglich 😛) dann hast du das Problem das wenn ein User sein Programm Updated er 3mal Setups ausfuehren muss wovon aber das aktuellste reichen wuerde.

Natuerlich kann man nun auch Teilkomponenten wie .dll's eventuell fuer alle vorherigen Versionen Updaten, da wuerde dieser Mechanismus probleme bereiten.
Aber wenn es sich bei einem Update um das aktuellste + einem Setup handelt denke ich das dieser Mechanismus immer passen sollte.

greetz Deadeye

30.04.2008 - 12:58 Uhr

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();

😉

30.04.2008 - 10:31 Uhr

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.

30.04.2008 - 09:28 Uhr

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

28.04.2008 - 12:22 Uhr

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?

28.04.2008 - 11:38 Uhr

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

15.04.2008 - 11:42 Uhr

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 🙂

15.04.2008 - 10:09 Uhr

[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

14.04.2008 - 14:07 Uhr

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.

14.04.2008 - 10:49 Uhr

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.

14.04.2008 - 10:07 Uhr

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

11.04.2008 - 10:03 Uhr

Wenn es einen DC gibt, kannst du die Software ueber eine Policy verteilen (Das .msi file wird dann bei der naechsten Anmeldung an alle Clients auf die diese Policy zutrifft verteilt)

Wenn sowas nicht zur Verfuegung steht, kannst du auch versuchen bei der erstinstallation zb Pfade zum Program in der Registery zu speichern, und die dann ein kleines eigenes Installationsprogramm zu basteln, was bei start einfach die betroffenen Dateien ueberschreibt.

Hoffe das hilft.

greetz

11.04.2008 - 09:55 Uhr

Also das sieht ja schon ganz cool aus 🙂

09.04.2008 - 08:30 Uhr

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 🙂

08.04.2008 - 16:07 Uhr

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

greetz DeadEye

08.04.2008 - 08:45 Uhr

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.

07.04.2008 - 14:45 Uhr

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

01.04.2008 - 15:42 Uhr

Hi,

wir setzen bei uns in der Firma (und ich auch privat) derzeit voll auf SVN.
SVN ist quasi der Nachfolger von CVS (auch vom selben Entwickler glaub ich)

Als VS Integration gibts da Ankh SVN wobei man fuer VS08 Support ein bischen tricksen muss.

Im groszen und ganzen funktioniert SVN gleich wie CVS und die unterschiede liegen hauptsaechlich in Verbesserungen div. aktionen (Dateien verschieben, Ordner umbenennen - sind aber in SVN als auch in CVS nur pain in the ass, vorallem wegem dem dauernd committen denn wenn man das nicht macht kanns uebel aussehen:P)

Ankh setzt auf SVN auf, und ich glaub es gibt auch etwas aehnliches fuer CSV. Tortoise gibts fuer beides.

Ankh Homepage:
http://ankhsvn.open.collab.net/

Tortoise (Ist allerdings keine Integration):
CVS: http://www.tortoisecvs.org/
SVN: http://tortoisesvn.tigris.org/

Hoffe ich konnte dir ein bischen weiterhelfen 🙂

greetz DeadEye