HI,
我在Windows 7上以具有管理员权限的用户身份登录C#WCF Windows服务.我想在服务启动后启动桌面应用程序.我发现的所有讨论都是关于Windows工作站和桌面的...我创建了一个单独的线程,设置了线程站和桌面,并尝试启动桌面应用程序.当我使用asp.net开发服务器从VS2010启动代码时,代码有效,但如果它是从服务启动的,则没有错误,但是没有启动进程.我试图以不同的用户启动进程并尝试调用CreateProcessWithLogonW(将startInfo.lpDesktop设置为"winsta0\default";之前).在这两种情况下,我都返回了processId,但无法看到桌面应用程序.有人可以帮我看看哪里出错了吗?
public class ExternalProcess
{
const int READ_CONTROL = 0x20000;
const int WRITE_DAC = 0x40000;
const int DESKTOP_WRITEOBJECTS = 0x80;
const int DESKTOP_READOBJECTS = 0x1;
private Process extProcess;
private string sFilePath = "";
[DllImport("user32.dll")]
private static extern bool SetThreadDesktop(IntPtr hDesktop);
[DllImport("user32.dll")]
static extern IntPtr OpenDesktop(string lpszDesktop, uint dwFlags,bool fInherit, uint dwDesiredAccess);
[DllImport("user32.dll")]
private static extern IntPtr GetProcessWindowStation();
[DllImport("user32.dll")]
private static extern IntPtr OpenWindowStation(string lpszWinSta, bool fInherit, ACCESS_MASK dwDesiredAccess);
[DllImport("user32.dll")]
private static extern IntPtr SetProcessWindowStation(IntPtr hWinsta);
public bool …Run Code Online (Sandbox Code Playgroud)