The only good way to do this is to write two programs - a client service that monitors execution of programs, and a server side service that kees track of open instances. 1) When the user clicks on the targetted executable, the client side service would contact the server and ask if it's okay to run the app in question. 2) The server side would return an appropriate response associated with the number of users it thinks is using the software in question 3) The client side would allow/disallow access based on the response from the server. 4) Every x number of seconds, the client side service would tell the server side service whether or not the app was still running. You can also make it so that the client side would shut dwn the app in question if for some reason it could not contact the server after x minutes (or seconds). 5) If the server doesn't get a signal from the client side in x number of secods, it could assume that the app isn't running any longer and can automatically free up one reference to the executable, thereby allowing another user to use the executable. This mechanism could be used to control access to any number of applications through a database or the registry.