Share Tips, Code Samples, etc. with the Visual Prolog community.
User avatar
Thomas Linder Puls
VIP Member
Posts: 1398
Joined: 28 Feb 2000 0:01

Preventing two instances of a program to run simultaneously

Unread post by Thomas Linder Puls »

You can use this code to prevent a program from being started again when it already runs:

Code: Select all

class facts     okToRunMutex : mutex := erroneous. class predicates     okToRun : () determ. clauses     okToRun() :-         okToRunMutex := mutex::createNamed("SomeStrangeName", false()),         not(multiThread_native::wait_timeout = okToRunMutex:wait(0)).   clauses     run():-         if okToRun() then             TaskWindow = taskWindow::new(),             TaskWindow:show()         end if.
You are supposed to use some strange name instead of "SomeStrangeName". Microsoft has this to say about the subject:
Microsoft wrote:If you are using a named mutex to limit your application to a single instance, a malicious user can create this mutex before you do and prevent your application from starting. To prevent this situation, create a randomly named mutex and store the name so that it can only be obtained by an authorized user. Alternatively, you can use a file for this purpose. To limit your application to one instance per user, create a locked file in the user's profile directory.
Notice if-then-end-if is a Vip7 construction, so if you are using older versions you will have to recode that part.
Regards Thomas Linder Puls
PDC
User avatar
Thomas Linder Puls
VIP Member
Posts: 1398
Joined: 28 Feb 2000 0:01

Unread post by Thomas Linder Puls »

Regards Thomas Linder Puls
PDC
Post Reply