Pari,
I will be slightly redundant in answering your question.
There are a number of ways to accomplish what you are doing. I would; however; suggest that you look at exactly what you are trying to do in making your decision. If your applications are related, as I suspect they are, then I would suggest either VI Server, or some other method internal to LabVIEW. If, as I suspect, you have related VIs built into Executables, then I would suggest a third alternative. If you create a storage variable (unitialized shift register, very similar to a global, but safer) that variable will be maintained to a certain value as long as you have a session of LabVIEW (Runtime) open. So, if you then call the same variable by opening another executable, you should b
e able to check the status of the variable. I have never actually done this, but it should work (please test first, you may create two copies of the variable if the runtime session is created twice.) I would suggest this as the best solution for two related executables. This is essentially a flag method, wherein a flag is set (usually a boolean, i.e. busy status) by one, and the other VI will read, and only set busy if it isn't already.
If they are unrelated, a call to VI server will work IF and ONLY IF you know the other VIs name. This is the best solution for unrelated VIs that you don't want to use a flag.
Using the list of running functions through windows is the solution you would use if your application doesn't meet the other two criteria. It is reliable, except that if your VI has a window name which is not predictable, you may not know the name (programmatically) of your resource. This method could however; determine if the LabVIEW runtime engine is running on the s
ystem. This method is appropriate if you have no idea what the other VIs name is.
Good luck