|
Hello! I am writing an application in Unity that requires another application to be running. I have been able to successfully start another program from Unity, but I have not been able to close it. I am When I try to run this code, I get a compile error:
I get a similar error for the Kill() method. Both the Kill() and CloseMainWindow() methods are suggested by intellisense in the Monodevelop IDE, and documented in the C# .NET My theory is that Unity has blocked some features of the .NET framework to prevent a Unity process from shutting down other processes. I have tried using System.Reflection to look inside the Process class, but it isn't working for some mysterious reason (this being my first time using reflection in C#). How can I close this extra process when the user closes Unity? Thanks!
(comments are locked)
|

I have not figured out what is going on, but I have figured out a workaround. Replace:
p.CloseMainWindow()
with:
p.GetType().GetMethod( "CloseMainWindow" ).Invoke( p, new object[]{} );
Using reflection shows that CloseMainWindow and Kill are both still defined, so it seems like a Unity-specific compiler issue.
Another gotcha: If the new process steals focus from Unity, Unity will pause its execution and will not run the CloseMainWindow method until you click back on it.
Hmm, that sounds strange. According to the MonoCompatibility page this method is supported for standalone builds.
The focus problem is related to your runInBackground - setting which can be configured in the Player settings.
If you're sure that it won't compile in Unity you could create a small sample project which reproduces the problem and file a bugreport so the Unity staff know about the problem.
I started to do this process, but then in my debug project CloseMainWindow() worked perfectly. Something must be obscuring the method in my original project.