I might also have my program "watch" that file, and if it disappears or
becomes modified, then shut down because I know the user is trying
something they shouldn't.
I'm HIGHLY dubious of nannying your users to that extent. Unless it's very
dangerous, in some sense, to allow multi-instances (data-destroying race
conditions in important files in the install directory?), if the user takes
specific and knowledgeable action to circumvent the default behavior of
only having a single instance, the user should probably be deferred to and
the perceived problem solved in other ways (e.g. using a lightweight but
properly ACID database instead of just a file, or locking the file and
requiring separate concurrent instances use separate files or even distinct
installs altogether).
I know that if I deliberately circumvent something like that, I do so at my
own risk and buggy, even data-destroying behavior is theoretically possible
among the consequences (so I should either not do so or back up the
program's data files first).
I also know that there have been many occasions when I've been frustrated
by a program "straight-jacketing" me into being unable to do something the
programmer thought unwise or even just unnecessary, but where the
programmer clearly hadn't anticipated all the uses to which the program
might be put, especially by someone that's a hacker and not just a garden
variety end-user.
Programs are the user's tools and, as such, should empower, not limit, the
user. Whereas it can make plenty of sense to include safety features
designed to make it difficult for the user to accidentally shoot himself in
the foot, cut off his finger in the saw, or shoot his co-worker from across
the room with the nailgun, it is rarely if ever worthwhile to additionally
try to design in a "cop-in-the-box" intended to catch and "punish"
deliberate attempts to circumvent such features. If I purposely circumvent
the safety on a nailgun, I do so at my own risk and probably because a
burglar broke into the shop and I need a makeshift weapon for self-defense
in a hurry, rather than because I'm an irresponsible idiot, and if I *am*
an irresponsible idiot, I'll probably find some other way to shoot myself
or my co-worker no matter how idiot-proof you try to make the nailgun.
Disclaiming all warranty and liability in the event of such tampering is
the furthest it's generally reasonable to take matters -- and, of course,
software makers are already in the habit of blanket disclaiming ALL
liability, even for actual defects in workmanship!
So I'd suggest that instead of monitoring the file for deletion or
tampering you just name it something cutesy like "DELETING ME VOIDS
WARRANTY AND MAY CAUSE MALFUNCTION.txt".
Nah, probably not even that, since if the program hangs and has to be
force-quit, then won't restart properly because of a stale lockfile, your
support forums will end up chock full of long threads going
Q: It hung, I end-tasked it, and it wont restart!
A: Delete the lockfile and try restarting it again.
Q: What's the "lockfile"?
A: It's the file called "DELETING ME VOIDS WARRANTY..."
Q: But I don't want to void my warranty and maybe cause even more bugs!
A: The name's a joke. There's no warranty anyway and deleting it won't
cause a malfunction if the program isn't currently running.
Q: Are you sure?
A: Yes.
Q: Are you really, REALLY sure?
A: Yes!
Q: It won't void the warranty on my *computer itself* will it?
A: It didn't come with the computer, so, no, it can't.
Q: Hmm. It still doesn't seem like a good idea. I think I'll get a second
opinion. <starts new thread on the same topic>
A: <bangs head against wall>