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.
Notice if-then-end-if is a Vip7 construction, so if you are using older versions you will have to recode that part.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.