This uses the Win32 apis to:
- Find the currently active user session
- Spawn a new process in that session
This allows a process running in a different session (such as a windows service) to start a process with a graphical user interface that the user must see.
Note that the process must have the appropriate (admin) privileges for this to work correctly.
using murrayju.ProcessExtensions; // ... ProcessExtensions.StartProcessAsCurrentUser("calc.exe");
The second argument is used to pass the command line arguments as a string. Depending on the target application,
argv might be expected to be the executable name, or it might be the first parameter. See this stack overflow answer for details. When in doubt, try it both ways.