CreateProcessAsUser doesn't draw the GUI

Posted by pavel.tuzov on Stack Overflow See other posts from Stack Overflow or by pavel.tuzov
Published on 2010-04-06T10:54:06Z Indexed on 2010/04/06 11:03 UTC
Read the original article Hit count: 735

Hi,

I have a windows service running under "SYSTEM" account that checks if a specific application is running for each logged in user. If the application is not running, the service starts it (under corresponding user name).
I'm trying to accomplish my goal using CreateProcessAsUser(). The service does start the application under corresponding user name, but the GUI is not drawn. (Yes, I'm making sure that "Allow service to interact with desktop" check box is enabled).

System: XP SP3, labguage: C#

Here is some code that might be of interest:

PROCESS_INFORMATION processInfo = new PROCESS_INFORMATION();  
startInfo.cb = Marshal.SizeOf(startInfo);  
startInfo.lpDesktop = "winsta0\\default";  
bResult = Win32.CreateProcessAsUser(hToken, null, strCommand, IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, null, ref startInfo, out processInfo);  

As far as I understand, setting startInfo.lpDesktop = "winsta0\default"; should have used the desktop of corresponding user.
Even contrary to what is stated here: http://support.microsoft.com/kb/165194, I tried setting lpDesktop to null, or not setting it at all, both giving the same result: process was started in the name of expected user and I could see a part of window's title bar. The "invisible" window intercepts mouse click events, handles them as expected. It just doesn't draw itself.

Is anyone familiar with such a problem and knows what am I doing wrong?

© Stack Overflow or respective owner

Related posts about c#

Related posts about .NET