Windows 8 zurücksetzen

Schneller als gedacht ist mein Windows 8 System unbrauchbar langsam geworden. Möglicherweise liegt es an den 3 Visual Studio-Installationen (2010, 2012, 2013), möglicherweise auch an anderen Programmen.

Ich habe mal die Startzeiten mit den TuneUp-Utilities analysiert, konnte aber trotzdem Deinstallation einiger Programme kaum eine Besserung feststellen.

Windows 8 hat ja eine eingebaut Unterstützung zum Zurücksetzen des gesamten Systems oder „Auffrischen“.

Hier eine kleine Anleitung zum Auffinden der System-Wiederherstellung:

Zuerst einmal geht man auf den Windows 8 Start-Bildschirm. Dort öffnet man dann die Charms-Leiste beispielsweise durch ein Wischen vom rechten Bildrand:

Nach dem Auswählen der Einstellungen wählt man dort „PC-Einstellungen ändern“:

In den PC-Einstellungen kann man neben dem Umstellen des Profilfotos, des Anmelde-Bildschirms usw. auch das System Wiederherstellen:

 

Über den Menüpunkt „Alles entfernen und Windows neu installieren“ wird das System auf die Werkseinstellungen zurückgesetzt:

Mein nächster Blog-Artikel wird dann mit frisch aufgesetztem System geschrieben 🙂

Domain-Umzug

Nachdem sich über Jahre hinweg immer mehrere Domains für unterschiedliche Projekte(-Ideen) angesammelt haben, wurde es endlich mal Zeit zur Konsolidierung.

So habe ich beispielsweise meine Domains bei 1&1, Host-Europe und All-Inkl. gehabt. Diese habe ich teilweise ersatzlos gestrichen oder umgezogen. Da ich mit dem Preis-/Leistungsverhältnis von 1&1 nicht mehr zufrieden war, habe ich nun alle Domains zu Host-Europe umgezogen.

KK-Antrag

Früher habe ich mal eine Domain über einen sogenannten KK-Antrag umgezogen – das war vielleicht ein Krampf!

KK steht für „Konnektivitäts-Koordination“. Damit wird in einem formalen Ablauf der Provider- bzw. Registrar-Wechsel geregelt. Neben dem Antragsteller, d.h. gegebenenfalls neuen Domaininhaber, sind an dem KK-Prozess, der alte und neue Provider und der alte Domaininhaber beteiligt. Damit sich Verzögerungen bei der Domainübertragung und dem Aktualisieren der DNS-Server nicht ergeben, sollte die Kündigung beim alten Provider und die Bestellung beim neuen Provider sich um 1-2 Wochen überlagern. Andernfalls kann es sogar vorkommen, dass die Seite eine Weile nicht mehr erreichbar ist.

Mit dieser Erfahrung im Hinterkopf habe ich den Umzug lange vor mich hergeschoben. Genau diese Nicht-Erreichbarkeit war mir damals zum Verhängnis geworden.

Approve Move

Neu ist jedoch mittlerweile die Möglichkeit, den Umzug vollelektronisch durchzuführen! 1&1 als auch Host-Europe unterstützen Approve Move.

Das geht so: Beim alten Provider beantrag mal den Domain-Wechsel und erhält einen Auth-Code für Approve Move.

Anschließend erscheint der Auth-Code auf der Domain-Info Seite:

Nach dem Wunsch, die Domain zum neuen Provider (Host-Europe) umzuziehen, erhält man eine E-Mail mit dem Link auf die Approve Move Seite:

Nach dem Klick auf den Link öffnet sich die Approve Move Seite:

Hier gibt man dann geht Code ein, den man vom alten Provider erhalten hat. Nach Bestätigung erhalt man gleich die Statusmeldung:

Backup

E-Mails

Vor einem Umzug sollte man sich aber Gedanken machen, wie man die Daten von einem Server zu einem anderen Server umziehen kann.

Da ich IMAP-Konten nutze, und E-Mails nicht mehr per POP3 abrufe, verbleiben alle E-Mails beim Provider. Daher muss man einen Weg finden, die E-Mails zu sichern um sie später wiederherstellen zu können.

Für IMAP habe ich MailStore verwendet:

MailStore ist für den privaten Gebrauch kostenlos und sichert zuverlässig die E-Mails.

Alternativ kann ich auch das kostenlose IMAPsize empfehlen:

Die UI ist etwas veraltet und einige Buttons erscheinen erst nachdem man mit der Maus drüber fährt. Dafür verrichtet es wirklich zuverlässige Dienste.

