I am trying findout whether a process is already running in Windows 2000 Professional using a perl script that is given below. Sometimes I am getting the following error:
Win32::OLE(0.1603) error 0x800401e4: "Invalid syntax"
after character 0 in "WinMgmts:{impersonationLevel=impersonate}!//
+"
Any idea why it is giving this sometimes not always.
sub checkProcessExists {
my $newPid = $$; // Get Process id
my $file; //old Process id is stored in this file
my ($flag, $oldPid);
unless (open (PRID, $file)) {
$flag = 0;
} else {
$oldPid = <PRID>;
chomp ($oldPid);
close (PRID);
$flag = 1;
}
if ($flag) {
my $CLASS = 'WinMgmts:{impersonationLevel=impersonate}!//';
my $WMI = Win32::OLE->GetObject( $CLASS ) or print ("OLE, GetO
+bject error: " . Win32::OLE->LastError());
my $pid;
foreach my $proc (in $WMI->InstancesOf('Win32_Process')){
$pid = $proc->{ProcessId};
if ($pid == $oldPid) {
$flag = 1;
last;
} else {
$flag = 0;
}
}
}
if (!$flag) {
unless (open (PRID, ">$file")) {
print ("Unable to open $file");
exit();
} else {
print PRID $newPid;
close (PRID);
}
} else {
print ("$name (PID: $oldPid) is still running. Try again later
+");
}
return $flag;
}
Originally posted as a Categorized Answer. |