Windows下可以做些什么?

有没有人有一个很好的XP指导Windows服务的function? 特别是,我试图找出当一个程序作为一个服务运行时会发生什么事情,试图打开Windows,但没有被授予与桌面交互的权限。

基本上,我有一个程序是/是一个GUI应用程序,应该能够作为服务运行长期后台处理。 重写程序在后台处理时不显示GUI元素是一项重大的工作,所以我想看看是否有一种方法可以忽略UI元素。 现在有点工作了,只要太多的窗户没有打开。 我试图找出我可能遇到的限制。 理想情况下,将有一个MSDN页面来讨论这个,但我没有find一个运气。

Solutions Collecting From Web of "Windows下可以做些什么?"

一般来说,服务应该设计为没有任何可见的用户界面。 整个服务点是在后台运行,无需用户界面,无需人工干预。 (Think SQL server,IIS等)

在大多数情况下,如果需要GUI,单独的应用程序将控制服务的操作。 (继续我刚刚提到的示例,SQL server管理工作室,IIS管理器等)这些独立的应用程序配置和操作服务(偶尔,如果需要,反弹所述服务)。

如果您的服务需要偶尔使用的用户界面,并且所说的用户界面不能被隔离到控制应用程序,那么您可能应该重新考虑事实,即您正在使用服务。 也许驻留在系统通知区域的UI应用程序是正确的使用模式? (EG,Windows Live Communicator。)

Microsoft Windows中的服务是一种在计算机运行操作系统时运行的程序。 它不需要用户登录。 需要服务来执行与用户无关的任务,例如目录复制,进程监视或对网络上其他计算机的服务,例如支持Internet HTTP协议

通常它被实现为一个在后台运行的控制台应用程序,并执行不需要用户交互的任务。

安装的服务可以通过服务小程序进行配置,可从Windows 2000 / XP中的Control Panel --> Administrative Tools中获得。

可以将服务配置为在操作系统启动时自动启动,因此您不必在系统重新启动后手动启动每个服务。

  1. 创建一个简单的服务 – MSDN文章
  2. 编写Windows服务变得容易 – 代码项目文章
  3. 在C – DevX文章中编写Windows服务的五个步骤

如果您应该考虑最终迁移到较新的操作系统(如Vista或server 2008),您会发现根本无法授予服务与桌面交互的权限。 因此,从向前兼容的角度来看,你应该设计你的服务不要求它。

如果选中“允许服务与桌面交互”属性(MMC – >服务属性 – >登录选项卡),则Windows XP中的服务可以与桌面进行交互。 通过执行以下操作也可以这样做:

 hWinstation = OpenWindowStation("winsta0", FALSE, MAXIMUM_ALLOWED); SetProcessWindowStation(hWinstation); hDesktop = OpenDesktop("default", 0, FALSE, MAXIMUM_ALLOWED); SetThreadDesktop(hDesk); 

但请注意,从Windows XP中的服务进程中呈现UI几乎总是会导致安全问题(请参阅粉碎攻击 )。 你应该尝试从服务中分解应用程序的UI部分。

通常这个服务没有写入窗口站和桌面的权限,所以会失败; 即使运行加载user32.dll的应用程序也可能会失败,因为user32具有初始化代码,要与窗口站通信,并且除非服务以管理员身份运行,否则无法访问它。