use strict; use Win32::Semaphore; #Determine the programe name, $progname my $progpath = $0; my $progname=lc($0); if($progname=~/[\/\\]/){ my @stmp=split(/[\/\\]/,$progname); $progname=pop(@stmp); } $progpath=~s/\\/\//g; $progpath=~s/\/$progname$//is; $progpath=~s/\//\\/g; $progname=~s/\Q$progpath\E//s; $progname=~s/^[\\\/]+//s; if($progname=~/(.+?)\.(exe|pl|so)/is){$progname=$1;} #Check to see if a semaphore with this program is already open, if so die. if(Win32::Semaphore->open($progname)){ print "$progname is already running\n"; exit; } #Create a semaphore before starting anything else. my $sObject; print "creating semaphore $progname\n"; Win32::Semaphore::Create($sObject,1,1,$progname) || die "Die: $!\n"; ############################################################## ########## Program Code goes below here #################### ############################################################## while(1){ #sample pause loop so that the program does not die select(undef,undef,undef,.01); } exit; ############################################################## END { if($sObject){$sObject->Release();} }