从服务中访问应用程序桌面

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 115825
本文已归档。它按“原样”提供,并且不再更新。
概要
在 Windows NT 版本 3.1,如果您希望能够访问应用程序桌面服务必须运行该服务在本地系统帐户。服务进程运行在本地系统帐户 (或从这样的服务已启动的进程) 可以显示消息框、 窗口,和对话框。 注销期间,不由系统在本地系统帐户运行的进程将终止。Windows NT,版本 3.5,影响 Windows NT 与这些服务之间的交互的方式进行了大量更改。 此外,Windows NT 3.51 具有更丰富的桌面的 api。

注: 运行在系统帐户下的交互式服务是一个会很危险的做法。这更是如此的命令处理器和批处理文件。想要控制系统的用户只可以按 CTRL + C 将得到一个交互式系统命令提示。
更多信息
以下是 Windows nt 版本 3.5,会影响服务的新功能:
  • 已登录的帐户是用户的唯一的帐户授予对该应用程序的桌面的访问权限。在本地系统不再具有访问权限。 因此,就可以通过模拟用户,使任何用户或 GDI 调用之前有权访问桌面。
  • 在一个不可见的窗口站和特定于该会话的台式机上运行控制台和 GUI 应用程序特定的登录会话期间从服务的进程已启动。窗口站和桌面上会自动创建在会话中的第一个应用程序启动时 ; 在最后一个应用程序退出时,它们被破坏。没有看见这些不可见的台式计算机的方法。
  • 您是否在 localsystem 帐户与登录的用户进行交互的服务 CreateService() 调用中指定 SERVICE_INTERACTIVE_PROCESS 标志。例如:
          schService = CreateService(         schSCManager,         serviceName,         serviceName,         SERVICE_ALL_ACCESS,         SERVICE_INTERACTIVE_PROCESS | SERVICE_WIN32_OWN_PROCESS,         SERVICE_DEMAND_START,         SERVICE_ERROR_NORMAL,         lpszBinaryPathName,         NULL,         NULL,         NULL,         NULL,         NULL );						
    如果使用 SERVICE_INTERACTIVE_PROCESS 时,您可以指定一个帐户,而不是 localsystem,您将得到错误 INVALID_PARAMETER (87)。
  • 如果您使用 CreateProcess() 启动您的进程,并且您希望您登录到用户桌面的服务指派 lpdesktop 参数与"WinSta0\\Default"STARTUPINFO 结构。
  • 只需要一个可见的用户通知的服务可以执行此操作通过调用 MessageBox() MB_SERVICE_NOTIFICATION 标志。使用 MB_DEFAULT_DESKTOP_ONLY 标志工作为很好地但只有在用户桌面上活动。如果该工作站已锁定,或者屏幕保护程序正在运行则调用将失败。

    注: 如果您正在编写的应用程序可以作为一个服务或可执行文件运行的代码,则不能使用 MB_SERVICE_NOTIFICATION 以及非 NULL hwndOwner。
  • 完成到窗口的任何输出不是显示,或以任何方式使其可用于应用程序。试图读取从故障中显示结果的位。
  • GUI 服务不会收到在注销和关闭的 WM_QUERYENDSESSION/WM_ENDSESSION 消息 ; 而是,他们收到 CTRL_LOGOFF_EVENT 和 CTRL_SHUTDOWN_EVENT 事件。这些服务都不注销时,系统将终止。
3.50

警告:本文已自动翻译

属性

文章 ID:115825 - 上次审阅时间:03/01/2014 09:53:46 - 修订版本: 2.1

Microsoft Win32 Application Programming Interface

  • kbnosurvey kbarchive kbmt KB115825 KbMtzh
反馈