WebSpace

Die Inhalte auf meiner Webseite habe ich mit einem FTP-Programm gesichert. Dazu habe ich die Inhalte heruntergeladen und lokal abgelegt. Die mySQL-Datenbanken habe ich mithilfe von phpmyAdmin gesichert. Es gab nur ein kleines Problem mit der Größe der SQL-Sicherheit bei der Wiederherstellung. Ein einfaches Aufsplitten der SQL-Datei hat das Problem jedoch behoben.

Dienstleister

Wem das zu kompliziert ist, kann auch auf Dienstleister zurückgreifen, die den Webspace und E-Mails dann sichern und an der neuen Stelle wiederherstellen.

Host-Europe bietet beispielsweise Audriga an: https://www.audriga.com/

Verwenden von Feature-Toggle-Patterns, um der Merge-Hölle zu entgehen

Die Merge-Hölle

Bei der professionellen Software-Entwicklung ist eine Versionsverwaltung nicht mehr wegzudenken. Fast alle Versionskontroll-Systeme unterstützen Branches, in denen man beispielsweise die Entwicklung von Features vornimmt, um den Code im Hauptzweig (trunk) nicht zu beeinflussen und unabhängig das Feature entwickeln zu können:

Hier ist ein Beispiel dafür, wie ich bisher die Produkt- / Projektentwicklung kannte: Nachdem eine Produkt-Version released wurde, werden Feature-Branches angelegt, um die Features unabhängig vom Entwicklungs-Branch zu entwickeln. Das hat sehr viele Vorteile: Beispielsweise könnte sich das Produktmanagement entscheiden, ein Feature erst in einer späteren Version zu integrieren, falls sich die Entwicklung verzögern sollte. Zudem kann die Entwicklung eines Features unabhängig von der Entwicklung anderer Features stattfinden.

Wer so arbeitet, kennt auch den Begriff der „Merge-Hölle“. Diese tritt nämlich dann auf, wenn die Entwicklungs-Branches für unterschiedliche Features und der trunk im Code zu weit auseinander laufen oder Code in der gleichen Datei mehrfach umgebaut wurde. Dann nämlich funktioniert der Merge nicht mehr so einfach:

Wenn es sich dabei nur um eine Code-Datei handelt, ist das zwar ärgerlich, aber noch akzeptabel. Die Merge-Hölle ergibt sich, wenn sehr viele Dateien in unterschiedlichen Entwicklungszweigen verändert wurden und vielleicht sogar noch neue Dateien mit gleichem Namen angelegt wurden. Dann funktioniert in der Regel der Merge nicht mehr und man verbringt Stunden und Tage damit, die Konflikte aufzulösen und hofft, dass danach noch alles so funktioniert, wie es man gedacht war.

Weiterhin kann es passieren, dass Probleme, die in einem Branch gefixt wurden, durch den Merge wieder verloren gehen.

Das Feature Toggle Pattern

Hier kann das Feature-Toggle-Pattern Abhilfe schaffen:

