我有3个Windows服务问题
WS可以在后台运行吗?每2分钟可以做一些工作吗? (如果是的话,我可以得到一些帮助吗?)
如何以简单的方式安装WS? (不是与Installutil.exe .......)
如何从Windows服务运行.exe文件?
我试过这种方式:
System.Diagnostics.Process G = new Process();
G.StartInfo.FileName = @"d:\demo.exe";
G.Start();
但它不起作用。
答案 0 :(得分:6)
installutil.exe 有什么问题?如果您不喜欢它,请使用VS.NET生成安装程序,但 installutil.exe 它始终在后台,据我所知。 (Complete example 1,Complete example 2)
答案 1 :(得分:4)
默认情况下,Windows服务应该在后台运行。他们应该在启动后立即将控制权交还给服务经理,因此通常会启动一个线程来处理您的服务任务。
话虽如此,System.Threading.Timer类应该可以很好地启动定期运行的计时器。
至于安装,您应该使用Installutil.exe - 这是安装Windows服务的标准方法。
我建议您查看this codeproject article.它有一个很好的,干净的模板,您可以使用它。此外,还有一个批处理文件示例,以简化Installutil的使用,这可能使它“更好”。
答案 2 :(得分:2)
如果您使用VS2008进行开发,那么您可以使用模板创建Windows服务。
基本上,您将创建一个Timer(System.Windows.Timers.Timer),在OnStart方法上进行初始化,在OnStop方法上执行清理和完成操作,并初始化Timer(在OnStart上,或使用OnCommand) )
您可以在basic example或此处查看此内容,例如timers
对于安装,除了另一个答案中的选项外,您还可以创建一个安装程序项目,再次检查模板项目
答案 3 :(得分:2)
是的,Windows服务可以并且确实在后台运行。要每2分钟执行相同的工作,请使用system.Timer类并将代码放入onElapsed事件中。我最近创建了这种类型的服务,发现你可以使用两种类型的计时器,确保使用正确的计时器,否则你将找不到onElapsed事件。
我没有尝试在没有InstallUtil.exe的情况下进行安装,但我确实有一个我使用的.bat文件,该文件作为主应用程序安装的一部分运行。
关于从Windows服务运行.exe以从我使用过的Windows服务运行.exe的后续问题:
Process p = new Process();
p.StartInfo.WorkingDirectory = @"C:\";
p.StartInfo.FileName = @"C:\demo.exe";
p.StartInfo.CreateNoWindow = true;
p.Start();
p.WaitForExit();
请记住,可执行文件将在与服务相同的级别运行,这意味着它无法在桌面上显示任何内容。如果您希望看到任何窗口打开或.exe需要任何用户输入,那么您将失望并且.exe可能会无限期地等待。 (我发现此链接Launch external programs有所帮助,而且还有这个问题 - Launching an Application (.EXE) from C#)
答案 4 :(得分:1)
您也可以使用sc.exe将您的应用程序安装为服务,但它与InstallUtil.exe的安装确实没有太大区别。它确实可以从命令行提供对服务的更多控制。
Here is an older article describing sc.exe's use.同样只是从命令提示符运行sc将显示它可能的命令。
答案 5 :(得分:0)
正如另一种想法一样,如果创建服务太难,您可以安排任务每两分钟运行一次。