Tag: windows services

使用NLog的Windows服务

我正在创建一个Windows服务,我想使用NLog。 我希望将日志写入服务的安装位置,如下所示: PathToInstalledService\Logs\MyLog.txt 这当然需要管理员的权益。 所以我的问题是,在为服务创建安装时,我应该在ServiceProcessInstaller上使用什么帐户。 我一直在使用LocalService,但此帐户没有所需的高程。 谢谢。

以编程方式将Windows服务添加到Windows防火墙(安装期间)

可能重复: 以编程方式将应用程序添加到Windows防火墙 在我的解决方案中,我有一个Windows服务项目和安装程序来安装此服务如何在安装过程中将此服务添加到Windows防火墙。

服务需要哪个用户权限才能启动/停止其他服务?

我写了一个应该启动/停止其他服务的服务。 这是我正在使用的代码: ServiceController sc = new ServiceController(“servicename”); if(sc.Status != ServiceControllerStatus.Running) { sc.Start(); } 这是exception的callstack。 (对不起,但邮件是用德语本地化的,但这与理解我的问题无关) System.InvalidOperationException: Der Dienst SCardSvr kann nicht auf dem 电脑 。 geöffnetwerden。 —> System.ComponentModel.Win32Exception:Zugriff verweigert — Ende derinternenAusnahmestapelüberwachung— bei System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess) bei System.ServiceProcess.ServiceController.Start(String [] args) bei System.ServiceProcess.ServiceController.Start() 目前我正在’Networkservice’下运行该服务。 我想该帐户不足以满足必要的用户权限。 我将创建一个新用户,该用户具有启动/停止任意服务所需的最小权限。 这个新的useraccount需要什么权限?

凭证存储最佳实践

我正在编写Windows服务,需要进行经过身份validation的Web请求。 该服务不会在用于发出请求的凭据的所有权下运行; 这意味着我需要以某种方式存储请求的凭据。 这里的最佳做法是什么? 凭证需要存储在App.config(或模拟)中; 我宁愿没有用明文挂掉密码。 由于密码经常更改,因此无法在密码中构建或以其他方式烘焙二进制文件。 同样的问题适用于Powershell。 我需要进行经过身份validation的请求,但我不希望脚本以纯文本格式包含用于请求的凭据。

Windows服务 – 如何使名称可配置

我在C#中编写了一个Windows服务。 一开始的要求是我应该只运行该服务的一个实例,但是已经改变了,现在我需要多个实例。 这就是我需要根据配置文件更改服务名称的原因。 使用正确的名称注册的最佳方法是什么? 我应该写另一个工具来做吗? 我可以从App.config文件中读取名称并在服务和安装程序类中相应地设置它吗? PS>我真的不明白名称的工作原理 – 应该在服务和安装程序类中设置名称,但是在使用installutil.exe甚至PowerShell new-service进行安装时,也应该指定名称。 那必须是一样的吗? 或者一个覆盖另一个?

Fire timer_立即从Windows服务中的OnStart中获取

我正在使用System.Timers.Timer ,我在ac#windows服务的OnStart方法中得到了如下代码。 timer = new Timer(); timer.Elapsed += timer_Elapsed; timer.Enabled = true; timer.Interval = 3600000; timer.Start(); 这导致timer_Elapsed的代码从我启动服务后的一小时开始每小时执行一次。 有没有办法让它在我启动服务时执行,然后每小时执行一次? timer_Elapsed调用的方法运行时间太长,无法直接从OnStart调用它。

C#:简单的Windows服务提供安全例外

我正在通过以下链接进行演练: http : //msdn.microsoft.com/en-us/library/zt39148a%28VS.80%29.aspx 我一点一点地跟着它。 我成功安装了该服务,但是,当我尝试运行它时,会出现以下错误消息: “MyNewService.Exe [5292]中发生了未处理的exception(”System.Security.SecurityException“)。 我已经看到,对很多人来说,它有效,但有些人得到了这个例外,但我找不到答案。 有没有人有想法? 谢谢。

在Windows服务中运行的线程中最终不会执行

任何人都可以解释为什么这个finally块没有被执行? 我已经阅读了关于何时期望最终阻止不被执行的post,但这似乎是另一种情况。 此代码需要TopShelf和log4net。 我正在运行.net 4.5 我想它必须是Windows服务引擎启动未处理的exception,但为什么它在finally块完成之前运行? using log4net; using log4net.Config; using System; using System.Threading; using Topshelf; namespace ConsoleApplication1 { public class HostMain { static void Main(string[] args) { HostFactory.Run(x => { x.Service(s => { s.ConstructUsing(name => new HostMain()); s.WhenStarted(tc => tc.Start()); s.WhenStopped(tc => tc.Stop()); }); x.RunAsLocalSystem(); x.SetServiceName(“TimerTest”); }); } public void Stop() { LogManager.GetLogger(“MyLog”).Info(“stopping”); } […]

使用安装项目在安装时指定Windows服务名称

目标:为了支持在一台计算机上可能有多个实例的Windows服务,请使用安装项目创建一个能够执行以下操作的MSI: 接收服务名称的用户输入 安装服务 从1序列化服务名称(以便在记录和卸载时使用正确的名称) 我最初的希望是在App.config中设置服务名称(然后在实例化ServiceInstaller时卸载时检索它。这似乎很天真,因为在安装过程中无法访问它。 如果MyInstaller扩展了Installer,它可以调用base.Install(); 但是,我尝试写入app.config(在MyInstaller.Install()内和base.Install()之后)是无效的。 因此,虽然可以使用自定义服务名称安装服务,但该名称未进行序列化,安装程序在卸载时最不满意。 该怎么做?

以编程方式使用C#删除服务

可能重复: 如何在C#中以编程方式安装Windows服务? 有没有办法以编程方式使用C#删除服务而无需执行“InstallUtil.exe / u MyService.exe”?