不在服务列表中的 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。
- 添加了服务的安装程序。
若要实际安装该服务,必须将其注册到服务控制管理器。最简单的方法是使用 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"
并在命令行上传递两个参数arg1
和arg2
。例如,如果它具有这些方案的/debug
和/service
选项。
如果可执行服务不需要任何特殊参数来运行服务,则可以省略这些参数。
注意:如果可执行文件的路径包含空格,则需要使用反斜杠双引号将其引号括起来,即 '"
路径的起点和终点,就像我在示例中所做的那样。