Probably your easiest way would be to create a sentinal that subsequent copies to check for. This could be as simple as an empty file or directory.
When the script runs, it checks for its existance, if its found, terminates with a warning. If not, it creates it and then deletes it when if finishes. The problem with this is that if the program terminates abnormally, it can leave the file/directory in situ and refuse to run again until it has been manually deleted. You might also use a registry entry for the same purpose but with the same potential problem. Removing the sentinel in an END{} block might help the cleanup problem, but I don't think it's guarenteed to run under all circumstances.
A better solution is to use something that automatically idsappears when the program terminates. Eg. Open a tcp or udp port and hold it open. This will disappear when the program terminates abnormaly. However, in some environments, you may fall foul of firewall restrictions.
Saving (what I think is) the best until last, you can create a named pipe Either locally, or at your domain server. This is a simple process to create and check for using Win32::Pipe which I believe came as standard with AS 5.6.1.
By creating this locally, you can prevent a 2nd copy running locally. By creating it at the domain controller, you could ensure only 1 copy in the domain.
Examine what is said, not who speaks.
The 7th Rule of perl club is -- pearl clubs are easily damaged. Use a diamond club instead.
In reply to Re: Determining if self is already running under WinNT/2000
by BrowserUk
in thread Determining if self is already running under WinNT/2000
by lrep
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |