USB Disk Eject – An Update on the Ongoing Saga

Good news and bad news on the USB Disk Ejector front. The good news is that I’ve been preparing a new build in preparation for another beta release and (finally) a new stable build. The bad news is that due to a combination of stupidity and a wonky backup strategy I’ve lost most of the code I’ve written since October.

I fully release that its been a long time since the last beta and an even longer time since the last stable build. The problem has been my bad coding strategy, instead of using subversion properly I’ve been keeping changes local and instead of making incremental changes I’ve been coding in chunks shoving in lots of new features without fully testing them and then not doing any coding for a month or so. Consequently the code is a mess. On the positive side – I’ve added the mountpoint support that people asked for, however that broke a lot of the existing code that relied on drive letters and I’ve not fully fixed everything yet. I can only apologise to those who’ve been waiting for new builds – however I’m going to try and fix this.

The plan.

My plan is to have a series of stripped down betas and then slowly add features back in when I know they work reliably. My proposed plan is this:

  • All betas – card reader support removed – at the moment its not fully reliable, only detects multi-card readers and appears to be causing crashes for some users. More information about this at the end of the post.
  • Beta 3 – just testing mountpoints – check ejection works for drives with normal drive letters and those using folder mountpoints. Important that this is tested on all os’? from 2K-Win7.
  • Beta 4 – other core functionality – ‘mobile mode’ (ejecting when app is running from the drive its trying to eject), gui functionality – window docking/positioning, notifications, hotkeys.
  • Beta 5 – command line options – sanitise, fix and change them.
  • Stable release V1.3

Hopefully by posting this schedule publicly I’ll lock myself into some self-discipline and a saner development process. This will get a new stable version released, however theres still plenty of work to be done beyond this – things that you can probably help me with.

How can you help?

There are two major features that I haven’t yet successfully implemented. I’m hopeful that someone will be able to suggest a solution to these problems:

Detecting card readers.

I don’t mean smart-card readers (Windows has a well documented api to deal with those), I mean memory cards, SD cards and their ilk. Currently I use a clumsy method to detect card readers; I check if there are any usb devices with the same parent device instance, if there are I look for devices that don’t have the same product id (to eliminate hard drive partitions) and if any devices meet these two criteria I know that they are likely to be card readers. However this isn’t exactly a reliable way of detecting – it doesn’t detect single card readers of the type that are commonly built into laptops and its unlikely even to work with all multi-card readers. What I need is a lower level way of checking; I know that Windows can do it, so hopefully there’s some way of doing it buried in the Windows API. Can you help suggest anything?

Checking what files are open on a disk and what program/process is using them.

I still cant find any way to do this, I know that its possible but all my searching hasnt found a way. Does anyone know how to do this?

Testing, testing and more testing.

If I can get a variety of testers prepared to try each build I’ll be able to release a stable build much more quickly. It would be particularly helpful if the builds could be tested on different versions of Windows.

5 thoughts on “USB Disk Eject – An Update on the Ongoing Saga”

  1. Hi I m a Italian Delphi developer
    I m able to “Checking what files are open on a disk and what program/process is using them”.

    If you need help to develop source i’ll be glad to do that.

    I have also some ideas to improve the project. It’s very useful.


Comments are closed.