不在服务列表中的 Windows 服务认为它已成功安装

本文关键字:成功 安装 服务 服务列表 Windows | 更新日期: 2023-09-27 18:33:24

我已经使用Visual Studio 2012开发了一个Windows服务,我想把它安装到我的机器中。

服务代码:

public partial class OpenTableImporter : ServiceBase
    {
        public OpenTableImporter()
        {
            InitializeComponent();
            EventLog.Log = "OpenTableImporterTableLog";
        }
        protected override void OnStart(string[] args)
        {
            EventLog.WriteEntry("The service was started successfully.", EventLogEntryType.Information);
            XMLReader xmlReader = new XMLReader();
        }
        protected override void OnStop()
        {
            EventLog.WriteEntry("The service was stopped successfully.", EventLogEntryType.Information);
        }

这是程序主的代码:

public static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
         public static void Main()
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new OpenTableImporter() 
            };
            ServiceBase.Run(ServicesToRun);
        }
    }

这是日志:

Installing assembly 'XXX'ImporterOpenTable.exe'.
Affected parameters are:
   logtoconsole = 
   logfile = XXX'ImporterOpenTable.InstallLog
   assemblypath = XXX'ImporterOpenTable.exe
Installing service OpenTableImporter...
Service OpenTableImporter has been successfully installed.
Creating EventLog source OpenTableImporter in log OpenTableImporterTableLog...
Committing assembly 'XXX'ImporterOpenTable.exe'.
Affected parameters are:
   logtoconsole = 
   logfile = XXX'ImporterOpenTable.InstallLog
   assemblypath = XXX'ImporterOpenTable.exe

我已经:

  • 更改了对我的程序的Startup Object
  • 授予NETWORK SERVICE对事件日志的读/写权限。
  • 试图让program.cs课公开,然后不公开。
  • 以管理员身份运行Visual Studio,以管理员身份运行cmd。
  • 添加了服务的安装程序。

不在服务列表中的 Windows 服务认为它已成功安装

若要实际安装该服务,必须将其注册到服务控制管理器。最简单的方法是使用 SC.EXE .

  • http://support.microsoft.com/kb/251192

例:

SC.EXE create "MyService" binpath= "'"c:'program files'MyService'MyService.exe'" arg1 arg2" displayname= "My Service Name"

这将创建一个服务,并告知服务控制管理器若要启动该服务,它应调用"c:'program files'MyService'MyService.exe"并在命令行上传递两个参数arg1arg2。例如,如果它具有这些方案的/debug/service选项。

如果可执行服务不需要任何特殊参数来运行服务,则可以省略这些参数。

注意:如果可执行文件的路径包含空格,则需要使用反斜杠双引号将其引号括起来,即 '"路径的起点和终点,就像我在示例中所做的那样。