Ich würde eher sagen, die Hardwareschnittstelle ist Mist. Eigentlich ist es doch üblich, dass man vorm Zugriff auf eine Schnittstelle abfragen kann, ob sie schon offen ist, bzw. dass man beim versuchten Öffnen einen Fehlercode zurückbekommt. Ist nur blöd, weil du da wahrscheinlich nichts ändern kannst, oder?

Wenn du den Workaround mit der temporären Datei nehmen musst:
Du könntest vom Programm regelmäßig (z.B. alle 30 Sekunden, das sollte wohl reichen) die aktuelle Systemzeit in die Datei schreiben lassen. Wenn nun die zweite Instanz die Datei prüft, vergleicht sie die Zeit. Sind es weniger als 30 Sekunden Differenz, läuft schon eine andere Instanz. Wenn aber mehr Zeit vergangen ist, dürfte die erste Instanz abgeschmiert sein. Zusätzlich könnte man evtl. im Autostart die Datei löschen.