如何让程序注册为NT服务

解决方案 »

  1.   

    这是一个例子
    http://www.applevb.com/sourcecode/nt_service.zipRunning Visual Basic Applications as Windows NT Services
    http://support.microsoft.com/kb/q175948/http://support.microsoft.com/support/kb/articles/q170/8/83.asp
    是微软关于如何在VB中使用NTSVC.OCX 的文章以下转贴:INFO:将 Visual Basic 应用程序当成 Windows NT 服务来执行
    结论
    Microsoft 目前并不建议,也不支持将 Visual Basic 应用程序当成 Microsoft Windows NT Services 来执行,因为这种应用程序被当成 Microsoft Windows NT Services 来安装并执行时,可能会出现不稳定的现象。 Microsoft Visual Basic 4.0 不支持回呼 (Callback),而 Visual Basic 4.0 也非安全执行绪。而 Visual Basic 5.0 与 6.0 都是 Apartment Model 安全执行绪,无法经由 AddressOf 运算子将回呼封送处理至 Visual Basic 程序内。上述作业方式是经过设计规划的。 本文包含一些这种不稳定现象的范例,简短解说造成不稳定的可能原因,以及可能的解决方案。 Microsoft 提供程序范例,仅供解说参考,不论其为明示或默示者,其中包括但不限于适售性以及适合某特定用途之默示责任担保。本文假设您熟悉示范的程序语言,以及建立程序及除错所使用的工具。Microsoft 支持专业人员可以协助解释特定程序的功能,但不会修改这些范例,以增加新功能或建立新程序,来符合您的特定需求。若您的程序设计经验有限,可以连络 Microsoft 授权方案提供者,或 Microsoft 付费顾问专线 (800) 936-5200。如需有关 Microsoft 授权方案提供者的详细信息,请参阅下面全球信息网网页: 
    http://www.microsoft.com/partner/referral/
    如需得知 Microsoft 有提供哪些方案,请参阅下面全球信息网网页: 
    http://support.microsoft.com/directory/overview.asp
    其它相关信息
    不稳定现象的范例 1. 如果 Microsoft Visual Basic 应用程序显示对话框后接着就终止执行,此 .EXE 文件的名称会从 Services Applet 对话框中消失,但 Visual Basic 应用程序的对话框会在使用者接口上留下灰色的矩形方块。 
    2. 当 Microsoft Visual Basic 应用程序是以服务的角色启动,.EXE 档的名称会短暂的出现在 Services Applet 对话框中,但 Visual Basic 应用程序却似乎没有启动。 
    3. 作为 OLE Servers 的 Microsoft Visual Basic 应用程序会成功传回只读属性,当此 OLE Server 终止时,此 .EXE 文件名称就会从 Services Applet 对话框中消失。然而,之后试图执行此 OLE Server 时,会因 OLE Automation 错误而失败,或是此 Services 程序会挂掉。 
    4. 出现错误讯息,因为某执行绪呼叫回呼函数,而此执行绪并不是 Visual Basic 所建立。有些 API 函数会使用无限制执行绪模型 (Free Threading Model)。Visual Basic 只支持 Apartment Model 执行绪。 
    5. 有关此种现象的其它信息,请按一下下面的文件编号,检视 Microsoft Knowledge Base 中的文件: 
    6. 198607 PRB: Access Violation in VB Run-Time Using AddressOf 为何会发生这种不稳定的现象 
    Microsoft Windows NT 中的服务是一种撰写成主控台应用程序的程序,无论何时当操作系统执行时服务就会执行。服务通常是用来提供例如目录复写、系统活动稽核、程序监视或通讯支持等功能。 服务会在 LocalSystem 账户下登入 Microsoft Windows NT,此预先定义的本机账户是系统程序所使用的账户。 在 LocalSystem 账户的内容中执行的服务会继承下面特性: 
    • 此服务无法开启 HKEY_CURRENT_USER 登录机码。 
    • 此服务可以开启 HKEY_LOCAL_MACHINE\SECURITY 登录机码。 
    • 此服务对网络资源的存取有限,例如共享与管道,因为它没有任何凭证,且必须使用 Null 工作阶段来联机。 
    • 如果此服务会开启指令窗口并执行批次文件,使用者可以按 CTRL+C 来终止批次档的执行,并取得存取指令窗口的 LocalSystem 使用权限。 
    • 服务无法和其它应用程序共享对象,除非它们是以 DACL 开启的,这样可让使用者或使用者群组具有存取权,或是以 NULL DACL 开启,这可让所有使用者 (Everyone) 都具有存取权。设定 NULL DACL 和设定 NULL 是不一样的,这是表示只有具有相同安全性内容的应用程序才能取得存取权。 
    • 服务程序若需要较长的时间来执行必要的初始化,就可能需要建立另一个执行绪,当主要执行绪继续进行处理时,可让此执行绪来执行一般初始化。 
    依照惯例,Microsoft Windows NT Services 是设计成非交互式,亦即,在大部分情况下,它们是不须任何使用者的互动就能执行它们的工作。服务通常是由安装在 [控制台] 中的 Applet 所设定与控制。这就需要程序设计师新增程序代码,以提供这些其它需求: 
    • 在系统或应用程序记录文件中报告警告与错误事件。您通常无法使用输出至屏幕,因为可能没有使用者登入。 
    • 经由不同的应用程序或 [控制台] 中的 Applet 来控制服务。这涉及施行服务通讯机制的工作。 
    • 安装并从系统移除服务。 
    然而,使用 Microsoft Visual Basic 4.0,您的应用程序最终还是可能从 Services 程序中产生未处理的错误讯息,而使 Microsoft Visual Basic 应用程序挂掉。 Microsoft Visual Basic 5.0 与 6.0 的自主式 EXE 编译选项确实可以解决意外出现错误讯息的问题,但执行绪的安全仍然是个问题。Visual Basic 5.0 与 6.0 都是 Apartment Model 安全执行绪 (Thread-Safe),除非或直到程序使用 AddressOf 运算子。目前 Visual Basic 无法经由 AddressOf 运算子将多个回呼封送处理至 Visual Basic 5.0 或 6.0 应用程序。因此,我们不建议将 Microsoft Visual Basic 应用程序安装成 Microsoft Windows NT Service。 
    解决方法 
    Microsoft 技术文件:《NT Service: An OLE Control for Creating Windows NT Services in Visual Basic》说明了某个 OLE 控件,可让开发人员建立可作为 Microsoft Windows NT 服务的 Visual Basic 应用程序。使用 NTService 控件,您可以安装服务、记录事件以及响应启动、停止、暂停与继续等事件。您可以在下面网站找到这篇文件: 
    http://msdn.microsoft.com/library/techart/msdn_ntsrvocx.htm 
    注意 :即使您是使用 Ntsrv.ocx,Microsoft 不建议,也不支持将 Visual Basic 应用程序当成 Microsoft Windows NT Services 来执行。 
    其它技术 
    开发人员在以 Microsoft Visual Basic 撰写的 Microsoft Windows NT Service 中使用 Microsoft 技术时,例如 ODBC、DCOM、OLE Automation 与 DAO,可以预期作业上会发生困难。为了这个原因,以及为了那些已经提到的原因,Microsoft 忠告开发人员不要在以 Microsoft Visual Basic 撰写的 Microsoft Windows NT Service 中使用这些技术。 
    参考
    有关其它信息,请参阅 MSDN 的下面目录: 
    \Platform SDK\Windows Base Services\Executables\Services 
    有关其它信息,请按一下下面的文件编号,检视「Microsoft 知识库」中的文件: 
    198607 PRB: Access Violation in VB Run Time Using AddressOf 170883 HOWTO: Use NTSVC.OCX from Visual Basic 150777 信息:OLE Thread 模式的说明和作业方式 
    137890 如何:建立使用者自订服务如何:建立使用者自订服务 本文件是根据 Microsoft Knowledgebase 文件编号 Q175948 翻译的. 若要参考原始英文文件内容, 请至以下网址: 
    http://support.microsoft.com/support/kb/articles/Q175/9/48.asp
      

  2.   

    Microsoft 目前并不建议,也不支持将 Visual Basic 应用程序当成 Microsoft Windows NT Services 来执行 
    这句话应该注意啊