我创建了一个C#windows服务并在我的本地开发人员机器上成功安装(它运行良好)。
现在我尝试在不同的计算机上安装该服务。 我复制了"发布"文件夹到新机器并安装了服务。
当我在新机器上启动服务时,出现以下错误: "本地计算机上的服务已启动,然后停止。如果某些服务未被其他服务或程序使用,则会自动停止。"
我没有收到应用程序事件日志的任何消息,我甚至添加了调试消息作为程序的第一行,但我在事件查看器中看不到任何内容(好像代码没有启动在所有)。 :/
我做错了什么?
答案 0 :(得分:0)
“已启动然后停止”消息。这可能有很多原因,包括无效路径和由于缺少源或权限不足而无法写入应用程序事件日志。
我通常会添加一个选项来将我的服务作为控制台应用程序运行。
这允许我使用Console.WriteLine
显示任何异常。
以下假设您的服务来自System.ServiceProcess.ServiceBase
。
partial class MyService : ServiceBase
{
private static void Main(string[] args)
{
MyService svc = new MyService();
if (Environment.UserInteractive)
RunConsole(args, svc);
else
Run(svc);
}
public MyService()
{
InitializeComponent();
}
protected static bool KeepRunning { get; set; }
protected override void OnStart(string[] args)
{
StartServiceHost();
}
protected override void OnStop()
{
StopServiceHost();
}
protected override void OnShutdown()
{
StopServiceHost();
base.OnShutdown();
}
private static void RunConsole(string[] args, ConverterService svc)
{
// need to hold on to Ctrl+C, otherwise StopServiceHost() never gets called
Console.CancelKeyPress += (sender, e) => ShutDown(svc);
KeepRunning = true;
svc.OnStart(args);
Console.WriteLine("Press <Ctrl+C> to exit.");
while (KeepRunning)
{
Console.ReadLine();
}
}
private void StartServiceHost()
{
// start your service
}
private void StopServiceHost()
{
// stop your service
}
private static void ShutDown(MyService svc)
{
Console.WriteLine("exiting...");
svc.OnStop();
KeepRunning = false;
}
}
答案 1 :(得分:0)
好吧,我发现了问题:
我使用DataProctionScope.LocalMachine进行密码解密。 所以当我更换机器时 - 解密失败了。
我不得不重新加密本地计算机上的密码,然后解密工作正常。
感谢您的回复!
*由于我的错误,事件日志调试无效。