Artikel mit dem Tag „C#“
73 Artikel mit dem Tag „C#“, vom neuesten zum ältesten.
-
Named Pipes in der Praxis — Windows' Standard-IPC von Entwurf bis Sicherheit
Ein Praxisleitfaden zu Named Pipes, der Standard-Prozesskommunikation unter Windows. Der Artikel ordnet anhand von Primärquellen die Wahl zwischen Byte- und ...
-
Scheinwecken — Warum Bedingungsvariablen „ohne Benachrichtigung“ aufwachen und wie Sie unter Windows richtig warten
Das Warten einer Bedingungsvariable kann zurückkehren, auch wenn keine Benachrichtigung angekommen ist (ein Scheinwecken). Dieser Artikel erklärt anhand der ...
-
Praktische Best Practices für Multithreading: .NET-Edition — Was Sie entscheiden sollten, bevor Sie weitere Threads hinzufügen
Eine praxisnahe Übersicht der Entwurfsregeln, die verhindern, dass Multithreading-Code in .NET/C# gelegentlich abstürzt oder hängen bleibt: auf Task statt au...
-
WMI/CIM aus C# und PowerShell verwenden — Praxisleitfaden für Hardwareinformationen, Prozessüberwachung und Remoteabfragen
WMI/CIM ist die Standardlösung, um die Seriennummer eines PCs auszulesen, freien Festplattenspeicher zu überwachen und den Start von Prozessen zu erkennen. D...
-
Die Tiefen von Windows-I/O (Teil 4) — Cache-Manager: Wann erreicht Ihr WriteFile tatsächlich die Festplatte?
Teil 4 einer bebilderten Reihe über den Windows-Cache-Manager. Behandelt den als Dateizuordnung implementierten Cache, Read-Ahead und verzögertes Schreiben, ...
-
Die Tiefen von Windows-I/O (Teil 3) — I/O-Completion-Ports (IOCP) und der .NET-Thread-Pool: Der Keller unter async/await
Teil 3 einer Reihe, die I/O-Completion-Ports (IOCP) anhand von Diagrammen erklärt. Behandelt das Design, das Completion-Queue und Thread-Anzahl-Steuerung ver...
-
Wie lange lässt sich MSMQ noch nutzen? ── Die Migrationsentscheidung für eine Legacy-Queue, die nicht einmal „deprecated“ ist
MSMQ steht nicht auf Microsofts offiziellen Deprecated-Listen, doch System.Messaging existiert nur im .NET Framework und blockiert die Migration zu .NET. Die...
-
Die Tiefen von Windows I/O (Teil 2) — Synchrones und asynchrones I/O: Was OVERLAPPED wirklich bedeutet
Teil 2 einer Serie, die Windows' synchrones und asynchrones I/O (Overlapped I/O) anhand von Diagrammen erklärt. Wir stellen die Bedeutung von FILE_FLAG_OVERL...
-
Die Tiefen von Windows I/O (Teil 1) — Jedes Lesen und Schreiben wird zu einem IRP: Das Gesamtbild des I/O-Systems
Teil 1 einer Serie, die das Windows-I/O-System von Grund auf erklärt. Wir stellen den Namensraum des Object Managers, die drei Objektarten Treiber, Gerät und...
-
Was ist das TPM in Windows? — Eine bebilderte Einführung in den „Tresor, der Schlüssel nie herausgibt“ und das gemessene Starten
Eine bebilderte Erklärung des TPM: wie Schlüssel den Chip nie verlassen, PCRs und Measured Boot, wie BitLocker und Windows Hello es nutzen, die Unterschiede ...
-
Verwenden Sie den ausgelesenen Wert eines QR-Codes nie ungeprüft — Erfolgreiche Fehlerkorrektur garantiert nicht den Wert
Die Fehlerkorrektur von QR-Codes ist kein Mechanismus, der garantiert, dass der Wert korrekt ist, sobald die Korrektur gelingt. Anhand von Beispielbildern un...
-
USB-Geräte aus einer Windows-App ansprechen — Die Wahl zwischen virtual COM, HID, WinUSB und Hersteller-SDKs
Ein Vergleich von vier Wegen, Geräte und USB-Hardware aus einer Windows-Anwendung anzusteuern: virtueller COM-Port, HID, WinUSB und Hersteller-SDKs. Behandel...
-
Wie man eine exe oder DLL austauscht, die gerade verwendet wird — Restart Manager und das Problem „Datei wird verwendet“ beim automatischen Update
Warum lässt sich eine exe oder DLL, die gerade verwendet wird, nicht austauschen? Dieser Artikel behandelt die Sperrung laufender Dateien und die Tatsache, d...
-
Registry-32-Bit/64-Bit-Umleitung und Virtualisierungsfallen — Wow6432Node und das Problem „Der Wert, den ich geschrieben habe, ist nicht da“
Wie die Schreibvorgänge einer 32-Bit-App nach HKLM\Software zu Wow6432Node umgeleitet werden, unter welchen Bedingungen die UAC-Virtualisierung sie in den Vi...
-
Code-Design für Geschäftssysteme — Produkt- und Kundencodes festlegen, und Prüfziffern
Ein praxisnaher Leitfaden zur Festlegung des Codesystems eines Geschäftssystems, einschließlich Produkt- und Kundencodes. Behandelt eine Entscheidungstabelle...
-
Abwärtskompatibilität von DLL- und COM-Schnittstellen — Eine Entscheidungstabelle dafür, welche Änderungen Aufrufer brechen
Welche Änderungen an einer DLL oder COM-Komponente brechen tatsächlich deren Aufrufer? Wir legen die drei Ebenen der Kompatibilität dar — binär, Quellcode un...
-
Das Datenbankschema Ihrer Business-Anwendung versionieren ── Migrationspraxis gegen „jeder Kunde hat eine andere Datenbank“
Ein praktischer Leitfaden zur Versionierung des Datenbankschemas einer Business-Anwendung, deren Datenbanken über zahlreiche Kundenstandorte verstreut sind. ...
-
CI/CD für WinForms-/WPF-Anwendungen in der Praxis ── Vom Build über die Signierung bis zur Distribution mit GitHub Actions automatisieren
Ein praktischer Leitfaden zur Einrichtung von CI/CD für WinForms-/WPF-Anwendungen mit GitHub Actions. Behandelt eine minimale YAML für Build+Test auf windows...
-
Eine Legacy-Business-Anwendung ohne Tests sicher verändern ── Charakterisierungstests und Refactoring in der Praxis
Um eine Business-Anwendung ohne Tests sicher zu verändern, erklärt dieser Artikel anhand von C#-Beispielen das Vorgehen bei einem Charakterisierungstest (der...
-
Wenn die eigene Windows-App als Virus gemeldet wird — Umgang mit Fehlalarmen von Microsoft Defender und den Auswirkungen auf die Leistung
Wir legen dar, wie richtig reagiert wird, wenn Microsoft Defender die eigene Windows-App als Malware meldet: wie moderne Antivirus-Erkennung tatsächlich funk...
-
Energiesparmodus, Ruhezustand, Modern Standby und lang laufende Anwendungen ── Design gegen „über Nacht stehengeblieben“
Warum eine lang laufende Windows-Anwendung morgens beim Nachsehen „stehengeblieben“ sein kann, aufgearbeitet anhand der Unterschiede zwischen S3-Energiesparm...
-
Laufen Business-Anwendungen unter Windows on Arm? ── Die Realität von x64-Emulation (Prism) und nativen DLLs/COM
Eine Antwort für Entwicklerinnen, Entwickler und IT-Verantwortliche auf die Frage „Läuft unsere Business-Anwendung unter Windows on Arm?“. Behandelt, wie die...
-
MAX_PATH und die Fallstricke von Windows-Pfaden und Dateinamen ── Das 260-Zeichen-Limit, reservierte Namen, abschließende Punkte und Groß-/Kleinschreibung
Ein Überblick über die Pfad- und Dateinamensbeschränkungen hinter dem klassischen Fehler „Datei nicht gefunden“. Behandelt werden die Zusammensetzung von MAX...
-
Die Fallstricke von Netzlaufwerken und UNC-Pfaden ── Fileserver (Freigabeordner) in Business-Anwendungen richtig einsetzen
Dieser Artikel ordnet die klassischen Probleme, die auftreten, wenn eine Business-Anwendung in einen Freigabeordner schreibt oder ihn überwacht: warum ein La...
-
Infobereich-Symbole und Toast-Benachrichtigungen in Windows-Apps — Fallstricke von NotifyIcon und die richtige AppNotification-Wahl
Ein praktischer Leitfaden dafür, eine geschäftliche Windows-Anwendung im Infobereich (System Tray) resident zu halten und den Benutzer über Toast-Benachricht...
-
Wie lange laufen VB6-Anwendungen noch? — Support-Status der Laufzeitumgebung und ein praxisnaher Weg zur .NET-Migration
Wie lange laufen VB6-Anwendungen noch? Dieser Artikel ordnet die Asymmetrie zwischen der Support-Richtlinie für die VB6-Laufzeitumgebung (auch unter Windows ...
-
Japanische Ära, Feiertage und Abrechnungsstichtage in Business-Apps — Übergangsresistentes Design, JapaneseCalendar und Werktagsberechnung in der Praxis
Auf einem Beleg muss „Reiwa 8“ stehen, die Werktagsberechnung muss Feiertage ausschließen, die Zahlung ist am letzten Werktag des Folgemonats nach Abrechnung...
-
Mehrsprachigkeit für WinForms/WPF-Anwendungen ── resx, Satelliten-Assemblies und Kulturumschaltung in der Praxis
Dieser Artikel behandelt die Mehrsprachigkeit von Windows-Desktopanwendungen aus Praxissicht: den Unterschied zwischen CurrentCulture und CurrentUICulture, d...
-
CSV ist nicht „nur Text“ ── CSV in der Praxis für C#-Business-Anwendungen (Zeichenkodierung, Excel-Kompatibilität, Schutz vor Injection)
Typische Fehlerquellen bei der CSV-Ein-/Ausgabe in Business-Anwendungen – selbstgebautes Parsen mit Split(','), Excel-Zeichensalat bei UTF-8 ohne BOM, verlor...
-
HttpClient nicht mit using umschließen ── HTTP-Kommunikation in C#-Geschäftsanwendungen (Erzeugungsmuster, Timeouts, Retries)
Wer HttpClient in C# bei jeder Anfrage neu mit using erzeugt, riskiert eine Socket-Erschöpfung; wer ihn einfach static macht, folgt DNS-Änderungen nicht mehr...
-
Mit PerfView und dotnet-trace die Ursache von „langsam“ finden — Praxis-Einstieg in die .NET-Performanceanalyse
Wenn eine Geschäftsanwendung langsam ist, die CPU auslastet oder gelegentlich einfriert: Welches Werkzeug zeigt was? Dieser Beitrag ordnet die Aufgaben von P...
-
Einführung in Windows-Ereignisprotokoll und ETW ── Protokolle von Geschäftsanwendungen in die Standardmechanismen des Betriebssystems einordnen
Verlassen Sie sich bei den Protokollen einer Windows-Geschäftsanwendung nur auf Dateien? Ereignisprotokoll und ETW bilden eine eigene Ebene, die Betriebsteam...
-
Nicht nur appsettings.json ── Praxisleitfaden für die Konfigurationsverwaltung in Windows-Geschäftsanwendungen (Umgebungen, Geheimnisse und Speicherorte)
Ein praxisnaher Leitfaden zur Konfigurationsverwaltung in Windows-Geschäftsanwendungen: Schichtung von appsettings.json, Einsatz von IConfiguration sowie IOp...
-
Drucken und PDF-Ausgabe in Windows-Geschäftsanwendungen — System.Drawing.Printing, WPF und Berichtsbibliotheken richtig einsetzen
Dieser Beitrag ordnet WinForms-Druck mit PrintDocument, WPF-Druck mit FlowDocument und FixedDocument sowie Möglichkeiten zur PDF-Ausgabe in einer Entscheidun...
-
Das OSI-Modell wirklich verstehen — eine einzelne HTTP-Anfrage in ihre sieben Schichten zerlegen
Wir verstehen das OSI-Modell anhand der Praxis statt durch Auswendiglernen. In C# bauen wir den Ethernet-Frame, der eine einzelne HTTP-GET-Anfrage trägt, zus...
-
Wie man die Windows-Sitzungsisolierung versteht — Session 0, RDP und die gleichzeitige Nutzung durch mehrere Benutzer
Dieser Artikel erklärt das Konzept der Windows-„Sitzung“ (Session), das Windows-App-Entwickler immer wieder verwirrt. Er behandelt, warum die Session-0-Isoli...
-
Absturz-Dumps mit WinDbg + SOS lesen — Ein praxistauglicher Leitfaden zur Analyse nach der Sammlung
Erklärt, wie man einen gesammelten Windows-Absturz-Dump tatsächlich mit WinDbg und der SOS-Erweiterung liest. Behandelt die Konfiguration des Symbolpfads, da...
-
Mehrfachstarts einer Windows-App verhindern — Benannte Mutexe und das Aktivieren des vorhandenen Fensters beim zweiten Start
Dieser Artikel ordnet die klassische Anforderung für Business-Windows-Apps – „dieselbe App darf nicht zweimal starten“ – rund um einen benannten Mutex. Wir b...
-
Win32-APIs sicher aus C# aufrufen — Ein praxistauglicher P/Invoke-Leitfaden (DllImport / LibraryImport / CsWin32)
Eine praxisnahe Übersicht darüber, worauf beim Aufruf von Win32-APIs und nativen DLLs aus C# über P/Invoke zu achten ist. Behandelt die Unterschiede zwischen...
-
Entra-ID-Authentifizierung in WinForms/WPF-Apps integrieren — Eine praxistaugliche Architektur mit MSAL.NET und dem WAM-Broker
Ein praxisnaher Blick auf die Integration der Entra-ID-Authentifizierung (früher Azure AD) in WinForms/WPF-Desktop-Apps: das Public-Client-Denken, wo ROPC he...
-
Datum, Uhrzeit und Zeitzonen in Business-Apps — Von den Fallstricken von DateTime über das UTC-Speicherprinzip bis zum Testdesign
Zeitstempel verschieben sich nach einer Servermigration um neun Stunden; nur beim Auslandsbüro springt das Datum auf den Vortag zurück – wir verfolgen Datums...
-
UI-Automatisierungstests für Windows-Desktop-Apps — Wie UI Automation funktioniert und wie man mit FlaUI robuste Tests baut
Ein praxisnaher Leitfaden zu UI-Automatisierungstests für WinForms-/WPF-Apps, ausgehend davon, wie Windows UI Automation selbst funktioniert (der Baum, Autom...
-
High-DPI-Unterstützung in WPF — Warum es trotz „eigentlich DPI-bewusst“ immer noch verschwimmt und durchblutet, und wie Sie es beheben
WPF layoutet die UI in DIPs (1/96 Zoll) und ist von Anfang an System DPI Aware, doch das Verschieben eines Fensters auf einen Monitor mit anderer DPI lässt d...
-
Warum EXCEL.EXE-Prozesse nach C#-Excel-COM-Automatisierung bestehen bleiben — Muster zur Referenzfreigabe und die Ersatzentscheidung
Ein praxisnaher Blick darauf, warum EXCEL.EXE-Prozesse nach der Automatisierung von Excel aus C# über Microsoft.Office.Interop.Excel bestehen bleiben, erklär...
-
High-DPI-Unterstützung in WinForms — Warum die UI auf 4K-Monitoren verschwimmt oder zerbricht, und wie Sie das praktisch beheben
Dieser Artikel ordnet die Gründe, warum WinForms-Apps auf 4K-Monitoren und bei 150 % Skalierung verschwimmen oder ihr Layout zerbricht, ausgehend von DPI-Vir...
-
Windows-Prozesskommunikation richtig wählen ── Eine Entscheidungstabelle für Named Pipes / TCP / gRPC / Shared Memory / COM
Wie wählt man den richtigen Weg, damit Windows-Anwendungen miteinander sprechen? Dieser Artikel ordnet Named Pipes, lokales TCP, gRPC, Shared Memory, dateiba...
-
SQLite aus C# in Business-Apps nutzen — WAL-Modus, exklusive Sperren, Schutz vor Datenbankbeschädigung und wann sich EF Core lohnt
Ein praxisnaher Überblick zur Einbindung von SQLite in eine Windows-Businessanwendung mit Microsoft.Data.Sqlite: Verbindungszeichenfolgen und Pooling, die Fu...
-
Windows-Dienste erstellen und betreiben ── Von der Abgrenzung zur Aufgabenplanung bis zur Umwandlung eines BackgroundService in einen Dienst
Sollte ein Hintergrundprozess ein Windows-Dienst werden, oder reicht die Aufgabenplanung? Dieser Artikel ordnet die Entscheidungstabelle, den Aufbau eines Di...
-
Wie Windows-Apps lokale Daten speichern sollten — Entscheidungstabelle für SQLite / JSON / Registrierung / Access
Wo und womit sollte eine Windows-Desktopanwendung ihre Daten speichern? Dieser Artikel ordnet die Wahl zwischen AppData und ProgramData sowie die Stärken und...
-
Was ist eine PDB (Program Database)? — Debugging-Informationen, Symbole und Source Link verstehen
Was eine PDB (Program Database) ist, was darin enthalten ist und was nicht, sowie der Zusammenhang mit Debug/Release, Portable PDB, Source Link, Symbolserver...
-
Was ist Roslyn? — C#-Code aus der Sicht des Compilers lesen, korrigieren und generieren
Ein Überblick über Roslyn (die .NET Compiler Platform): Syntax Tree, SemanticModel, Workspace, Analyzer, Source Generator sowie deren Einsatzmöglichkeiten un...
-
Windows-App-Outsourcing und Auftragsentwicklung: Was Sie vor der Beauftragung klären sollten
Bevor Sie die Entwicklung einer Windows-App outsourcen oder in Auftrag geben, sollten Sie folgende Punkte klären: Überarbeitung bestehender Software, Gerätei...
-
Algebraische Datentypen in .NET Framework / .NET verwenden — Zustände und Ergebnisse mit Typen entwerfen
Wie sich algebraische Datentypen – insbesondere Summentypen und diskriminierte Vereinigungen – in .NET Framework und .NET einsetzen lassen und welchen Nutzen...
-
Windows-Identitätswechseltoken richtig handhaben ── Rechte pro Thread ausleihen und sicher zurückgeben
Ein praxisorientierter Überblick über Windows-Identitätswechseltoken: Zugriffstoken, primäre Token, Thread-Token, Identitätswechselebenen, RevertToSelf und W...
-
Der Irrglaube, man könne über TCP pro Send genau eine Einheit empfangen ── Empfangslogik entwerfen, die es als Bytestrom behandelt
Wer bei TCP-Kommunikation davon ausgeht, in denselben Einheiten empfangen zu können, in denen mit Send oder Write gesendet wurde, riskiert Fragmentierung, Ve...
-
GC-Wartezeit von einem Speicherleck in .NET unterscheiden — Ein praktisches Verfahren, um wachsenden Speicher zu beobachten, zu vergleichen und zu belegen
Ein Verfahren, um bei einer .NET-Anwendung zu klären, ob wachsender Speicherverbrauch nur auf die Garbage Collection wartet oder tatsächlich ein Speicherleck...
-
PowerShell aus C# (CSharp) ausführen und die Ergebnisse als Objekte empfangen
Wie man PowerShell aus C# startet und das Ergebnis nicht als Zeichenkette, sondern als PSObject empfängt – ein praxisorientierter Überblick über das PowerShe...
-
Eine Checkliste für den sicheren Umgang mit Kindprozessen in Windows-Apps
Beim sicheren Umgang mit Kindprozessen in Windows-Apps zählt weniger die Start-API als der Besitz des Prozessbaums und das Design der Beendigung. Eine Einord...
-
Fallstricke bei seriellen Kommunikationsanwendungen — von der Wiederverbindung bis zum Log-Design
Die Fallstricke serieller Kommunikationsanwendungen, die man bei Gerätekopplung und Messgerätesteuerung vermeiden möchte — aus praktischer Sicht zu Framing, ...
-
Wie Sie zwischen WinForms, WPF und WinUI wählen - Entscheidungstabelle für die Praxis
Wie Sie zwischen WinForms, WPF und WinUI wählen: eine Einordnung nach Neuentwicklung, Altbestand, Distribution, UI-Ausdruckskraft und Teamstruktur.
-
Fallstricke bei Shared Memory und Best Practices für die Praxis
Wir ordnen die Fallstricke beim praktischen Einsatz von Shared Memory und ein Design ein, das die Unfallrate senkt – von Synchronisation über Sichtbarkeit un...
-
Wie man die Ausführungsgeschwindigkeit von C#, C++, Java und Go fair vergleicht
Wie man die Ausführungsgeschwindigkeit von C#, C++, Java und Go fair vergleicht: Messdesign, Warm-up, Fixierung der Umgebung, Auswertung der Statistik und ko...
-
.NET 8-DLL typisiert aus VBA verwenden - COM-Freigabe und dscom-TLB
Wir fassen zusammen, wie Sie eine .NET 8-Klassenbibliothek als COM freigeben, mit dscom eine TLB erzeugen und sie aus VBA per früher Bindung (early binding) ...
-
Checkliste vor der Migration von .NET Framework zu .NET
Eine praxisnahe Checkliste für die Zeit vor der Migration von .NET Framework zu .NET: Projekttypen, nicht unterstützte Technologien, NuGet-Abhängigkeiten, SD...
-
Was ist der .NET Generic Host? - Das Fundament für DI, Konfiguration und Logging
Wir ordnen die Rolle des Generic Host anhand seiner Beziehung zu DI, Konfiguration, Logging, IHostedService und BackgroundService ein und fassen aus der Prax...
-
Was ist .NET Native AOT? - Der Unterschied zu JIT und Trimming
Wir ordnen ein, was Native AOT ist, anhand der Unterschiede zu JIT, ReadyToRun, self-contained, single-file, trimming und Source Generators, und fassen aus d...
-
Die richtige Wahl unter .NETs drei Timern – PeriodicTimer/Timer/DispatcherTimer
Die Unterschiede zwischen PeriodicTimer, System.Threading.Timer und DispatcherTimer – und wie Sie sie für async-Verarbeitung, ThreadPool-Callbacks und WPF-UI...
-
Eine C# Native AOT DLL aus C/C++ aufrufen
Wie man eine C#-Klassenbibliothek mit Native AOT als native DLL veröffentlicht und Einstiegspunkte mit UnmanagedCallersOnly aus C/C++ aufruft – Einsatzbereic...
-
Warum .NET Generic Host und BackgroundService in Desktop-Apps verwenden
Wie sich Generic Host und BackgroundService nutzen lassen, um Start, periodische Verarbeitung, Beendigung, Logging, Konfiguration und DI in Windows-Tools und...
-
WPF/WinForms: async und der UI-Thread auf einem Blatt
Ordnet für WPF / WinForms, wohin await zurückkehrt, sowie die typischen Stolperstellen bei Dispatcher / Invoke, ConfigureAwait(false) und .Result / .Wait().
-
Praxisleitfaden für FileSystemWatcher - Umgang mit verpassten und doppelten Ereignissen
Wir ordnen die Verwendung von FileSystemWatcher und ihre Fallstricke entlang von verpassten Ereignissen, doppelten Benachrichtigungen, Fallen bei der Abschlu...
-
C# async/await-Praxis-Entscheidungstabelle – Task.Run und ConfigureAwait
Dieser Artikel ordnet die Best Practices für C# async/await – I/O-Wartezeiten, CPU-Berechnungen, Task.Run, ConfigureAwait(false) und fire-and-forget – anhand...
-
Native DLLs aus C# aufrufen: C++/CLI-Wrapper vs. P/Invoke
Wenn C# native DLLs verwendet, unterscheidet dieser Artikel, wann P/Invoke ausreicht und wann sich ein C++/CLI-Wrapper lohnt – anhand von Besitzverhältnissen...