자체 설치 가능한 Windows 서비스를 개발 중입니다. 설치/제거를 처리하는 ServiceManager 클래스가 있는데 제대로 작동하는 것 같습니다. 그러나.Net Windows 서비스가 실행되지 않습니다.
, 내가 실행하려고 할 때 내가 얻을 서비스, 즉시, 다음 텍스트와 함께 메시지 박스 시작 :
내 서비스 코드 :지역 시스템에서 서비스를 시작할 수 없습니다 있습니다. 오류 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를 사용하고있어 권한 문제가 없어야합니다.
시스템 및 NetworkService 계정으로 서비스를 설치하려고 시도했지만 동일한 문제가 발생합니다.
관리자 계정을 사용하면 계정과 관련된 또 다른 오류가 표시됩니다 (암호가 없기 때문입니다).
어떤 일이 발생하는지 알고 싶습니다.
업데이트 : 다윗의 질문에 대답,이 (손 번역, 영어 메시지가 다를 수 있습니다) 이벤트 로그의 말씀입니다 :
서비스를 시작할 수 없습니다. 서비스 프로세스가 서비스 컨트롤러에 연결할 수 없습니다.
업데이트 2 : Applicatin 로그에 더주의 깊게 살펴보면, 이전 오류는 서비스 설치 이름과 디자이너의 ServiceName은 속성 사이의 불일치 때문. 그것은 이미 고쳐졌다. 이제는 이벤트 로그에 새로운 오류가 없지만 문제가 지속됩니다.
이벤트 로그를 확인 했습니까? 일반적으로 서비스가 시작되지 않으면 자동으로 "응용 프로그램"이벤트 로그에 기록되는 오류가 발생합니다. 그게 무슨 일이 일어나는지 말해 줄거야. – David
@David : 팁 주셔서 감사합니다. 질문이 업데이트되었습니다. – raven