启动流程的服务不会显示GUI C#

嘿,我正在尝试获得一项服务来启动我的程序,但它没有显示GUI。 该过程开始但没有显示任何内容。 我尝试启用“允许服务与桌面交互”,但仍然无效。 我的程序是一个计算机锁定设备,用于阻止未经授权的用户访问计算机。 我正在运行带有64位操作系统的Windows 7。

这是我服务的代码:

protected override void OnStart(string[] args) { Process p = new Process(); p.StartInfo.FileName = "notepad.exe"; p.Start(); FileStream fs = new FileStream(@"C:\Users\David\Documents\Visual Studio 2010\Projects\LockPCService\LockPCService\bin\Debug\ServiceLog.dj", FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.WriteLine(" LockPCService: Service Started " + DateTime.Now + "\n" + "\n"); m_streamWriter.Flush(); m_streamWriter.Close(); } protected override void OnStop() { FileStream fs = new FileStream(@"C:\Users\David\Documents\Visual Studio 2010\Projects\LockPCService\LockPCService\bin\Debug\ServiceLog.dj", FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.WriteLine(" LockPCService: Service Stopped " + DateTime.Now + "\n"); m_streamWriter.Flush(); m_streamWriter.Close(); } 

要尝试使服务正常工作,我使用的是notepad.exe。 当我查看进程记事本正在运行但没有GUI时。 每次运行时,ServiceLog都在那里工作。

关于为什么这不起作用的任何想法?

谢谢。

本文介绍了Session 0 Isolation ,其中包括禁止在Windows Vista / 7中创建UI的服务。 在您的服务启动另一个进程时,它从会话0开始,也不会显示任何UI。 (顺便说一下,创建了UI,只是永远不会显示Session 0)。 CodeProject上的这篇文章可以帮助您从用户桌面上的服务创建进程并显示其UI。

另外,请考虑将流对象包装在using语句中,以便正确处理它们。

服务在不同的帐户下运行,因此记事本由另一个用户和另一个桌面运行,这就是您无法看到它的原因。 从Vista开始,不再支持“允许服务与桌面交互”。

我知道这是一篇很晚的post,但我发现这篇文章对我很有帮助。 我正在运行Windows 7,本文提供的解决方案效果很好。

如果您下载代码,则有一个名为ApplicationLoader的类。 在项目中包含该类,然后就像这样简单:

 // the name of the application to launch String applicationName = "cmd.exe"; // launch the application ApplicationLoader.PROCESS_INFORMATION procInfo; ApplicationLoader.StartProcessAndBypassUAC(applicationName, out procInfo); 

服务在不同的登录会话中运行,并且与用户具有不同的窗口站。 这意味着所有GUI活动都与用户的程序隔离,而不是服务无法显示GUI。 实际上,这种设计使得临时阻止访问用户程序变得更加容易。

您需要致电SwitchDesktop 。