<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' version='2.0'><channel><atom:id>http://www.blogger.com/feeds/12599663/posts/full</atom:id><lastBuildDate>Mon, 01 Jan 2007 17:24:10 +0000</lastBuildDate><title>Kommentare zu C# und .NET</title><description></description><link>http://www.petergloor.com/blog</link><managingEditor>Peter Gloor</managingEditor><generator>Blogger</generator><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>15</openSearch:itemsPerPage><item><guid isPermaLink='false'>http://www.blogger.com/feeds/12599663/posts/full/116499860372429529</guid><pubDate>Fri, 01 Dec 2006 18:43:23 +0000</pubDate><atom:updated>2006-12-01T20:05:28.203+01:00</atom:updated><title>Mini Web Cam für Notebooks</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a href="http://www.petergloor.com/blogger-images/MiniWebCamfrNotebooks_11560/miniwebcam3.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="129" src="http://www.petergloor.com/blogger-images/MiniWebCamfrNotebooks_11560/miniwebcam_thumb1.jpg" width="119" align="left" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Bei &lt;a href="http://www.anrdoezrs.net/click-2218366-10451784"&gt;Tchibo&lt;/a&gt; gibt es für € 12.99 (CHF 27.95) gerade noch rechtzeitig auf Weihnachten hin das ideale Geschenk, das voll im Trend liegt. Ich meine eine Mini&amp;nbsp;Cam für Notebooks; Foto-, Videokamera und Webcam in einem.&amp;nbsp;Genau das richtige Geräte um Video Casts aufzunehmen oder beim Online Chat auch visuell präsent zu sein.&lt;/p&gt; &lt;p&gt;Man steckt das Ding einfach in die USB Schnittstelle und hat mit einem flexibel einstellbarem Arm, einer Art "Schwanenhlas", den perfekten Ständer. Vorbei ist das lästige Ausrichten der Kamera auf gestapelten Büchern mit den immer zu kurzen Kabeln.&lt;/p&gt; &lt;p&gt;Die Kamera verfügt über eine manuell zuschaltbare LED-Beleuchtung, von der ich allerdings annehme, dass sie von geringem Nutzen ist. Zusätzlich verfügt die Kamera über einen automatischen Weissabgleich, der zur Verbesserung&amp;nbsp; der Bildqualität nützlich ist. Die Auflösung liegt bei VGA 640 x 480 Pixel. Es sind Bildfrequenz bis zu 25 fps bei Vga und&amp;nbsp;30 fps bei CIF möglich.&lt;br&gt;&lt;/p&gt; &lt;p&gt;Tchibo erwähnt nur mitgelieferte "Installationssoftware". Was darunter zu verstehen ist, ist fraglich. Ich nehme an, dass ausser den Treibern keine spezielle&amp;nbsp;Software, wie etwa für den Einsatz als Web Cam, mitgeliefert wird. Meine Erfahrung mit Logitech Cams haben gezeigt, dass in der Regel die mit Windows XP mitgelieferte Software ausreicht und sonst für die meisten Zwecke Software kostengünstig oder gratis über das Web heruntergeladen werden kann.&lt;/p&gt; &lt;p&gt;Mein Favorit ist dabei der Windows Movie Maker, der kostenlos über die Microsoft Download Seiten bezogen werden kann. &lt;/p&gt; &lt;p&gt;Man kann davon halten was man will, aber ich halte die Tchibo Cam für ein recht hübsches Gadget, das für wenig Geld sicher recht viel Freude bereiten kann.&lt;span id="productDescNew"&gt;&lt;br&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><link>http://www.petergloor.com/blog/2006/12/mini-web-cam-fr-notebooks.html</link><author>Peter Gloor</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/12599663/posts/full/116299544079217650</guid><pubDate>Wed, 08 Nov 2006 14:17:20 +0000</pubDate><atom:updated>2006-11-08T15:28:14.416+01:00</atom:updated><title>Office Online in neuem Kleid</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a href="http://www.petergloor.com/blogger-images/OfficeOnlineinneuemKleid_D5C5/1.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="184" src="http://www.petergloor.com/blogger-images/OfficeOnlineinneuemKleid_D5C5/57660d9b7e9a.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Office Online hat weltweit ein neues Erscheinungsbild bekommen. Die neue Site erscheint in frischem Look und hinterlässt einen übersichtlichen und aufgeräumten Eindruck. &lt;/p&gt; &lt;p&gt;Die deuschsprachige Site für die Schweiz ist über &lt;a href="http://office.microsoft.com/de-ch"&gt;http://office.microsoft.com/de-ch&lt;/a&gt;&amp;nbsp;erreichbar, die Deutsche Site über &lt;a href="http://office.microsoft.com/de-de"&gt;http://office.microsoft.com/de-de&lt;/a&gt;&amp;nbsp;und die englisch-amerikanische Site über &lt;a href="http://office.microsoft.com/en-us"&gt;http://office.microsoft.com/en-us&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Ein wirklich gut gelungener Wurf.&lt;/p&gt;&lt;/div&gt;</description><link>http://www.petergloor.com/blog/2006/11/office-online-in-neuem-kleid.html</link><author>Peter Gloor</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/12599663/posts/full/116299091071683711</guid><pubDate>Wed, 08 Nov 2006 13:01:50 +0000</pubDate><atom:updated>2006-11-08T14:01:50.816+01:00</atom:updated><title>MSDN Magazin: Inhalt: November 2006</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Das MSDN Magazin ist jetzt Online auch in deutscher Sprache verfügbar.&lt;br /&gt;&lt;br /&gt;Ich wünsche viel Spass beim lesen.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/06/11/default.aspx?loc=de"&gt;MSDN Magazin: Inhalt: November 2006&lt;/a&gt;&lt;/div&gt;</description><link>http://www.petergloor.com/blog/2006/11/msdn-magazin-inhalt-november2006.html</link><author>Peter Gloor</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/12599663/posts/full/116004425110851475</guid><pubDate>Thu, 05 Oct 2006 10:30:51 +0000</pubDate><atom:updated>2006-10-05T12:30:51.186+02:00</atom:updated><title>heise online - Google Gadgets in Webseiten nutzbar</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Gemäss einem Bericht in &lt;a href="http://www.heise.de/newsticker/meldung/79015"&gt;Heise Online sind Google Gadgets jetzt auch in Webseiten nutzbar&lt;/a&gt;. Was ich mit der Evaluation von Windows Live vor einem halben Jahr noch nicht verstanden habe, scheint sich allmählich zu einer ernstzunehmenden Technologie zu entwickeln, die sich durchzusetzen vermag. Ich habe diesen Trend seit ein paar Monaten beobachtet und mich bereits ernsthaft mit dem Thema befasst.&lt;br /&gt;&lt;br /&gt;Für den einen oder andern mag es sich hier lediglich um eine Spielerei handeln. Wenn man aber einmal die bereits vorhandenen Gadgets und Widgets näher betrachtet, dann scheint sich hier ein neues Feld mit einem gigantischen Potential aufzutun. Ob sich damit auch Geld machen lässt? Ich weiss nicht. Aber wie so oft, dürfte es in erster Linie eine Frage der richtigen Ideen zur richtigen Zeit sein.&lt;/div&gt;</description><link>http://www.petergloor.com/blog/2006/10/heise-online-google-gadgets-in.html</link><author>Peter Gloor</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/12599663/posts/full/115955222088946485</guid><pubDate>Fri, 29 Sep 2006 17:50:00 +0000</pubDate><atom:updated>2006-10-03T18:49:11.460+02:00</atom:updated><title>peterkellner.net » Published in MSDN!</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://peterkellner.net/2006/01/09/published-in-msdn/"&gt;peterkellner.net » Published in MSDN!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Peter Kellner hat in MSDN vier Artikel rund um das Thema ASP.NET 2.0 Member/Role Management in IIS publiziert. Der zweite Artikel enthält einen Editor zum Verwalten der User und Rollen, wenn sich die Anwendung auf einem entfernten Server befindet.&lt;br /&gt;&lt;br /&gt;Selber habe ich eine ähnliche Anwendung geschaffen, mit welcher das Remotemanagement über einen Web Service implementiert wurde. Lokal habe ich dann einen Windows Client zur Verfügung mit dem ich die User und Rollen all meiner Applikationen bequem zentral verwalten kann.&lt;br /&gt;&lt;br /&gt;Bei genügend Interesse, kann ich mein Konzept gerne einmal detailliert vorstellen.&lt;/div&gt;</description><link>http://www.petergloor.com/blog/2006/09/peterkellnernet-published-in-msdn.html</link><author>Peter Gloor</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/12599663/posts/full/115989398760393787</guid><pubDate>Tue, 03 Oct 2006 16:46:27 +0000</pubDate><atom:updated>2006-10-03T18:46:27.646+02:00</atom:updated><title>Shared ASP.NET 2.0 Hosting mit SQL Server 2005 Express</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Mein Web Hosting Provider, &lt;a href="http://www.webhost4life.com/default.asp?refid=pgloor"&gt;WebHost4Life.com&lt;/a&gt;, bietet für nur US$ 9.95 / Monat einen Windows Shared Web Hosting Plan mit Unterstützung von SQL Server 2005 Express an. SQL Server 2005 Express ist die von Microsoft kostenlos zur Verfügung gestellte aber eingeschränkte Version von SQL Server 2005 für den persönlichen Gebrauch.&lt;br /&gt;&lt;br /&gt;Auf den ersten Blick erleichtert dies die Erstellung von Starter-Kit Projekten, die mit Visual Studio 2005 mitgeliefert werden oder im Web als Download zur Verfügung stehen. Ein paar dieser Projekte basieren auf SQL Server 2005 Express. Eine gute Sammlung von Starter-Kit Projekten findet man im Download Bereich von &lt;a href="http://asp.net/downloads/starterkits/default.aspx?tabid=62"&gt;ASP.NET&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Starter-Kit Projekte mit Datenbanken auf der Basis von Microsoft SQL Server 2005 Express eignen sich ausgezeichnet für Lernzwecke, wenn die Projekte auf einen lokalen Windows XP Rechner installiert und ausgeführt werden können. Problematisch und konfus wird es immer dann, wenn es darum geht, die Projekte auf einen Web Server bei einem ASP.NET 2.0 Web Hosting Provider zu übertragen und diese dort zum laufen zu bringen.&lt;br /&gt;&lt;br /&gt;Gerade der Anfänger, Student oder Hobby-Entwickler kann oder will sich in der Regel keine teure Hosting Lösung leisten und wird sich auf eine kostengünstige Windows ASP.NET 2.0 Shared Web Hosting Lösung beschränken. Ein weiteres Problem, dass sich stellt, sind die in der Regel hohen Kosten für SQL Server 2005 Datenbanken. Da bietet sich die vermeintliche Variante, das kostenlose SQL Server 2005 Express einzusetzen, geradezu an.&lt;br /&gt;&lt;br /&gt;Was die meisten ASP.NET 2.0 Web Hosting Provider auf Ihren Frontseiten verschweigen, ist die Tatsache, dass Sie Microsoft SQL Server 2005 Express nicht unterstützen. In Wirklichkeit sind es nur wenig Provider, die Microsoft SQL Server 2005 Express installiert haben und die Verwendung unterstützen. En paar Provider unterstützen zwar SQL Server 2005 Express aber nur auf dedizierten Systemen und nicht auf den kostengünstigen Shared Web Hosting Plänen.&lt;br /&gt;&lt;br /&gt;Leider erfährt man das immer erst zu spät. Die Lösung heisst dann Upgrade auf SQL Server 2005/2000 oder MS Access verwenden. Ich habe auch schon von der dreisten Empfehlung gehört MySQL zu verwenden. Ich wäre mal gespannt, wo dann der Support bleibt, wenn es darum geht, dass ein Anfänger die Daten oder, falls das nicht geht, wenigstens die Datenbankstrukturen übernehmen will.&lt;br /&gt;&lt;br /&gt;Nun, wie gesagt, es gibt Provider, die den Einsatz von SQL Server 2005 Express auch auf einer Shared Web Hosting Lösung unterstützen. Toll, alles Paletti! Her damit, wo ist der Provider?&lt;br /&gt;&lt;br /&gt;Leider ist es nicht ganz so. Hat man es einmal geschafft, alle Dateien samt Datenbanken und Web.config auf den Server zu transferieren dann beginnt die Odysee meist mit einer happigen Error-Meldung nach dem ersten Start. Wem das nicht passiert, der hat entweder enorme Kenntnisse über die Konfiguration von ASP.NET, eine Super-Anleitung, die nichts auslässt oder einfach riesiges Glück gehabt, was ich mir aber kaum vorstellen kann.&lt;br /&gt;&lt;br /&gt;Ich bin einer der wohl eher seltenen Vögel, die es nach wenigen Anläufen geschafft haben das Personal Starter-Kit unter einem Shared Web Hosting Account bei WebHost4Life zum laufen zu bringen.&lt;br /&gt;&lt;br /&gt;Bevor dies möglich war habe ich stundenlang die spezifischen Foren im Web abgeklappert, in der Dokumentation von Visual Studio fast alles über die ASP.NET 2.0 Konfiguration gelesen (echt mühsam) und x-Varianten ausprobiert.&lt;br /&gt;&lt;br /&gt;Nachdem ich auch eine zweite Site erstellt habe, die SQL Server 2005 Express verwendet, hatte ich das Gefühl ein echter Experte auf dem Gebiet zu sein. Doch weit gefehlt, als ich, um jemandem zu helfen,  eine weitere Site erstellen wollte, da hat plötzlich nichts mehr geklappt. Ich habe Fehlermeldungen erhalten, von denen ich mir nicht einmal vorstellen konnte, dass es die geben kann, da sie sich auf einen Account bezogen haben mit dem ich nichts am Hut habe. Es kam mir vor als wäre ich im falschen Film und ich war schon fast überzeugt davon, dass jemand meinen Account sabotiert hat.&lt;br /&gt;&lt;br /&gt;Es hat mich einen weiteren Tag gekostet alles zu verstehen. Ich denke, dass ich jetzt jederzeit in der Lage bin eine funktionierende ASP.NET 2.0 Site mit SQL Server 2005 Express aufzuziehen.&lt;br /&gt;&lt;br /&gt;Im Wesentlichen braucht es dazu folgende Voraussetzungen:&lt;br /&gt;Das Verzeichnis in dem sich die Anwendung befindet muss im IIS als Applikation registriert sein.&lt;br /&gt;Der Account NETWORK SERVICE muss Read/Write Rechte auf das Verzeichnis APP_DATA haben.&lt;br /&gt;Die Datenbanken müssen serverweit eindeutige Namen haben.&lt;br /&gt;Im Connection String muss der Parameter für „Initial Catalog=“ gesetzt und korrekt sein.&lt;br /&gt;Bei Verwendung von ASP.NET 2.0 User und Rollen Management (ASPNETDB) muss in der Datei Web.config im Abschitt &lt;connectionstrings&gt; vor dem Statement &lt;add name="LocalSqlServer"&gt; ein &lt;remove name="LocalSqlServer"&gt; stehen.&lt;br /&gt;ASP.NET User und Rollen wurden vor der Übertragung der Datenbanken lokal erstellt.&lt;br /&gt;Die Log Dateien zu den Datenbanken (.ldf) werden entweder nicht übertragen oder vor dem ersten Start der Anwendung auf dem Server gelöscht.&lt;br /&gt;&lt;br /&gt;Wie auch immer, nach umfassendem Studium der Materie bin ich zum Schluss gekommen, dass Microsoft SQL Server 2005 Express nicht für den Gebrauch in einer Shared Hosting Umgebung entwickelt wurde.&lt;br /&gt;&lt;br /&gt;Auf Grund meiner Erfahrungen rate ich dringend, von der Verwendung von der Verwendung von Microsoft SQL Server 2005 Express in einer Shared Hosting Umgebung abzusehen und stattdessen eine Microsoft SQL Server 2005 Lösung vorzuziehen.&lt;br /&gt;&lt;br /&gt;Folgende Gründe stützen meine Empfehlung:&lt;br /&gt;&lt;br /&gt;Durch Senkung der SQL Server 2005 Lizenzkosten von Microsoft gegenüber Hosting Provider sind die Kosten für SQL Server 2005 Hosting allgemein drastisch gesunken. Somit sollte der Kostenfaktor in der Regel  keine massgebliche Rolle mehr spielen. Bei WebHost4Life.com sind im &lt;a href="http://www.webhost4life.com/hosting.asp?refid=pgloor"&gt;US$ 9.95/Monat Advance Shared Hosting Plan&lt;/a&gt; bis zu 2000 MB Datenbankplatz auf einem Microsoft SQL Server 2005 enthalten. 2000 MB beziehen sich auf den gesamten zur Verfügung stehenden Diskplatz, d.h. den Platz der für Web Dateien, Mail-Boxen, Datenbanken und sonstige Dateien belegt wird. Mit anderen Worten, es stehen Ihnen 2 GB für Ihre Daten zur Verfügung. Wie Sie den Platz nutzen ist egal. Für die Nutzung des SQL Servers 2005 entstehen keine zusätzlichen Kosten!&lt;br /&gt;Im Web gibt es genügend Anleitungen, Beispiele, Scripts, Tools, die dazu dienen Ihnen bei der Migration der Daten und Datenbankstrukturen von SQL Server 2005 Express auf SQL Server 2005 behilflich zu sein. Ein Anbieter wie WebHost4Life bietet die Möglichkeit um mit SQL Server Management Studio (Lizenz erforderlich) oder einer entsprechenden Web-basierenden Lösung auf Ihre Daten zuzugreifen.Die Migration auf SQL Server 2005 dürfte allgemein betrachtet weniger aufwendig und weniger problematisch sein als die Nutzung von SQL Server 2005 Express in einer Shared Web Hosting Umgebung, wo Sie bei Problemen in der Regel auf sich selber gestellt sind.Da die Provider den Einsatz von SQL Server 2005 in der Regel eher fördern dürfen Sie auch vom Support mehr erwarten als bei der allgemein eher schlecht unterstützen Lösung mit SQL Server 2005 Express.&lt;br /&gt;Versuche, die ich bei uns im Haus gemacht habe, haben gezeigt, dass die Anwendung wesentlich schneller startet, wenn die Daten auf einem dedizierten SQL Server 2005 statt unter SQL Server 2005 Express verwaltet werden und sich damit gleichzeitig auch die allgemeine Performance der Web-Applikation verbessert. Dies trifft vor allem dann zu, wenn auf dem Web Server mehrere Instanzen von SQL Server 2005 Express laufen. Die Versuche wurden bei uns im Hause und nicht bei WebHost4Life durchgeführt. Ich gehe aber grundsätzlich von vergleichbaren Resultaten aus.&lt;br /&gt;Ich bin zwar kein Sicherheits-Experte, doch haben mich ein paar Fehlermeldungen auf potentielle Probleme aufmerksam gemacht, die die Sicherheit beim Einsatz von SQL Server 2005 Express in einer Shared Web Hosting Umgebung ernsthaft in Frage stellen. Wie auch immer, was ich im laufe meiner Versuche gesehen habe, war nicht gerade Vertrauensbildend und ich möchte unter den beobachteten Bedingungen lieber auf den Einsatz dieser Technologie in einer Shared Hosting Umgebung verzichten als zu riskieren, dass jemand die Kontrolle über meine Applikation übernimmt.Ich bin mir zwar nicht sicher ob dies möglich ist. Aber allein der Umstand, dass ein ungutes Gefühl bleibt, ist Grund genug für den Einsatz einer stabileren und bewährten Lösung.&lt;br /&gt;&lt;br /&gt;Ich hoffe, dass ich auch Sie davon überzeugen konnte, vom Einsatz von SQL Server 2005 Express in einer Share Web Hosting Lösung abzusehen und stattdessen eine SQL Server 2005 Lösung in Erwägung zu ziehen.&lt;br /&gt;&lt;br /&gt;Bitte verstehen Sie mich nicht falsch. Ich halte Microsoft SQL Server 20005 Express nach wie vor für ein ausgezeichnetes Produkt für den persönlichen Gebrauch, wenn es darum geht Daten lokal auf dem PC zu verwalten. Dank der Flexibilität und der Integration in Visual Studio 2005 ist auch ein Einsatz in Entwicklungsprojekten von grossem Nutzen. In gewissen Fällen kann sogar der Einsatz auf einem dedizierten Server gerechtfertigt sein.&lt;br /&gt;&lt;br /&gt;Nur weil Microsoft SQL Server 20005 Express kostenlos zur Verfügung stellt ist es nicht unbedingt die richtige Lösung in allen Fällen! Es liegt jetzt an Ihnen. Die Argumente habe ich geliefert, den &lt;a href="http://www.webhost4life.com/default.asp?refid=pgloor"&gt;Provider mit den Lösungen&lt;/a&gt; auch.&lt;/div&gt;</description><link>http://www.petergloor.com/blog/2006/10/shared-aspnet-20-hosting-mit-sql.html</link><author>Peter Gloor</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/12599663/posts/full/115988406242935869</guid><pubDate>Tue, 03 Oct 2006 14:01:02 +0000</pubDate><atom:updated>2006-10-03T16:01:02.496+02:00</atom:updated><title>ASP.NET 2.0 Web Hosting mit SQL Server 2005 das ich mir leisten kann</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Sellen Sie sich vor Ihr ISP bietet Ihnen für monatlich rund 10 Euro ein Paket mit einem Windows Shared Web Hosting Plan mit ASP.NET 2.0 und 2000 MB Datenbankplatz auf einem SQL Server 2005 an. Dazu erhalten Sie unlimitierten Datentransfer, 100 Konten für passwortgeschützte Zugriffe inkl. FTP sowie 100 Mail Konten, Aliase oder Weiterleitungsadressen und insgesamt 2000 MB Diskplatz (inkl. Web Seiten, Maiboxen, Datenbanken und sonstigen Dateien). Wenn Sie wollen, dann können Sie ohne weitere Kosten auch noch eine Windows Sharepoint Service Site (WSS) einrichten.&lt;br /&gt;&lt;br /&gt;„Das gibt’s nicht“, mögen Sie wohl denken. Das habe ich bisher auch gedacht. Aber ich habe in den USA einen Provider gefunden, der genau diese Leistungen bietet und darüber hinaus noch Supportleistungen erfüllt, die ich bisher so kaum angetroffen habe. Ein Vollpaket mit allem drum und dran (fast allem), das sich insbesondere für Entwickler bestens eignet. Lesen Sie weiter, wenn Sie wissen wollen, welche ganz  persönlichen Erfahrungen ich bisher mit &lt;a href="http://www.webhost4life.com/default.asp?refid=pgloor"&gt;WebHost4Life.com&lt;/a&gt; gemacht habe.&lt;br /&gt;&lt;br /&gt;Im Zuge der rasanten Verbreitung von ASP.NET 2.0 und SQL Server 2005 habe ich einen neuen Web Hosting Provider gesucht, der ohne mein Budget zu strapazieren alle Ansprüche, die ich als Entwickler habe, zu erfüllen vermag.&lt;br /&gt;&lt;br /&gt;Da mein langjähriger Provider nicht in der Lage war ASP.NET 2.0 Hosting anzubieten war ich gezwungen mich nach einem neuen Partner umzusehen. Ich wurde schnell fündig und habe mich für einen besonders günstigen Developer Account bei einem amerikanischen Provider entschieden, der insbesondere bezüglich Windows Hosting bereits einen guten Ruf hatte. Leider war dieser Wechsel nicht optimal, da mit dem günstigen Developer Account zu  viele Einschränkungen verbunden waren und meine Wünsche alles andere als erfüllt wurden. Als der Support dann auch noch nicht klappte shh ich mich gezwungen den Provider nochmals zu wechseln.&lt;br /&gt;&lt;br /&gt;Da ich für ein paar Entwicklungen dringend eine Lösung brauchte und ich nicht viel Zeit zum Evaluieren hatte, habe ich mich nach einem möglichst günstigen ASP.NET 2.0 Shared Hosting Angebot umgeschaut, welches mindestens 250 MB Datenbankplatz auf einem SQL Server 2005 beinhaltet und das mir erlaubt mehr als eine Datenbank zu erstellen.&lt;br /&gt;&lt;br /&gt;Einen solchen Provider habe ich bald gefunden. WebHost4Life.com hatte damals ASP.NET 2.0 Shared Hosting inklusive 300 MB Datenbankplatz auf einem SQL Server 2005 für nur US$ 9.95 / Monat im Angebot. Zusätzliche 50 MB Datenbankplatz gab es für 15$ / Jahr.&lt;br /&gt;&lt;br /&gt;Das Angebot beinhaltete 50 Windows User Accounts, genügend FTP-Konten, mehr Diskplatz und mehr Datentransfer als ich jemals brauchen könnte sowie eMail-Konten und Aliase im Überfluss.&lt;br /&gt;&lt;br /&gt;Was vor wenigen Monaten noch war, gilt heute schon nicht mehr. Zum gleichen Preis gibt's neu 2000 MB Diskplatz oder 2000 MB Datenbankplatz auf einem SQL Server 2005! Ja, Sie haben richtig gelesen. Es stehen insgesamt 2000 MB Diskplatz zur Verfügung. Wie viel davon sich auf dem SQL Server 2005 befindet spielt auf den Preis keine Rolle. Die Frage nach Unterstützung von SQL Server 2005 Express, MS Access oder MySQL wird damit hinfällig. Zumindest sind die Kosten kein Argument mehr.&lt;br /&gt;&lt;br /&gt;Das ist noch nicht alles. Der Datentransfer wurde auf unbegrenzt gesetzt. Die Anzahl der Konten wurde verdoppelt, das heisst 100 User für den Zugriff auf passwortgeschützte Verzeichnisse und Dateien oder FTP sowie 100 Mail Konten, bzw. Aliase oder Weiterleitungsadressen.&lt;br /&gt;&lt;br /&gt;Doch lesen Sie auf der &lt;a href="http://www.webhost4life.com/hosting.asp?refid=pgloor"&gt;Hosting Plan Vergleichsseite&lt;/a&gt; von &lt;a href="http://www.webhost4life.com/default.asp?refid=pgloor"&gt;WebHost4Life&lt;/a&gt; selbst nach was im Advance Plan für nur US$ 9.95 / Monat alles enthalten ist.&lt;br /&gt;&lt;br /&gt;Was das Control Panel anbelangt, so ist es vom Design her zwar nicht gerade mein Traum, aber was die Funktionalitäten betrifft, so lässt es kaum Wünsche offen. Die Menüs sind im Allgemeinen übersichtlich, intuitiv und logisch strukturiert. Es gibt ein paar Ausnahmen, an die man sich jedoch schnell gewöhnt.&lt;br /&gt;&lt;br /&gt;Wer nun mangelhaften Support erwartet ist fehl am Platz. Auf sämtliche Support-Anfragen, die ich bisher über das Ticket-System eingereicht habe, habe ich innerhalb weniger als einer halben Stunde eine erste Antwort erhalten. Nach meinem Empfinden war die Qualität der Antworten durchaus gut. Vorausgesetzt man hat seine Fragen oder das Problem genügend gut formuliert und dokumentiert, so kann man damit rechnen, dass mit der ersten Antwort das Problem behoben, bzw. die Frage beantwortet ist.&lt;br /&gt;&lt;br /&gt;In zwei Fällen hatte ich allerdings Pech und es war ein längerer Dialog notwendig. Es scheint mir, dass Antworten auf Antworten nicht so schnell beantwortet werden. In meinem Fall dauerte es dann immer einen guten Tag bis ich wieder eine Antwort bekommen habe. Nachdem mir der Geduldsfaden gerissen ist und ich ein neues Ticket mit einem Verweis auf das alte Ticket eingereicht habe, hat es dann aber immer sofort geklappt. Dass ein Dialog erforderlich war lag an der Komplexität des Problems. Das eine Mail handelte es sich um ein lokales Problem im Zusammenhang mit unserer Firewall. Da gab es ein Problem mit FTP, auf das WebHost4Life keinen Einfluss hatte. Bei der zweiten Sache ging es um die Frage nach der Unterstützung einer deutschsprachigen Version der Windows Sharepoint Services.&lt;br /&gt;&lt;br /&gt;Da es sich um einen amerikanischen Anbieter handelt, konnte ich nicht erwarten, dass dieser Windows Sharepoint Services in deutscher Sprache anbietet. Nachdem ich erfahren habe, dass dazu ein deutsches Sprachpaket installiert werden muss, habe ich über den Support eine entsprechende Anfrage eingereicht. Man hat mir sofort angeboten, gegen eine Einmalgebühr von US$ 15.- dieses Paket zu installieren und für mich die Site aufzusetzen. Nach zwei Tagen konnte ich meine deutschsprachige Windows Sharepoint Site nutzen.&lt;br /&gt;&lt;br /&gt;Für Entwickler ist bei dieser Gelegenheit noch zu erwähnen, dass es gegenwärtig zu Testzwecken auch möglich ist, gegen eine Einmalgebühr von US$ 15.-, WSS 3.0 Beta zu nutzen. Allerdings nur in englischer Sprache.&lt;br /&gt;&lt;br /&gt;Die Möglichkeit zur Online Kommunikation mit dem technischen Support (Live Chat) oder für telefonische Supportanfragen habe ich bisher nicht genutzt. Nachträglich denke ich manchmal, dass es vielleicht die Kommunikation vereinfacht hätte.&lt;br /&gt;&lt;br /&gt;Als weitere Supportoptionen stehen ein Anwender Forum eine „Knowledge Base“ mit Antworten zu häufig gestellten Fragen zur Verfügung. Die „Knowledge Base“ ist zwar nicht sehr umfassend, enthält aber in vielen Fällen die Antwort auf typische Anfängerprobleme. Auffallend am Forum ist, dass sich relativ wenig Fragen direkt auf WebHost4Life beziehen. Ich nehme an, dass dies so ist, weil der Support allgemein genügend Unterstützung bietet, so dass die Fragen im Forum über das hinausgehen, was man allgemein vom Support erwarten kann.&lt;br /&gt;&lt;br /&gt;Ob man Supportanfragen telefonisch, über das Ticket-System, im Live Chat oder über Email einreicht, eines ist absolute Bedingung: man benötigt genügend Kenntnisse der englischen Sprache.&lt;br /&gt;&lt;br /&gt;Somit wären wir auch schon beim nächsten Thema. Die Sprache und die geografische Entfernung. Mal kulturelle und politische Hemmnisse beiseite gelassen, so ist es doch so, dass sich WebHost4Life irgendwo an der amerikanischen Westküste befindet. Dies bedeutet, dass es bei denen im Sommer erst 7 Uhr in der früh ist, wenn es bei uns bereits 16 Uhr ist und wir schon bald Feierabend haben.&lt;br /&gt;&lt;br /&gt;Der Support steht zwar rund um die Uhr zur Verfügung, was aber nicht heisst, dass zu jedem Thema rund um die Uhr auch immer der richtige Spezialist zur Verfügung steht. Trotzdem scheint mir dies nicht einmal das grösste Problem zu sein.&lt;br /&gt;&lt;br /&gt;Bedeutender scheint mir doch die Tatsache zu sein, dass alle Server- und Betriebssysteme auf englische Sprache und englische Kultureinstellungen eingestellt sind. Auch wenn dies in der Regel kaum eine Rolle spielt, so kommt es doch immer wieder durch. Control Panel, ausschliesslich Englisch. Web Mail Interface in Deutsch, aber z.B. mit englischem Kalender. Amerikanische Datum/Zeitformate dringen überall durch und auch der Zeitunterschied macht sich da und dort negativ bemerkbar. So stimmen z.B. die Daten der letzten Bearbeitung auf dem Server und lokal nie überein. ASP.NET Fehlermeldungen kommen immer in englischer Sprache daher. Das wären so die wichtigsten Probleme. Wer das nicht in Kauf nehmen will, der ist bei WebHost4Life definitiv fehl am Platz.&lt;br /&gt;&lt;br /&gt;Ein weiterer Nachteil, den ich insbesondere am Wochenende festgestellt habe (vermutlich wenn alle am Skypen sind und die grossen Musik-, Bild- und Video-Downloads laufen) ist die Geschwindigkeit bei den Dateiübertragungen. Das ist trotz meinem ADSL Anschluss zu gewissen Zeiten recht mühsam und ich fühle mich gelegentlich in die Zeiten vor ISDN und ADSL zurückversetzt.&lt;br /&gt;&lt;br /&gt;Und so wären wir beim vorläufig letzten Thema, der Performance. Ich habe mich bisher nie so richtig um die Infrastruktur bei Webhost4Life gekümmert. Es hat mich einfach nicht interessiert. Persönlich habe ich bisher noch nie besondere Performance Probleme verspürt. Ich höre aber immer wieder von Leuten, die sich über Serverausfälle und Performanceprobleme beklagen, die meines Erachtens normalerweise auf mangelnde Ressourcen zurückzuführen sind. Als Entwickler habe ich damit keine Probleme. Ist mein Blog mal weg für ein paar Minuten, dann ist das nicht weiter tragisch.&lt;br /&gt;&lt;br /&gt;Was ist wenn ich aber eine Produktions Site betreibe, wenn möglich mit eCommerce? In diesem Fall würde ich persönlich so oder so etwas mehr Geld ausgeben und eine dedizierte Server Lösung mit einem kalkulierbaren oder garantierten Leistungsprofil gegenüber einem Shared Hosting Plan vorziehen. Für uns West-Europäer dürfte dann eine Lösung bei einem amerikanischen Provider nicht unbedingt das richtige sein.&lt;br /&gt;&lt;br /&gt;Solange die Web Site aber nur zu Test- und Entwicklungszwecken verwendet wird oder der persönlichen Verwendung als Blog Site oder als Site für das Familien Web dient, dann ist WebHosing4Life bestimmt der richtige Partner.&lt;br /&gt;&lt;br /&gt;Der eine oder andere mag nun denken, bei so viel Lob, da ist was faul. Nein, ich bin mit dem gebotenen Service einfach zufrieden und möchte andere auch daran teilnehmen lassen. Ich gebe zu, dass ich eine kleine Provision erhalte, falls Sie auf einen der oben aufgeführten Links klicken und dann eine Bestellung ausführen (übrigens eine gute Möglichkeit sich Ihre Web Site zu finanzieren).&lt;br /&gt;&lt;br /&gt;Nun, es ist nicht meine Absicht mit diesem Beitrag Geld zu verdienen. Sie können gerne den folgenden Link verwenden, falls Sie nicht wollen, dass Web Site mit finanzieren: &lt;a href="http://www.webhost4life.com/"&gt;http://www.webhost4life.com&lt;/a&gt;.&lt;br /&gt;Ansonsten klicken Sie hier: &lt;a href="http://www.webhost4life.com/defaut.asp?refid=pgloor"&gt;http://www.webhost4life.com/defaut.asp?refid=pgloor&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Peter Gloor&lt;/div&gt;</description><link>http://www.petergloor.com/blog/2006/10/aspnet-20-web-hosting-mit-sql-server.html</link><author>Peter Gloor</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/12599663/posts/full/115874503421221119</guid><pubDate>Wed, 20 Sep 2006 09:22:00 +0000</pubDate><atom:updated>2006-09-20T11:37:14.223+02:00</atom:updated><title>VRML wegen Exploit deaktivieren</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Microsoft hat wieder einmal ein &lt;a href="http://www.heise.de/security/news/meldung/78372"&gt;Problem mit einem Exploit&lt;/a&gt;. Ein JavaScript basierender Virus versteckt sich hinter Grafiken auf Web Seiten. Der Schädling nützt eine bisher unbekannte Schwachstelle in der vom Internet Explorer verwendeten VML Rendering Maschine von Microsoft aus, so dass es zu einem Pufferüberlauf kommt, der zur Ausführung von privilegiertem Code verwendet werden kann. Das damit verbundene Risiko wird von den Experten allgemein als hoch eingestuft.&lt;br /&gt;&lt;br /&gt;Es wird erwartet, dass das Problem im nächsten Windows Update, d.h. um den 10. Oktober 2006, behoben wird.&lt;br /&gt;&lt;br /&gt;Da sich &lt;a href="http://www.norman.ch"&gt;mein AntiVirus Software Hersteller&lt;/a&gt; bisher zu diesem neusten Problem noch nicht geäussert hat, habe ich als einfache und schnelle Massnahme beschlossen, die VML Rendering Maschine zu deaktivieren, indem ich diese aus der Registrierung entferne. Dies bietet zwar keine 100%-ige Sicherheit, aber nach allem was ich zum Problem gelesen habe, ist nicht damit zu rechnen, dass diese Massnehme nicht genügen sollte.&lt;br /&gt;&lt;br /&gt;Diese Massnahme hat natürlich auch einen Nachteil. Nachdem die VML aus der Registrierung entfernt wurde, werden Anwendungen, die VML rendern nicht mehr richtig funktionieren. Dies betrifft auch Web Seiten, die auf VML basierende grafische Elemente verwenden.&lt;br /&gt;&lt;br /&gt;Eine Alternative wäre auch im Internet Explorer JavaScripting zu Deaktivieren. VML zu deaktivieren scheint mir zumindest in meinem Fall das kleinere Übel zu sein, zumindest da das ganze ja nur vorübergehend für ca. 3 Wochen ist.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Zum Deaktivieren der VML Rendering Maschine unter Windows XP / SP2 ist wie folgt vorzugehen:&lt;br /&gt;1. Als Benutzer mit Administrator Rechten einloggen.&lt;br /&gt;2. Über Start -&gt; Ausführen -&gt; folgenden Befehl eingeben:&lt;br /&gt; regsvr32 -u "c:\Programme\Gemeinsame Dateien\Microsoft Shared\VGX\vgx.dll"&lt;br /&gt;3. Eine Dialogbox, welche die Ünderung bestätigt erscheint. OK Clicken.&lt;br /&gt;4. Rechner neu starten (oder zumindest erneut einloggen)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Nachdem die Datei de-regegistriert wurde, werden wie bereits gesagt, Anwendungen, die VML rendern nicht mehr richtig funktionieren.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Das Deaktivieren von vgx.dll kann durch erneute Registrierung jederzeit rückgängig gemacht werden. Dazu müssen Sie den gleichen Befehl wie oben, aber ohne den -u Parameter eingeben:&lt;br /&gt; regsvr32 "c:\Programme\Gemeinsame Dateien\Microsoft Shared\VGX\vgx.dll"&lt;br /&gt;&lt;/p&gt;&lt;p&gt;P.S. Je nach Installation kann der Anfang des Dateipfades auf Ihrem System evtl anders lauten.&lt;/p&gt;&lt;p&gt;Nachtrag 20.9.2006: Die vorliegende Massnahme wird übrigens unter anderm mittlerweile auch von &lt;a href="http://www.microsoft.com/technet/security/advisory/925568.mspx"&gt;Microsoft empfohlen&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;</description><link>http://www.petergloor.com/blog/2006/09/vrml-wegen-exploit-deaktivieren.html</link><author>Peter Gloor</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/12599663/posts/full/115753736195299818</guid><pubDate>Wed, 06 Sep 2006 09:47:00 +0000</pubDate><atom:updated>2006-09-19T15:10:16.733+02:00</atom:updated><title>Datei kann nicht geloescht werden</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Als ich auf einem Windows XP /SP2 System nach einem Festplattencrash versucht habe von der alten Festplatte noch möglichst viel Daten auf die neue Festplatte zu retten, hatte ich am Schluss ein paar Dateien mit Dateinamen in der Art Unbekannt0001714.doc übrig, die ich nirgends zuordnen konnte. Es waren trotz der Endung offensichtlich keine Word Dateien. Der Inhalt liess irgendwie auf Visio Dateien schliessen.&lt;br /&gt;&lt;br /&gt;Das Problem mit diesen Dateien war, dass ich diese (auf der neuen Festplatte) nicht mehr löschen konnte. Es kam immer eine Meldung in der Art "Unbekannt0001714.doc' kann nicht gelöscht werden. Die Datei wird von einer anderen Person bzw. einem anderen Programm verwendet".&lt;br /&gt;&lt;br /&gt;Alle Tips und Tricks, die ich im Web gefunden habe (z.B. im Abgesicherten Modus starten oder Command Fenster zum Löschen der Daten öffnen und vor dem Löschen Explorer beenden) haben nichts genützt.&lt;br /&gt;&lt;br /&gt;Folgendes Vorgehen hat aber geholfen:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="color:#333333;"&gt;Befehlsfenster öffnen.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#333333;"&gt;Mit cd c:\backup\unbekannt in das Verzechnis mit den Daten wechseln.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#333333;"&gt;dir /x eingeben. Dies listet die Datein mit den Namen in der Kurz- und Langform aus.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Es hat sich gezeigt, dass die Dateien in der Kuzform ganz anders benannt waren. Unter Verwendung des Namens in der Kurzform konnte ich die Dateien problemlos löschen.&lt;br /&gt;&lt;br /&gt;Es war reiner Zufall, dass ich darauf gestossen bin, schliesslich lässt die Fehlermeldung ganz anderes vermuten.&lt;br /&gt;&lt;br /&gt;Übrigens, nehme ich an, dass man die Dateien auch über die Wiederherstellungskonsole hätte löschen können. Das wäre dann das nächste gewesen, das ich versucht hätte.&lt;/div&gt;</description><link>http://www.petergloor.com/blog/2006/09/datei-kann-nicht-geloescht-werden.html</link><author>Peter Gloor</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/12599663/posts/full/115740099028954414</guid><pubDate>Mon, 04 Sep 2006 18:29:00 +0000</pubDate><atom:updated>2006-09-04T22:21:18.310+02:00</atom:updated><title>Drucken einer Windows Form (WinForm) mit C#</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Nachdem ich kürzlich in C# eine TextPrinter Klasse programmiert habe, wurde ich heute gefragt, wie man ein Windows Form, oder jede andere grafische Komponente, so wie sie auf dem Bildschirm dargestellt ist, ausdrucken kann. &lt;p&gt;Hmm..., das hab ich noch nie gemacht! Im Web findet man schnell einmal Beispiele zum Ausdrucken von Text-Dokumenten, aber in der Tat, die Beispiele für den Ausdruck von grafischen Elementen sind entweder schwer zu finden oder für den Anfänger viel zu kompliziert. Um den Einstieg in die Materie zu erleichtern habe ich deshalb das nachfolgende Beispiel mit C# unter .NET 2.0 kreiert.&lt;/p&gt;&lt;p&gt;Im Beispiel wird eine Windows Applikation mit einem Fenster (Form1) erstellt. Auf der Maske wird ein Button (button1) platziert, der mit Print beschriftet wird und nachstehend als "Print Button" bezeichnet wird.&lt;/p&gt;&lt;p&gt;Zum Druckvorgang muss man folgendes wissen. Es gibt unter .NET 2.0 eine PrintDocument Klasse. Mindestens eine Instanz dieser Klasse muss dem Projekt hinzugefügt werden. Unter Visual Studio 2005 zieht man dazu aus der Toolbox einfach die Komponente PrintDocument auf die Form im Design Mode. Dies erzeugt dann die Instanz printDocument1, die im unteren Teil des Dokumentenfensters mit der Maske angezeigt wird.&lt;/p&gt;&lt;p&gt;Die PrintDokument Klasse hat als wichtigste Methode die Methode Print(). Mit dem Aufruf dieser Methode wird der Druckvorgang eingeleitet. Zu diesem Zweck platzieren wir den Code für den Aufruf der Print() Methode im Click Event (button1_Click) des oben erwähnten Print Buttons. Der Code dazu lautet ganz einfach &lt;span style="color:#000000;"&gt;printDocument1.Print();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Wird die Print() Methode von &lt;span style="color:#000000;"&gt;printDocument1&lt;/span&gt; aufgerufen, dann wird für jede zu druckende Seite der Event &lt;span style="color:#000000;"&gt;printDocument1_PrintPage so oft ausgelöst, bis es nichts mehr zu drucken gibt. Was und wie ausgedruckt wird, muss jedoch der Programmierer selbst bestimmen. Den Code dazu platziert man im entsprechenden PrintPage Event (printDocument1_PrintPage).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Jetzt ist noch wichtig zu wissen, dass der Ausdruck in jedem Fall über ein Graphics Object erfolgt das mit den Event Argumenten des Print Page Events mitgeliefert wird. Normalerweise sieht der Rumpf des PrintPage Events etwa so aus:&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&lt;br /&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; printDocument1_PrintPage(&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;&lt;span style="color:#000000;"&gt; sender, System.Drawing.Printing.&lt;/span&gt;&lt;span style="color:#008080;"&gt;PrintPageEventArgs&lt;/span&gt;&lt;span style="color:#000000;"&gt; e) {}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;In diesem Fall haben wir mit e.Graphics Zugriff auf das Graphics Objekt mit dem die Seite gedruckt wird.&lt;/p&gt;&lt;p&gt;Um unsere Aufgabe zu lösen, geht es also darum, die grafische Darstellung unseres Fenster auf das e.Graphics Objekt zu übertragen. Eine Möglichkeit dies zu tun besteht darin, dass wir von unserem Fenster mit der Methode DrawToBitmap, die in allen Controls zur Verfügung steht, eine Bitmap erzeugen und diese dann mit der Methode DrawImage von e.Graphics zeichnen lassen, was hiermit bedeutet, dass unsere Bitmap dabei ausgedruckt wird. Diesen Vorgang können wir mit nur drei Befehlen durchführen. Die verfügbaren Parameter helfen uns dabei die richtige Grösse zu bestimmen und unsere Bitmap auf dem Ausdruck innerhalb der Seite und mit einem Abstand von den Rändern zu platzieren. &lt;/p&gt;&lt;p&gt;Wäre unsere Bitmap grösser als eine Seite, dann müssten wir noch die Logik programmieren, die erforderlich ist um die Bitmap aufzuteilen und über mehrere Seiten verteilt auszudrucken. Solche Programme können dann schon recht komplex werden. An diese Stelle geht es aber nur darum an einem einfachen Beispiel aufzuzeigen, wie das Prinzip funktioniert.&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;Vorgehen in 7 Schritten: &lt;p&gt;&lt;/p&gt;&lt;span style="font-size:85%;"&gt;&lt;p&gt;1. Neue Applikation PrintDemo mit Maske Form1 erstellen&lt;/p&gt;&lt;p&gt;2. Aus Toolbox PrintDocument hinzufügen&lt;br /&gt;-&gt; printDocument1&lt;/p&gt;&lt;p&gt;3. Doppelcklick auf printDocument1&lt;br /&gt;-&gt; printDocument1_PrintPage Event Handler&lt;/p&gt;&lt;p&gt;4. Print Button hinzufügen und Doppelcklick&lt;br /&gt;-&gt; button1_Click&lt;/p&gt;&lt;p&gt;5. In button1_Click Event Code zum Aufruf von printDocument1.Print() hinzufügen.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;6. printDocument1_PrintPage Event Code zum Drucken der Bitmap der aktuellen Komponente hinzufügen.&lt;/p&gt;&lt;p&gt;// a. Neue Bitmap mit den Abmessungen der aktuellen Komponente erstellen&lt;br /&gt;Bitmap b = new Bitmap(this.Width, this.Height);&lt;/p&gt;&lt;p&gt;// b. Aktuelle Komponente unter Einhaltung der Seitenbegrenzungen&lt;br /&gt;// des Ausdrucks in die neu erstellte Bitmap zeichnen&lt;br /&gt;this.DrawToBitmap(b, e.PageBounds);&lt;/p&gt;&lt;p&gt;// c. Bitmap mit Abstand 15 von links und 50 von oben zeichnen (= drucken)&lt;br /&gt;e.Graphics.DrawImage(b, new Point(15, 50));&lt;/p&gt;&lt;p&gt;7. Testen&lt;/p&gt;&lt;p&gt;&lt;/span&gt;&lt;hr /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="code"   style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; System;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Collections.Generic;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.ComponentModel;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Data;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Drawing;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Text;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Windows.Forms;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color:#000000;"&gt; PrintDemo {&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#008080;"&gt;Form1&lt;/span&gt;&lt;span style="color:#000000;"&gt; : &lt;/span&gt;&lt;span style="color:#008080;"&gt;Form&lt;/span&gt;&lt;span style="color:#000000;"&gt; {&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; Form1() {&lt;br /&gt;InitializeComponent();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&lt;summary&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; PrintPage Event von printDocument1.&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Leere Vorlage wird durch Doppelclick auf Komponente&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; printDocument1 (Schritt3) automatisch erzeugt.&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;/summary&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;param name="sender"&gt;&lt;/param&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;param name="e"&gt;&lt;/param&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;remarks&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Wird von der Print() Methode mit jeder zu druckenden&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Seite als Callback Methode aufgerufen.&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;/remarks&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; printDocument1_PrintPage(&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;&lt;span style="color:#000000;"&gt; sender, System.Drawing.Printing.&lt;/span&gt;&lt;span style="color:#008080;"&gt;PrintPageEventArgs&lt;/span&gt;&lt;span style="color:#000000;"&gt; e) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;// Schritt 6:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;// Neue Bitmap mit den Abmessungen der zu druckenden&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;// Komponente erstellen&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;Bitmap&lt;/span&gt;&lt;span style="color:#000000;"&gt; b = &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#008080;"&gt;Bitmap&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;&lt;span style="color:#000000;"&gt;.Width, &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;&lt;span style="color:#000000;"&gt;.Height);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;// Zu druckende Komponente unter Einhaltng der&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;// Seitenbegrenzungen des Ausdrucks in die neu&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;// erstellte Bitmap zeichnen.&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;&lt;span style="color:#000000;"&gt;.DrawToBitmap(b, e.PageBounds);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;// Bitmap mit Abstand 15 von links und 50 von oben&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;// zeichnen, bzw. drucken (e.Graphics ist dabei das&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;// eigentliche Graphics Objekt, das gedruckt wird).&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;e.Graphics.DrawImage(b, &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#008080;"&gt;Point&lt;/span&gt;&lt;span style="color:#000000;"&gt;(15, 50));&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;summary&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Click Event von Print Button (button1).&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; Schritt 4: Leere Vorlage wird durch Doppelclick&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; auf Komponente button1 automatisch erzeugt.&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;/summary&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;param name="sender"&gt;&lt;/param&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;///&lt;/span&gt;&lt;span style="color:#008000;"&gt; &lt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;param name="e"&gt;&lt;/param&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; button1_Click(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;&lt;span style="color:#000000;"&gt; sender, &lt;/span&gt;&lt;span style="color:#008080;"&gt;EventArgs&lt;/span&gt;&lt;span style="color:#000000;"&gt; e) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;// Schritt 5: Aufruf der Print() Methode von printDocument1.&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;printDocument1.Print();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;4.9.2006 /pg&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;div class="code" size="10pt" face="Courier New"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://www.petergloor.com/blog/2006/09/drucken-einer-windows-form-winform-mit.html</link><author>Peter Gloor</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/12599663/posts/full/115712184762091014</guid><pubDate>Fri, 01 Sep 2006 14:07:00 +0000</pubDate><atom:updated>2006-09-01T16:44:07.680+02:00</atom:updated><title>Canon ZoomBrowser Ex nach Festplatten-Crash neu installieren</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Eine Anleitung zur Neu-Installation von ZoomBrowser Ex 5.6.0c ohne Installation einer älteren Version folgt am Ende dieses Artikels.&lt;br /&gt;&lt;br /&gt;Riesenfrust! Festplatten-Crash, und als ob das noch nicht reicht, massig Ärger bei der Wiederherstellung, bzw. der Neu-Installation fon Canon ZoomBrowser Ex.&lt;br /&gt;&lt;br /&gt;Nun, es ist schon ein paar Jahre her, als ich stolzer Besitzer einer Canon Digital Ixus 300 Kamera wurde. Im Lieferumfang enthalten, waren nebst den erforderlichen Treibern und weiterer Software, die Software ZoomBrowser Ex 2.6 und PhotoStitch 3.1.&lt;br /&gt;&lt;br /&gt;Inzwischen habe ich meinen Rechner von Windows ME auf Windows XP migriert und die Canon Software auf den neusten Stand gebracht. Unter anderem waren dafür auch ein paar Aktionen, wie das Konvertieren der Datenbank und das Enfernen von Daten aus den Bildern notwendig.&lt;br /&gt;&lt;br /&gt;Nach dem Festplatten-Crash ist es mir gelungen die Daten (Bilder) aus Sicherungen und alten CD's einigermassen wiederherzustellen. Es war aber unmöglich, die Programme ohne neu Installation wieder herzustellen.&lt;br /&gt;&lt;br /&gt;Da möglichst aktuelle Verionen der Programme installieren wollte, habe ich auf der Canon Software Download Site nach den aktuellsten Programm-Versionen für die Digital IXUS 300 unter Windows XP gesucht. Das Durchhangeln zwischen den Seiten habe ich als eher mühsam empfunden und es hat längere Zeit gedauert, bis ich die für meine Zwecke geeignete Software zusammengstellt und heruntergeladen hatte. Im Nachhinein, habe ich dann noch festgestellt, dass ich nur vier der insgesamt 7 heruntergeladenen Dateien brauchte.&lt;br /&gt;&lt;br /&gt;Leider waren unter der angebotenen Software keine Voll-Versionen von ZoomBrowser Ex 5.6 und PhotoStitch 3.1 zu finden. Oder etwa doch?&lt;br /&gt;&lt;br /&gt;Es hat sich herausgestellt, dass es sich anscheinend um Installationsdateien handelt, die alle erforderlichen Dateien enthalten und problemlos für eine komplette Neu-Installation verwendet werden können, wenn ein kleiner Trick angewendet wird.&lt;br /&gt;&lt;br /&gt;Der Trick heisst, vor der Installation in der Windows Registry folgende Einträge mit leerenSchlüsseln erstellen:&lt;br /&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Canon\ZoomBrowser Ex&lt;br /&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Canon\PhotoStitch&lt;br /&gt;&lt;br /&gt;Hier die genaue Anleitung (gemäss Stand der Dateien am 1.9.2006).&lt;br /&gt;Neu-Installation von Canon ZoomBrowser Ex 5.6 und PhotoStitch 3.1&lt;br /&gt;=================================================================&lt;br /&gt;&lt;br /&gt;Folgende Dateien werden benötigt (Download von Canon Web Site):&lt;br /&gt;--------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;1.  Canon Digitalkamera USB WIA Treiber (3.9.0) &lt;br /&gt;Deutsch, selbstextrahierendes ZIP Archiv, k1a8_gex.exe&lt;br /&gt;&lt;br /&gt;2. RemoteCapture (2.7.5) &lt;br /&gt;Deutsch, selbstextrahierende Installationsdatei, k5c02dex.exe&lt;br /&gt;&lt;br /&gt;Bitte beachten: PowerShot A80 und IXUS i werden in dieser Version von RemoteCapture nicht unterstützt. &lt;br /&gt;&lt;br /&gt;3.  ZoomBrowser EX Updater (DE) (5.6.0c) &lt;br /&gt;Deutsch, selbstextrahierendes ZIP Archiv, K6805DEx.exe &lt;br /&gt;&lt;br /&gt;4.  PhotoStitch Updater (DE) (3.1.17a) &lt;br /&gt;Deutsch, selbstextrahierendes ZIP Archiv, K6401dex.exe &lt;br /&gt;&lt;br /&gt;So wird die Installation gemacht:&lt;br /&gt;--------------------------------&lt;br /&gt;1. Installation USB WIA Treiber&lt;br /&gt;&lt;br /&gt;1.1 k1a8_gex.exe starten und Dateien in einen temporären Ordner extrahieren.&lt;br /&gt;1.2 Im extrahierten Ordner ins Unterverzeichnis GERMAN wechseln.&lt;br /&gt;1.3 Setup.exe starten.&lt;br /&gt;1.4 Nach erfolgreicher Installation System neu starten.&lt;br /&gt;&lt;br /&gt;2. Installation RemoteCapture (2.7.5)&lt;br /&gt;&lt;br /&gt;2.1 k5c02dex.exe starten und Instruktionen in den Dialogen befolgen.&lt;br /&gt;2.2 Nach erfolgreicher Installation System neu starten.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Neuinstallation ZoomBrowser EX 5.6.0c (kein Update)&lt;br /&gt;&lt;br /&gt;3.1 In Registry Schlüssel "HKEY_LOCAL_MACHINE\SOFTWARE\Canon\ZoomBrowser Ex" hinzufügen.&lt;br /&gt;3.2 K6805DEx.exe starten und Dateien in einen temporären Ordner extrahieren.&lt;br /&gt;3.3 Im extrahierten Ordner ins Unterverzeichnis K6805DEx wechseln.&lt;br /&gt;3.4 ZB560UPD_G.exe starten und Instruktionen in den Dialogen befolgen.&lt;br /&gt;3.5 Nach erfolgreicher Installation System neu starten.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. Neuinstallation PhotoStitch 3.1.17a (kein Update)&lt;br /&gt;&lt;br /&gt;4.1 In Registry Schlüssel "HKEY_LOCAL_MACHINE\SOFTWARE\Canon\PhotoStitch" hinzufügen.&lt;br /&gt;4.2 K6401dex.exe starten und Dateien in einen temporären Ordner extrahieren.&lt;br /&gt;4.3 Im extrahierten Ordner ins Unterverzeichnis K6401dex wechseln.&lt;br /&gt;4.4 PST3117UPD_G.exe starten und Instruktionen in den Dialogen befolgen.&lt;br /&gt;4.5 Nach erfolgreicher Installation System neu starten.&lt;br /&gt;&lt;br /&gt;Wichtige Hinweise:&lt;br /&gt;-----------------&lt;br /&gt;1. Andere Dateien als oben aufgeführt werden bei einer Neuinstallation nicht benötigt.&lt;br /&gt;2. USB WIA Treiber und Remote Capture sind Basis Installationen (keine Updaters)&lt;br /&gt;3. ZoomBrowser und PhotoStitch sind Updater, die nach einer bereits installierten Version verlangen.&lt;br /&gt;4. Es handelt sich aber bei ZoomBrowser und PhotoStitch um volle Installationspakete, die korrekt und vollständig installiert werden, wenn entsprechende Registry Einträge gefunden werden.&lt;br /&gt;5. Das beschriebene Verfahren gilt nur für Windows/XP SP2. Vermutlich läuft es auch unter SP1 oder Windows 2000.&lt;br /&gt;6. Mit diesem Verfahren werden keine Datenbanken etc. aktualisiert. Bei älteren Versionen muss zuerst eine alte Version von ZoomBrowser Ex installiert werden, damit eine ggf. vorhandene Datenbank konvertiert werden kann.&lt;br /&gt;&lt;br /&gt;Wie immer, ohne Gewähr!&lt;/div&gt;</description><link>http://www.petergloor.com/blog/2006/09/canon-zoombrowser-ex-nach-festplatten.html</link><author>Peter Gloor</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/12599663/posts/full/115679950102925682</guid><pubDate>Mon, 28 Aug 2006 20:46:00 +0000</pubDate><atom:updated>2006-08-28T23:13:57.486+02:00</atom:updated><title>Product Key Finder</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Innert kurzer Zeit hatten wir an zwei PC's einen Total-Ausfall der Hard-Disk. Nun, man bewahrt so allerlei wichtiges oder weniger wichtiges auf, aber das wichtigste fehlt wohl immer.&lt;br /&gt;&lt;br /&gt;Nun habe ich zwar in einer Excel Tabelle immer eine Liste darüber geführt, welche Lizenzen wir besitzen und wo diese eingesetzt sind. Da wir die Lizenzen mal haben, habe ich die Liste als weniger wichtig eingestuft und davon nie eine Sicherung angelegt. Als meine Hard-Disk ausgefallen ist, war es dann soweit. Nun, nicht weiter tragisch, dachte ich mir, da ich noch einigermassen wusste, was auf meinem PC installiert ist. Ich habe mir immer gedacht, dass ich die Liste dann eines Tages mal neu erstelle.&lt;br /&gt;&lt;br /&gt;Nun, ist die Hard-Disk meiner Kollegin ausgestiegen. Da wurde es plötzlich schon viel schwieriger, da wir nicht mehr wissen, welche Lizenzen eigentlich wohin gehören und nach den einigermassen geglückten Wiederherstellungsversuchen, Office einfach die Lizenzen nochmals haben wollte.&lt;br /&gt;&lt;br /&gt;Um das Problem zu lösen habe ich nun ein kleines Programm mit dem sinnigen Namen "Product Key Finder" (ProductKeyFinder) geschrieben, das in der Registry alle Registrierungseinträge mit dem Schlüssel "DigitalProductID" sucht und diesen al Product Key zusammen mit mit dem Product Name und der Product ID als Liste in lesbarer Form ausgibt.&lt;br /&gt;&lt;br /&gt;Die Liste enthält im Kopf den Namen des Benutzers (der das Programm ausgeführt hat) und den Namen des Computers auf dem das Programm ausgeführt wurde. Somit kann man schnell und unkompliziert eine Liste über die eingesetzten Lizenzen erstellen. Der Benutzer muss auf dem Rechner, auf dem das Programm ausgeführt wird, über Administratorenrechte verfügen.&lt;br /&gt;&lt;br /&gt;Das Programm kann vorläufig kostenlos von folgendem Link ausgeführt werden:&lt;br /&gt;&lt;a href="http://petergloor.com/product-key-finder/default.htm"&gt;http://petergloor.com/product-key-finder/default.htm&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Es wird ein Hinweis erscheinen, dass der Publisher nicht ermittelt werden kann. Es bleibt Ihnen überlassen, ob Sie das Programm trotzdem ausführen wollen. Das Programm wurde so geschrieben, dass es auf Ihrem Rechner ausgeführt wird und keinerlei Daten übermittelt werden. Es liest Registry-Einträge so, dass diese nur gelesen, aber nicht verändert werden können. Das Programm selbst sollte also sicher sein.&lt;br /&gt;&lt;br /&gt;Sollte es jedoch jemandem gelingen, das ursprüngliche Programm auf dem Server auszuwechseln, dann haben wir ein echtes Sicherheitsproblem. Ich hoffe, dass ich das Problem noch irgendwie (kostengünstig) lösen kann.&lt;/div&gt;</description><link>http://www.petergloor.com/blog/2006/08/product-key-finder.html</link><author>Peter Gloor</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/12599663/posts/full/111515489343902982</guid><pubDate>Tue, 03 May 2005 21:14:00 +0000</pubDate><atom:updated>2006-08-27T19:48:54.376+02:00</atom:updated><title>Bloggen : Wunsch und Realität</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Was mich am Bloggen sofort begeisterte, war die Tatsache, dass man sofort beginnen kann. Man braucht sich keine Gedanken zu HTML und sonstigen www-technischen Dingen zu machen. Gut geführt durch den &lt;a href="http://www.blogger.com/start"&gt;Setup-Prozess bei Blogger&lt;/a&gt; gehen und nach weniger als einer Stunde kann man bereits anfangen seine Gedanken in die Welt hinaus zu tragen.&lt;br /&gt;&lt;br /&gt;So macht die Pflege einer Web-Site doch Spass. Man konzentriert sich auf den Inhalt und nicht auf die Technik. Da kommen auf einmal neue Gedanken auf. Man könnte das ganze doch auch als Web-Site verwenden? Doch erfüllt dies den Zweck? Und wie erreiche ich mit den vorgegebenen Templates die erforderliche Darstellung? Lassen sich diese Anpassen? Fragen über Fragen, die beantwortet werden wollen.&lt;br /&gt;&lt;br /&gt;Schnell stellt man leider fest, dass gerade &lt;a href="http://www.blogger.com"&gt;Blogger.com&lt;/a&gt; gravierende Nachteile hat. Nachteile, nicht nur im Vergleich mit traditionellen Web-Sites, sondern auch im Vergleich mit der Software anderer Blog-Sites.&lt;br /&gt;&lt;br /&gt;Als erstes fallen folgende Features auf die fehlen:&lt;br /&gt;&lt;em&gt;1. Keine Bilder und Dateien&lt;/em&gt;&lt;br /&gt;Einer der grössten Nachteile beim Blogger ist, dass es nicht einfach ist, Bilder einzubinden oder Dateien einzubinden. Blogger stellt für die Bilder mittlerweile zwar Möglichkeiten zur Verfügung, aber das ist alles etwas umständlich und für mein Gefühl alles andere als benutzerfreundlich.&lt;br /&gt;&lt;br /&gt;Am besten kann man noch damit umgehen, wenn man den Blog extern hostet und dann die Bilder ein einem separaten Verzeichnis verwaltet. So kann man dann die Bilder relativ bequem einbinden. &lt;br /&gt;&lt;br /&gt;Gleiches gilt für Dateien, die man zum Download zur Verfügung stellen möchte. In diesem Fall kommt man kaum darum herum, das Blog extern zu hosten.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;2. Kategorien zum Ordnen der Themen&lt;/em&gt;&lt;br /&gt;Ein weiterer gravierender Nachteil von Blogger ist das Fehlen von Kategorien, das sonst praktisch von jedem WebLog-System unterstützt wird. Der Grund mag wohl in der Struktur der Verzeichnisse und Dateien liegen, die in den Namen das Datum und den Titel enthalten, was meiner Meinung nach den eindeutigen Vorteil hat, dass die Seiten von den Suchmaschinen besser eingestuft werden. Ich kann diese Aussage zwar nicht beweisen, aber ein Versuch hat gezeigt, dass identische Blog Seiten bei einer Suche in Google weitaus weiter oben gefunden wurden, als Seiten, die einen Namen hatten, der mit dem Inhalt nichts zu tun hat.&lt;br /&gt;&lt;br /&gt;Wenn man nur wenige Kategorien hat, dann kann ein Trick darin liegen, dass man für jede Kategorie ein eigenes Blog erstellt und von einem Hauptblog aus, dann zu den einzelnen Blogs verlinkt. Zugegebenermassen, keine optimale Lösung.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;3. Individuelle Gestaltung einzelner Seiten&lt;/em&gt;&lt;br /&gt;Blogs haben den Nachteil, dass sie einen festen Aufbau haben. Es mag ein Layout für den einzelnen Artikel, ein Layout für die Hauptseite und noch Layouts zu kalendarischen und/oder kategorisierten Übersichtsseiten geben, aber damit hat es sich in der Regel. &lt;br /&gt;&lt;br /&gt;Oft möchte man aber mehr Gestaltungsfreiraum. Das zeigt, dass ein Blog eben doch ist, was es ist. Wenn man das Blog extern hostet kann man es aber gut in seine Web Site einbauen.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;4. Meta Tags&lt;/em&gt;&lt;br /&gt;Meta Tags sind versteckte Angaben, die Beschreibungen und Schlüsselworte zur Kategorisierung von Web-Seiten enthalten. Sie werden von den Suchmaschinen verwendet und dienen, wenn richtig angewendet, zur besseren Einstufung der Seiten bei einer Suche. Mit andern Worten, eine Seite dir richtig mit Schlüsselworten und einer Beschreibung versehen wurde, erscheint bei einer Suche mit Google weiter oben.&lt;br /&gt;&lt;br /&gt;Bezüglich der Web Site selbst kann man in Blogger diese Angaben machen. Was aber fehlt, ist die Möglichkeit zur Angabe von Schlüsselworten zu den einzelnen Beiträgen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;5. Editor&lt;/em&gt;&lt;br /&gt;Der Editor von Blogger ist nun auch nicht gerade das Gelbe vom Ei. Insbesondere wenn man spezielle Ansprüche hat, wie z.B. die sauber formattierte Darstellung von Code, kann es recht knifflig werden. So oder so ist es aber bald einmal mit der oben gemachten Aussage, dass es keine HTML Kenntnisse braucht vorbei.&lt;br /&gt;&lt;br /&gt;Alles in allem halte ich Blogger aber immer noch für eines der besten und vor allem einfachsten Blogging Systeme. Einfacher in der Bedienung, aber eben auch einfacher in dem was möglich ist.&lt;br /&gt;&lt;br /&gt;Nun ich bin ein Fan von einfachen Systemen. Was dahinter steckt muss nicht immer einfach sein. Für den Benutzer muss es jedoch einfach zu bedienen und zu verstehen sein.&lt;br /&gt;&lt;br /&gt;In diesem Sinn hoffe ich immer noch auf Verbesserungen seitens Google und hoffe, dass es gelingt, Blogger besser zu machen, aber einfach in der Bedienung zu halten, was hinsichtlich des Bilder-Bloggens nicht so ganz gelungen ist.&lt;/div&gt;</description><link>http://www.petergloor.com/blog/2005/05/bloggen-wunsch-und-realitt.html</link><author>Peter Gloor</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/12599663/posts/full/115609623915060869</guid><pubDate>Sun, 20 Aug 2006 17:44:00 +0000</pubDate><atom:updated>2006-08-20T20:16:03.776+02:00</atom:updated><title>Neubeginn?!?</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Da mein bisheriger Host leider kein ASP.NET 2.0 unterstützt wechselte ich breits in der Beta Phase zu einem neuen Provider. Leider hat dieser die Veröffentlichung meines Blogger Inhalts nicht zugelassen und FTP Uploads von Blogger Sites verweigert.&lt;br /&gt;&lt;br /&gt;Endlich habe ich wieder eine neue Heimat für mein Blog gefunden und bin zur Zeit noch daran mein eigenes .NET 2.0 Blog System zu erstellen. Es wird aber noch ein paar Wochen dauern, bis es soweit ist, dass es verwendet werden kann.&lt;br /&gt;&lt;br /&gt;Wer interessiert ist, kann sich mal meine erste Seite unter folgender URL anschauen:&lt;br /&gt;http://www.petergloor.com/netblog&lt;/div&gt;</description><link>http://www.petergloor.com/blog/2006/08/neubeginn.html</link><author>Peter Gloor</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/12599663/posts/full/113698175930888873</guid><pubDate>Wed, 11 Jan 2006 12:07:00 +0000</pubDate><atom:updated>2006-01-11T14:06:34.003+01:00</atom:updated><title>Mit C# Daten aus Excel lesen</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Im folgenden Beispiel werden mit COM/Interop Daten aus Excel gelesen. Um dies zu ermöglichen, muss im Visual Studio 2005 Projekt vorgängig "Microsoft Excel 11.0 Object Library" aus COM den Referenzen hinzugefügt werden.&lt;br /&gt;&lt;br /&gt;Das vorliegende Beispiel basiert auf einer leeren Form (Form1) mit einem Button (button1) und einem OpenFileDialog (openFileDialog1).  Das Beispiel befindet sich vollständig innerhalb des Click Events des Buttons (button1_Click).&lt;br /&gt;&lt;br /&gt;Das Beispiel liest den Bereich A1..B5 aus der ersten Tabelle einer beliebigen Excel Datei und überträgt den gesamten Bereich in den Array mit der Bezeichnung 'werte'.&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;using&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; System;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;using&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; System.Collections.Generic;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;using&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; System.ComponentModel;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;using&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; System.Data;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;using&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; System.Drawing;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;using&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; System.Text;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;using&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; System.Windows.Forms;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// Microsoft Excel 11.0 Object Library aus COM &lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// muss zu den Referenzen hinzugef&amp;#252;gt werden&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;using&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; Microsoft.Office.Interop.Excel;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray; style="font-family:courier new; font-size:78%; ";"&gt;///&lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt; &lt;/span&gt;&lt;span style="color: gray; style="font-family:courier new; font-size:78%; ";"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray; style="font-family:courier new; font-size:78%; ";"&gt;///&lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt; Das vorliegende Beispiel basiert auf einer leeren Form (Form1) mit &lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray; style="font-family:courier new; font-size:78%; ";"&gt;///&lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt; einem Button (button1) und einem OpenFileDialog (openFileDialog1).&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray; style="font-family:courier new; font-size:78%; ";"&gt;///&lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray; style="font-family:courier new; font-size:78%; ";"&gt;///&lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt; Das Beispiel befindet sich vollst&amp;#228;ndig innerhalb des Click Events&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray; style="font-family:courier new; font-size:78%; ";"&gt;///&lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt; des Buttons (button1_Click).&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray; style="font-family:courier new; font-size:78%; ";"&gt;///&lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray; style="font-family:courier new; font-size:78%; ";"&gt;///&lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt; Das Beispiel liest den Bereich A1..B5 aus der ersten Tabelle eines&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray; style="font-family:courier new; font-size:78%; ";"&gt;///&lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt; beliebigen Excel Datei und &amp;#252;bertr&amp;#228;gt den gesamten Bereich in den&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray; style="font-family:courier new; font-size:78%; ";"&gt;///&lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt; Array mit der Bezeichnung werte.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray; style="font-family:courier new; font-size:78%; ";"&gt;///&lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray; style="font-family:courier new; font-size:78%; ";"&gt;///&lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt; &lt;/span&gt;&lt;span style="color: gray; style="font-family:courier new; font-size:78%; ";"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;namespace&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; ExcelLeser {&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;public&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;partial&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;class&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; &lt;/span&gt;&lt;span style="color: teal; style="font-family:courier new; font-size:78%; ";"&gt;Form1&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; : &lt;/span&gt;&lt;span style="color: teal; style="font-family:courier new; font-size:78%; ";"&gt;Form&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; {&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;public&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; Form1() {&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent();&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;private&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;void&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; button1_Click(&lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;object&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; sender, &lt;/span&gt;&lt;span style="color: teal; style="font-family:courier new; font-size:78%; ";"&gt;EventArgs&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; e) {&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;this&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;.openFileDialog1.FileName = &lt;/span&gt;&lt;span style="color: maroon; style="font-family:courier new; font-size:78%; ";"&gt;"*.xls"&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;if&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; (&lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;this&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;.openFileDialog1.ShowDialog() == &lt;/span&gt;&lt;span style="color: teal; style="font-family:courier new; font-size:78%; ";"&gt;DialogResult&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;.OK) {&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// Die Excel Anwendung&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: teal; style="font-family:courier new; font-size:78%; ";"&gt;ApplicationClass&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; xlApplication = &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;new&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; &lt;/span&gt;&lt;span style="color: teal; style="font-family:courier new; font-size:78%; ";"&gt;ApplicationClass&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;();&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// Eine Referenz zum Workbook (dies ist die .XLS Datei)&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: teal; style="font-family:courier new; font-size:78%; ";"&gt;Workbook&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; xlWorkbook = &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;null&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// Eine Referenz zum Worksheet (Arbeitsblatt)&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: teal; style="font-family:courier new; font-size:78%; ";"&gt;Worksheet&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; xlWorksheet = &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;null&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// Einen Range (Bereich) mit den Daten&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: teal; style="font-family:courier new; font-size:78%; ";"&gt;Range&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; xlRange = &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;null&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// Nachstehende Eigenschaften auf 'false' setzen&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// um die Anwendung zu beschleunigen.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// Um den Vorgang sichtbar zu machen und Fehler&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// anzuzeigen, sind die Eigenschaften auf 'true'&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// zu setzen.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xlApplication.Visible = &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;false&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xlApplication.ScreenUpdating = &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;false&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xlApplication.DisplayAlerts = &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;false&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;string&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; workbook = &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;this&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;.openFileDialog1.FileName;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xlWorkbook = xlApplication.Workbooks.Open(&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; openFileDialog1.FileName, 0, &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;true&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;, 5,&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: maroon; style="font-family:courier new; font-size:78%; ";"&gt;""&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;, &lt;/span&gt;&lt;span style="color: maroon; style="font-family:courier new; font-size:78%; ";"&gt;""&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;, &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;true&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;, &lt;/span&gt;&lt;span style="color: teal; style="font-family:courier new; font-size:78%; ";"&gt;XlPlatform&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;.xlWindows, &lt;/span&gt;&lt;span style="color: maroon; style="font-family:courier new; font-size:78%; ";"&gt;"\t"&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;, &lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;false&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;, &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;false&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;, 0, &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;true&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;, 0, &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;false&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// Wir nehmen das erste Arbeitsblatt&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xlWorksheet = (&lt;/span&gt;&lt;span style="color: teal; style="font-family:courier new; font-size:78%; ";"&gt;Worksheet&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;)xlWorkbook.Worksheets[1];&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// Wir lesen den Bereich A1..B5 ein&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xlRange = xlWorksheet.get_Range(&lt;/span&gt;&lt;span style="color: maroon; style="font-family:courier new; font-size:78%; ";"&gt;"A1"&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;, &lt;/span&gt;&lt;span style="color: maroon; style="font-family:courier new; font-size:78%; ";"&gt;"B5"&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: teal; style="font-family:courier new; font-size:78%; ";"&gt;Array&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; werte = (&lt;/span&gt;&lt;span style="color: teal; style="font-family:courier new; font-size:78%; ";"&gt;Array&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;) xlRange.Cells.Value2;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// Range und Worksheet Objekte freigeben&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xlRange = &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;null&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xlWorksheet = &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;null&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// Falls noch offen, Excel Datei schliessen und&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// Workbook Objekt freigeben&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;if&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; (xlWorkbook != &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;null&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xlWorkbook.Close(&lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;false&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;, &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;null&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;, &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;null&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xlWorkbook = &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;null&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// Falls noch offen, Anwendung schliessen und&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; style="font-family:courier new; font-size:78%; ";"&gt;// Application Objekt freigeben&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;if&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt; (xlApplication != &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;null&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xlApplication.Quit();&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; xlApplication = &lt;/span&gt;&lt;span style="color: blue; style="font-family:courier new; font-size:78%; ";"&gt;null&lt;/span&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="style="font-family:courier new; font-size:78%; ";"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://www.petergloor.com/blog/2006/01/mit-c-daten-aus-excel-lesen.html</link><author>Peter Gloor</author></item></channel></rss>