【发布时间】:2011-04-18 15:13:13
【问题描述】:
我正在开发一个可自行安装的 Windows 服务。我有一个处理安装/卸载的 ServiceManager 类,并且似乎工作正常。
但是,当我尝试运行启动服务时,立即会出现一个带有以下文本的 MessageBox:
无法在本地启动服务 系统。错误 1053:服务没有响应 中的启动或控制请求 及时的时尚。
我的服务代码:
public partial class MyService : ServiceBase
{
public MyService()
{
using (TextWriter tw = new StreamWriter(path: "C:\\Test.txt", append: true))
{
tw.WriteLine("Test1");
tw.Close();
}
InitializeComponent();
}
protected override void OnStart(string[] args)
{
using (TextWriter tw = new StreamWriter(path: "C:\\Test.txt", append: true))
{
tw.WriteLine("Test2");
tw.Close();
}
Thread t = new Thread(new ThreadStart(InitService));
t.Start();
}
protected override void OnStop()
{
}
static void InitService()
{
using (TextWriter tw = new StreamWriter(path: "C:\\Test.txt", append: true))
{
tw.WriteLine("Test4");
tw.Close();
}
while (true)
{
Thread.Sleep(100);
}
}
设计器代码:
namespace MyService
{
partial class MyService
{
/// <summary>
/// Variable del diseñador requerida.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Limpiar los recursos que se estén utilizando.
/// </summary>
/// <param name="disposing">true si los recursos administrados se deben eliminar; false en caso contrario, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Código generado por el Diseñador de componentes
/// <summary>
/// Método necesario para admitir el Diseñador. No se puede modificar
/// el contenido del método con el editor de código.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
this.ServiceName = "MyService";
}
#endregion
}
}
我的主要:
public static void Main(string[] args)
{
try
{
bool debug = false;
bool mustRun = false;
string errMsg = "";
mustRun = true;
using (TextWriter tw = new StreamWriter(path: "C:\\Test.txt", append: true))
{
tw.WriteLine("Test3");
tw.Close();
}
ServiceManager manager = new ServiceManager();
mustRun = !manager.ParseArgs(args, ref debug, ref errMsg);
MyService svc = new MyService();
//
// if (debug)
// {
// svc.DebugStart();
// }
// else
if (mustRun)
{
System.ServiceProcess.ServiceBase[] ServicesToRun = null;
ServicesToRun = new System.ServiceProcess.ServiceBase[] { svc };
System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}
else
{
}
}
catch (Exception ex)
{
using (TextWriter tw = new StreamWriter(path: "C:\\Test.txt", append: true))
{
tw.WriteLine(ex.Message);
tw.Close();
}
}
}
不会写入文件 C:\Test.txt,除非在安装或卸载服务时(使用 Test3 字符串)。我使用的是 Windows XP,所以应该没有权限问题。
我尝试使用 System 和 NetworkService 帐户安装服务,但出现了同样的问题。
使用管理员帐户,它给了我另一个与帐户相关的错误(我猜是因为我没有密码)。
知道会发生什么吗?
更新:回答大卫的问题,这是事件日志所说的(手工翻译,英文信息可能不同):
服务无法启动。服务 进程无法连接到服务 控制器。
更新 2: 仔细查看应用程序日志,之前的错误是由于服务安装名称和设计器中的 ServiceName 属性不匹配造成的。它已经修好了;现在事件日志中没有新的错误,但问题仍然存在。
【问题讨论】:
-
您检查了事件日志吗?通常当服务无法启动时,它会抛出一个错误,它会自动记录在“应用程序”事件日志中。这应该告诉你发生了什么。
-
@David:感谢您的提示,问题已更新。
标签: .net visual-studio-2010 windows-services windows-xp