Anstelle der Verwendung unterschiedlicher Entwicklungs-Branches findet sie Entwicklung immer auf dem gleichen Branch (trunk) statt. Martin Fowler hat in seinem Artikel „Feature Toggle“ (http://martinfowler.com/bliki/FeatureToggle.html) detailliert beschrieben, wie das Feature-Toggle Pattern funktioniert.

Damit ist es möglich, auch noch „experimentellen“, noch nicht fertigen Code in Produktivsystemen zu releasen. Man muss quasi nur sicherstellen, dass der unfertige Code nie ausgeführt wird. Dadurch arbeitet jeder immer auf dem aktuellen Entwicklungszweig und kann Änderungen an der Codebasis registrieren und darauf reagieren.

Doch wie setzt man das Feature Toggle Pattern in der Praxis um?

Wichtig ist, dass die Stelle, an der das Feature aktiviert bzw. deaktiviert wird, später einfach zu finden und zu entfernen ist, wenn das Feature „produktiv“ geschaltet wird. Wenn ein Schalter nicht entfernt wird, bürdet man sich unnötigerweise „technische Schulden“ auf. Am einfachsten geht das beispielsweise mit einer (abstrakten) Klasse, die eine Property „IsEnabled“ zur Verfügung stellt und von der alle Feature Schalter erben:

internal
abstract
class
FeatureSwitch

{


public
abstract
bool
IsEnabled { get; set; }

}

 

Von dieser Klasse FeatureSwitch leitet man nun einfach einen Schalter für das eigene Feature („MyFeature“) ab:

internal
class
MyFeatureSwitch : FeatureSwitch

{


private
bool
_isEnabled = true;

 


public
override
bool
IsEnabled

{


get { return
_isEnabled; }


set { _isEnabled = value; }

}

}

Hier wird das Feature by-default eingeschaltet (_inEnabled = true). Genauso einfach kann das Feature auch wieder deaktiviert werden.

Im Code verwendet man den Schalter dann so:

MyFeatureSwitch myFeature = new
MyFeatureSwitch();

 

if (myFeature.IsEnabled)

{


// implement feature code here …

}

else

{

 

}

 

Man instanziiert einfach an einer beliebigen Stelle, an der das Feature verwendet wird, den FeatureSwitch. Dort prüft man dann über die Eigenschaft „IsEnabled“, ob das Feature „scharf geschaltet“ ist und implementiert den Code so, als wenn das Feature produktiv verwendet wird.

Alternativ zur abstrakten Basisklasse „FeatureSwitch“ könnte man auch einen ConfigSwitch verwenden wie ich es beispielsweise im Blog von Federik Normen gesehen habe: http://weblogs.asp.net/fredriknormen/archive/2013/09/28/merge-hell-and-feature-toggle.aspx

Word 2013 als Blogging Tool

Vor Kurzem habe ich im Blog von Mario Binder gelesen, dass man Microsoft Word 2013 als Blogging Tool verwenden kann.

Da ich bisher Microsoft LiveWriter verwendet habe, wollte ich Word auch mal eine Chance geben.

 

Nach dem Herunterladen der Vorlage „Blog-Beitrag“ kann das Blog-Konto konfiguriert werden:

Da ich mit WordPress arbeite, habe ich die URL meines Blogs angegeben und die Datei xmlrpc.php angehängt. Nach Eingabe von Benutzername und Kennwort erscheint die Oberfläche von Word 2013 leicht modifiziert und für das Bloggen optimiert:

Bisher funktioniert es ganz gut. Einzig die Code-Addins in LiveWriter vermisse ich in Word. Vielleicht werde ich für den Fall, dass ich Code im Blog-Post benötige, wieder auf LiveWriter ausweichen.

ProgressBar für die Console

Für ein kleines Projekt brauchte ich einen Fortschrittsbalken für eine Kommandozeilen-Applikation. Ich war erstaunt, wie einfach das funktionierte und möchte meine Erfahrungen hier teilen.

Hier schon mal ein Blick auf das Endergebnis:

image

Zuerst einmal müssen die Begrenzungen des Fortschrittsbalken gezeichnet werden.

Um den Cursor zu positionieren, kann auf die statischen Eigenschaften CursorTop und CursorLeft der Console zurückgegriffen werden:

CursorTopLeft

Hier der Code zum Erstellen der Begrenzungen des Fortschrittsbalkens:

// Create boundaries for progress bar
Console.CursorTop = topOffset;
Console.CursorLeft = leftOffset;
Console.Write("[");
Console.CursorLeft = length;
Console.Write("]");

Das sieht dann erstmal so aus:

image

 

Dann füllen wir die Begrenzungen mit dem aktuellen Fortschritt:

// Calculate size of one percent element
float progressElementSize = ((float)length – leftOffset – 2) / total;

// Create progress content
int position = 1;
Console.CursorLeft = position;
for (int i = leftOffset; i < progressElementSize * progress; i++)
{
    Console.BackgroundColor = progressColor;
    Console.CursorLeft = position++;
    Console.Write(" ");
}
Console.BackgroundColor = ConsoleColor.Black;

Und das sieht dann so aus:

image

Ganz wichtig: In der letzten Zeile wird die Farbe wieder auf schwarz gesetzt, da sonst die aktuelle Schriftfarbe auf die des Fortschritts gesetzt wird.

Abschließend will ich noch den aktuellen Fortschritt prozentual anzeigen:

// Write progress message
Console.CursorLeft = length + 2;
int result = progress * 100 / total;
Console.Write(customProgressMessage ?? (result + "%").PadLeft(4));

Das .PadLeft(4) habe ich angehängt, damit der String nicht springt, wenn von 9% auf 10% und von 99% auf 100% gesprungen wird.

Viel Spaß damit Smiley

Download: http://sdrv.ms/10HH7Pk

Die DotNet Cologne 2013 (#dnc13)

2013-05-03 09.17.38Dieses Jahr war die dotnet cologne 2013 eine besondere Konferenz für mich: ich habe erstmals auf einer Entwickler-Konferenz einen Vortrag gehalten. Das Thema war “Einstieg in das Windows Installer XML (WiX) Toolset”.

Der Raum war wirklich gut gefüllt und es hat mir wirklich viel Spaß gemacht. Auch Dank der freundlichen Unterstützung meines überraschenden  “Co-Referenten” Sebastian Seidel zu den Fragen während des Vortrags war die Session aus meiner Sicht ein Erfolg.

Die Folien habe ich auf SlideShare hochgeladen:
http://de.slideshare.net/minibrain/einstieg-in-das-windows-installer-xml-wix-toolset

Die gezeigten Codebeispiele liegen auf github:
https://github.com/minibrain/DNC13

Nach dem Vortrag gab es noch zahlreiche interessante Diskussionen zum Thema Windows Installer, MSI und Windows Installer XML Toolset. Vielen Dank an dieser Stelle nochmals an alle Teilnehmer!

Während meines Vortrags gab es noch weitere Vorträge, die mich sehr interessiert hätten. “Hackers Reverse Engineering Uncovered” von Rüdiger Kügler war einer davon. Glücklicherweise hat sich im Gespräch später am Stand von WiBu Systems ergeben, dass demnächst der Vortrag in einem webcast wiederholt wird. Das werde ich mir dieses Mal nicht entgehen lassen Smiley

Die Lunch-Session und die folgende Session stand ganz im Zeichen von Usability und User Experience. War wirklich mal interessant, einen Einblick in einen Entwicklungsprozess zu bekommen, der einen Focus auch auf Usability hat. Der Vortrag “WPF UI Development Best Practices” drehte sich im ersten Teil auch um Usability und besprach dann WPF Best Practices natürlich mit Focus auf Usability!

Timur Zanagar hat dann im Vortrag zu “Mobile .NET Entwicklung mit Xamarin 2.0” die Entwicklung mobiler Applikationen für iOS, Android, Windows Phone und MacOS unter Xamarin 2.0 gezeigt. Auch hier haben die zahlreichen Diskussionen zu einer wirklich guten Atmosphäre geführt. Hier muss ich unbedingt mal ein wenig Zeit investieren und eine eigene Android App basteln Smiley

Den Abschluss meiner .NET Cologne 2013 machte der Vortrag von Dennis Traub “Strategischer Anwendungsentwurf mit Domain-Driven Design”. Wirklich interessant, aber schon etwas schwere Kost zum Abschluss.

Alles in allem war diese dotnet cologne 2013 für mich noch etwas besser als die letztes Jahr. Die Organisatoren Albert Weinert, Roland Weigelt, Stefan Lange und Melanie Eibl haben wieder einmal eine tolle Konferenz organisiert. Dankeschön nochmals an dieser Stelle!

Drag&Drop: FileDrop aus eigener Applikation heraus

Möchte man per Drag&Drop Dateien aus dem Windows Explorer in die eigene Applikation hereinziehen, so ist das kein Problem:

  • Platzieren eines Controls, auf dem die Datei(en) per Drag&Drop gezogen werden sollen
  • Eigenschaft “AllowDrop” des Controls auf “True” setzen:

image

  • Registrieren auf die Events DragEnter und DragDrop:

image

  • Im EventHandler für DragEnter prüfen, ob es sich im Dateien und den Mauszeiger anpassen handelt:

if (e.Data.GetDataPresent("FileDrop"))
{
    e.Effect = DragDropEffects.Copy;
}

  • Im EventHandler für DragDrop die Datei auslesen (und in einer TextBox darstellen)

string[] files = e.Data.GetData("FileDrop") as string[];
if (files == null) return;

_txtContent.Text = File.ReadAllText(files[0]);

Das Resultat kann dann so aussehen:

image

Anders herum ist es jedoch etwas schwieriger: Wie kann ich Daten beispielsweise aus einer TextBox per Drag&Drop in eine Datei in den Windows Explorer droppen?

Dazu muss man sich eines kleinen Tricks behelfen: Man muss ein FileDrop initiieren und die zu droppenden Daten in eine temporäre Datei kopieren. Der Dateiname der temporären Datei ist dann auch der Dateiname des Drop Targets. Hier ist eine kleine Schritt-für-Schritt Anleitung:

  • Registrieren auf das MouseDown Event als Initiator für die Drag&Drop Aktion:

image

  • Anlegen einer temporären Datei mit dem Inhalten, die in die zu droppende Datei geschrieben werden sollen. Wichtig: Der Dateiname ist auch der Dateiname der dort erstellt wird, wo die Datei im Explorer gedropped wird:

// Create temporary file name
string tempFile = Path.Combine(Path.GetTempPath(), "LoremIpsum.txt");

  • Inhalt in die temporäre Datei schreiben

// Write content to drop into the temporary file
File.WriteAllText(tempFile, _txtContent.Text);

  • Temporäre Date in ein string-Array verpacken (wird benötigt, da FileDrop ein string array erwartet):

// Create string-array for FileDrop operations
string[] files = new[] { tempFile };

  • DataObject erstellen und mit dem Format der Daten (“FileDrop”) und den Daten instanziieren:

// Create DataObject for "FileDrop" and add string[] with temporary file
DataObject dataObject = new DataObject("FileDrop", files);

  • DragDrop initiieren und dataObject übergeben:

// Initiate DragDrop operation
DoDragDrop(dataObject, DragDropEffects.All);

GitHub Repository mit PlasticSCM verwalten

Durch Zufall bin ich heute auf der Seite von CodeIce gelandet und habe gesehen, dass deren SCM (Software Configuration Management) System namens “Plastic SCM” auf mit Git Repositories auf GitHub, CodePlex & Co umgehen kann.

Da ich selbst an OpenSource Projekten auf GitHub und CodeProject arbeite, wollte ich mir das System mal genauer anschauen. Eine Lizenz für bis zu 15 Benutzer ist zudem kostenlos – was habe ich also schon verlieren? Zwinkerndes Smiley

 

Nachdem ich mir einen ersten Workspace eingerichtet habe, wollte ich mein GitHub Repository importieren bzw. synchronisieren. Dazu habe ich zuerst meine GitHub Projektseite geöffnet: https://github.com/minibrain/VisualStudioSetupProjectToWixConverter

image

Anschließend öffnet man in Plastic SCM den Eintrag “Branches” unter “Main actions”:

image

Als nächstes wählt man den Branch aus und klickt mit der rechten Maustaste darauf. Im Kontextmenü wählt man nun “Replication” und “Sync with Git …”.

Anschließend gibt man den Pfad zum Repository und die Login-Daten ein:

image

Nach einem Klick auf “Sync” wird damit begonnen, die Branches aus dem Git Repository zu importieren:

image

Nach einer kurzen Weile ist der Import dann abgeschlossen:

image

Nun kann man die Features von Plastic SCM nett verwenden. Beispielsweise kann der “Branch Explorer” dazu verwendet werden, alle Branches visuell darzustellen. Bei meinem kleinen Spielprojekt ist das ganze etwas witzlos, weil ich noch nicht weggebrancht habe:

image

Alle Dateien aus dem Verzeichnis zeigt die “Items”-Ansicht:

image

Alle Commits lassen sich unter der Rubrik “Changesets” im Tab “Main actions” auflisten, durchsuchen und exportieren:

image

Die Integration in Visual Studio ist auch dabei:

image

Viele der gezeigten Features sind auch im Visual Studio verfügbar.

Alls in allem ein wirklich gutes Tool. Als nächstes werde ich versuchen, mein CodePlex Repository zu synchronisieren. Mal schauen, ob das auch so einfach geht Smiley

Hier kann man das Tool kostenlos herunterladen:
http://www.plasticscm.com/

Spezielle Seite zum neuen Feature “GitSync”:
http://www.plasticscm.com/gitsync/index.html

Blog-Eintrag zum Sync von GitHub Repos: http://codicesoftware.blogspot.com/2013/01/using-plastic-scm-to-sync-with-junior.html

Windows 7 vom USB Stick installieren

Mein alter Rechner (Dell Inspiron 1720) hat zwar ein DVD-Laufwerk, doch meine Windows 7 DVD mag er nicht mehr lesen. Nachdem die Windows 8 RC-Version dort abgelaufen ist, will ich wieder Windows 7 installieren.

Zum Glück gibt es dafür ein Tool von Microsoft namens “Windows 7 USB/DVD Download Tool”, das mir die umständliche Arbeit abnimmt, einen USB-Stick bootfähig zu machen und die DVD-Inhalte draufzuziehen.

Schritt 1: Auswahl der ISO-Datei:

image

Wer die DVD noch nicht als ISO-Datei vorrätig hat, kann einfach ein Tool wie ISOBuster oder MagicISO verwenden oder in seinem Brenn-Programm (z.B. Nero Burning Rom oder Ashampoo Burning Studio) die DVD in eine ISO-Datei brennen.

Schritt 2: Auswahl des Medien-Typs:

image

In unserem Fall wollen wir einen USB-Stick beschreiben und wählen daher “USB device”.

Schritt 3: USB-Stick anstecken und auswählen:

image

Nach Klick auf “Begin copying” startet der Vorgang, der etwa 1 Stunde dauert.

Schritt 4: Erstellen des bootfähigen USB-Sticks:

image

Bei mir erschien leider eine Fehlermeldung “We were unable to copy your files. Please check your USB device and the selected ISO file and try again.”:

image

Auch ein neuer Versuch war leider ohne Erfolg. Nach etwas googlen habe ich gelesen, dass der MBR des USB-Sticks möglicherweise nicht gelöscht werden kann. Abhilfe schafft da das Tool DiskPart von Microsoft, das bei Windows bereits mitgeliefert wird.

Dazu ist ein Satz von Kommandos erforderlich, die ich nachfolgend beschreibe:

– Öffnen der Kommandozeile: Start | Ausführen | cmd

– Ausführen von DiskPart: diskpart eingeben und “Enter”-Taste drücken:

image

– Anschließend wird DiskPart geöffnet. Dort listet man zuerst über das Kommando “list disk” alle verfügbaren Laufwerke auf:

image

– Nun wählt man das USB-Gerät aus. In meinem Beispiel ist es der Datenträger 1:

image

Ganz wichtig: Hier gut aufpassen, dass das korrekte Laufwerk ausgewählt wird!! Andernfalls kann es passieren, dass Daten verloren gehen!!

– Über den Befehl “clean” wird der Datenträger bereinigt:

image

Clean ist der wichtigste Schritt, denn hierbei wird der Master Boot Record (MBR) und die Partitionstabelle überschrieben. Möglicherweise hat das Microsoft-Tool ein Problem und führt das clean-Kommando nicht aus.

– Nun legen wir eine Primärpartition über den Befehl “Create partition primary” an:

image

– Die neu angelegte Partition wählt man über den Befehl “select partition 1” aus:

image

– Aktiviert wird diese Partition über den Befehl “active”:

image

– Über “format quick fs=fat32” wird das Dateisystem auf dem Stick mit FAT32 formatiert:

image

– Das Laufwerk wird über den Befehl “assign” wieder gemounted, das heißt es wird ihm wieder ein Laufwerksbuchstabe zugeordnet:

image

Über den Befehl “Exit” wird DiskPart dann wieder geschlossen. Nun kann man das Erzeugen des USB-Devices mit dem Tool erneut versuchen.

Nun sollte das Formatieren erfolgreich beendet werden können und die Dateien auf den USB-Stick kopiert werden:

image

image

Tipp: Virenscanner wie Avira & co. müssen eventuell temporär deaktiviert werden, da sonst die frisch geschriebene autorun.inf als unerwünschtes Programm blockiert wird und das Kopieren wieder fehlschlägt.

Hier der Link zum Windows 7 USB/DVD Download Tool (2,6 MB): http://www.microsoftstore.com/store/msstore/html/pbPage.Help_Win7_usbdvd_dwnTool

Debugger zum Prozess-Start anhängen

Ab und zu kann es vorkommen, dass man sich bereits zu Prozess-Start mit einem Debugger anhängen möchte.

Dazu kann man sich eines einfachen Ticks bedienen. In der Registry registriert man einen Debugger an einem Prozessnamen.

Dazu öffnet man den Registrierungseditor (Start | Ausführen | regedit.exe):

image

Am Schlüssel
“HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options”

trägt man dann einfach den Namen zu debuggenden Prozesses ein (hier: “MyDebuggee.exe”). Anschließend legt man eine neue Zeichenkette namens “debugger” an und weist ihr den Wert “vsjitdebugger.exe” zu.

Sobald man dann MyDebuggee.exe ausführt, erscheint der Just-In-Time Debugger Dialog von Visual Studio:

image

Jetzt muss man nur noch einen geeigneten Debugger auswählen und schon kann die Debugging-Session losgehen.

Hier noch der Link zum Original MSDN-Artikel: http://msdn.microsoft.com/en-us/library/a329t4ed(v=vs.100).aspx

Happy Debugging! Smiley