Many developers find it annoying to debug the built-in Windows Service projects in Visual Studio. You can’t simply create a new project and click the “Run” button in Visual Studio and expect it to run with a debugger attached, like you can with most other project types. Normally you would install the service, start it, and attach a debugger to the process, but this is a hassle and doesn’t help much if you need to debug issues in the OnStart method.
To solve this problem and help with diagnostics, I typically add some boilerplate logic to my Windows Service projects. By passing in command line args to my service .exe, I can either have it launch in a light-weight debug console or make it wait to call the OnStart method until a debugger is attached.
I’ve had the code written for a while for a setup project and QFG2 support in my QFG Character Editor but I wanted to finish up support for changing the amount of money the character has before publishing it. Since I haven’t had a chance to make those changes, I figured I should go ahead and just build what I have and share it online.
So here it is, QFG Character Editor v1.5 with support for importing/exporting characters from Quest for Glory 1 and Quest for Glory 2.
An important part of my job is to be able to interface our product with third party UI’s. Typically, I know virtually nothing about the UI before I begin the project, only that I will need to enter data into different fields.
Over the years, I’ve accumulated a list of my “goto tools” to help me assess each application. Behold:
I created a new repository on GitHub called BitCollectors.UIAutomationLib which contains an XML driven .NET library for automating keystrokes and mouse clicks on just about any UI. I’ve used this on several applications, including apps running through Terminal Services and Citrix. It’s quite powerful, but I’m not claiming it’s the best solution for native Win32 apps (although it might be the easiest to use). If you’re interfacing with a native Win32 app and you don’t mind writing a little code, you might want to look in to using Microsoft’s UI Automation framework. Their framework lets you get a handle on a control and populate a text box or simulate a button press directly on the control. My library simulates key strokes and mouse clicks, so it doesn’t really work at the control level.
Several days ago I had an issue reported where one of my applications was causing a strange folder to open when the user logged in to their computer. My application is supposed to auto-start when the user logs in to their computer, but it was never starting on these computers – only opening a strange folder. After doing some testing, I discovered this was happening on Windows XP machines, but not Windows 7 (and presumably Windows Vista). I did some research and discovered that Windows XP and Windows 7 interprets paths slightly differently from the HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run registry key.
I’ve created a small project which parses .SLN and .CSPROJ files and allows you to compare and merge project settings across multiple configurations.
This has been a very handy tool for me. We have a Solution here at work that has about 25 projects, and often times we’ll have an ANY CPU platform configured to build for X86 in one project, but configured to build for ANY CPU in another configuration. This lets me quickly identify where bad misaligned configurations exist in my project files.
I haven’t yet published a setup project, but I have checked in the binaries under the bindebug folder. Please feel free to post any bugs or feature requests.