Tag: windows services

如何在Windows服务中显示表单。

我想在我的Windows服务中加载OnStart()方法中的表单; 这是我的代码。 它不起作用。 你能帮忙吗? protected override void OnStart(string[] args) { Form1 fr = new Form1(); fr.Show(); }

从Windows服务获取桌面大小?

我正试图从我写的服务中获取Windows桌面的大小(整个而不仅仅是单个屏幕)。 在WinForms中 – 标准的C#方法: SystemInformation.VirtualScreen.Width SystemInformation.VirtualScreen.Height 似乎工作(如果您导入Winforms DLL,我想避免) – 但它返回错误的值。 桌面大小为2048×768 (2个屏幕),但服务报告为1024×768 (可能只在其中一个屏幕上显示。) 检查服务与桌面交互的选项无效。 有什么想法吗? 编辑: 在C#发布的解决方案:获取完整的桌面大小? 不要在服务内部工作。 他们都报告错误的价值。 有趣的是,似乎报告的值变化并且与实际桌面大小无关(有些机器报告800×600即使该机器上的单个显示器具有更高的分辨率。) 那么 – 还有什么想法吗? 删除到注册表和/或命令行是可以的。 唯一的限制是我无法启动winforms应用程序来解决它。

如何从exe服务运行exe并在exe进程退出时停止服务?

我是一个使用Windows服务的完全初学者。 我有一个基本的骨架为服务工作,我目前正在这样做: protected override void OnStart(string[] args) { base.OnStart(args); Process.Start(@”someProcess.exe”); } 只是为了在程序开始时启动exe。 但是,当进程从exe退出开始时,我想让服务停止。 我很确定我需要做某种线程(我也是初学者),但我不确定这是如何工作的总体轮廓,也不确定从内部阻止进程的具体方法。 你能帮我解决这个问题的一般过程(即从OnStart开始一个线程,那么……?)? 谢谢。

使用c#查找与Windows服务关联的实际可执行文件和路径

我正在为我公司的一个产品安装程序。 该产品可以多次安装,每个安装代表一个单独的Windows服务。 当用户升级或重新安装程序时,我想查找正在运行的服务,找到属于该产品的服务,然后找到该服务的可执行文件及其路径。 然后使用该信息查找用户希望升级/替换/安装/等服务的哪一项服务。 在下面的代码示例中,我看到了服务名称,描述等,但没有看到实际的文件名或路径。 有人可以告诉我我错过了什么吗? 先感谢您! 我的代码如下: ServiceController[] scServices; scServices = ServiceController.GetServices(); foreach (ServiceController scTemp in scServices) { if (scTemp.ServiceName == “ExampleServiceName”) { Console.WriteLine(); Console.WriteLine(” Service : {0}”, scTemp.ServiceName); Console.WriteLine(” Display name: {0}”, scTemp.DisplayName); ManagementObject wmiService; wmiService = new ManagementObject(“Win32_Service.Name='” + scTemp.ServiceName + “‘”); wmiService.Get(); Console.WriteLine(” Start name: {0}”, wmiService[“StartName”]); Console.WriteLine(” Description: {0}”, wmiService[“Description”]); […]

ServiceBase.Run(ServiceBase )方法是否异步运行数组中的所有服务?

ServiceBase[] servicesToRun; servicesToRun = new ServiceBase[] { new Service1(), new Service2() }; ServiceBase.Run(servicesToRun); 这将如何运作? 将运行Service1,当它的OnStart()完成时,Service2的OnStart()将运行,或者它们两者将同时运行? 如果是这种情况,我明确要在运行Service2.OnStart()之前完成Service1的OnStart ,我该怎么办? 这会诀窍: ServiceBase.Run(new Service1()) ServiceBase.Run(new Service2())

应用程序关闭时的任务处理

我有一个.Net(v4.0)Windows服务应用程序,它在开始时旋转一个tpl任务,执行某些长时间运行的活动,并且基本上在应用程序的生命周期内保持活动状态,因此使用TaskCreationOptions创建。 LongRunning参数值。 每当服务停止并且.OnStop()方法被调用时,我.Cancel()我在创建它时移交给工作任务的CancellationToken(Source)我想要它.OnlyOnCanceled(…)继续任务到跑。 问题是,服务/流程关闭而没有继续任务“完全”运行 – 有时它会相当快地退出,有时它会完全运行,有时则不会。 这对我来说是有意义的,因为该特定任务可能位于另一个线程而不是主线程上,因此无法“阻止”/阻止主要任务结束。 因为我在那个Windows服务应用程序中没有SynchronizationContext,所以我无法告诉延续任务在主线程上运行/所以我想知道:我该怎么做? 更确切地说,运行tpl任务处理应用程序关闭的最佳实践是什么?

暂停/恢复PC时,使Windows服务停止并正常启动的正确方法是什么?

我需要在PC关机进入挂起模式时停止我们的Windows服务,并在PC再次恢复时重新启动它。 这样做的正确方法是什么?

当WCF服务运行批处理文件时,XCopy或MOVE不起作用。 为什么?

我遇到过这样一种情况,即同一批处理文件与命令行的工作方式不同,以及何时从IIS上托管的WCF服务触发。 区别在于XCOPY命令。 当我正常运行批处理文件时,XCOPY会移动我需要的所有数据 XCOPY “C:\from” “C:\to” /K /R /E /I /S /C /H /G /X /Y 但是当它从WCF服务运行时,不会复制任何内容。 从我的服务运行批处理我使用以下代码在C#中执行批处理文件稍作修改。 我的应用程序拉动在LocalSystem帐户下运行。 我还尝试使用自己的帐户进行应用程序调查 – 不起作用。 怎么了? 简短更新:我最近学到的是我的WCF服务在App Pool User下运行,但过程不是。 为了实验,我在流程开始代码中进行了更新 var pwdArray = “mypassword”.ToArray(); var pwd = new System.Security.SecureString(); Array.ForEach(pwdArray, pwd.AppendChar); processInfo.UserName = “myuser”; processInfo.Password = pwd; processInfo.Domain = “LocalMachine”; 但它没有帮助。 似乎在描述的条件下运行XCOPY是神秘的。 还有一个更新:在常规Windows服务下启动的进程中也发现了与XCopy相同的问题。

自定义C#config无法识别的元素exception

我在App.config中有以下针对.NET 3.5 Windows服务的位: 我在configurationServiceSection.config中有这个: 这是代码: using System.Configuration; namespace SomeApp.Framework.Configuration { public sealed class ConfigurationServiceSection : ConfigurationSection { [ConfigurationProperty(“ConfigurationServices”, IsDefaultCollection = true, IsRequired = true)] [ConfigurationCollection(typeof(ConfigurationServices))] public ConfigurationServices ConfigurationServices { get { return (ConfigurationServices)base[“ConfigurationServices”]; } } } public sealed class ConfigurationServices : ConfigurationElementCollection { protected override ConfigurationElement CreateNewElement() { return new ConfigurationService(); } protected override object […]

Windows服务无法启动(错误1053)

我有一个Windows服务,我正在尝试调试。 现在即使当前的代码工作也无法启动。 错误是: Windows无法在本地计算机上启动MyService服务 错误1053:服务未及时响应启动或控制请求。 为了隔离错误,我试图将所有内容都注释掉。 主要方法如下: TextWriter tt = new StreamWriter(@”C:\startup.text”, true); tt.WriteLine(“Starting up the service”); tt.Close(); ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new MyService() }; TextWriter tt2 = new StreamWriter(@”C:\startup.text”, true); tt2.WriteLine(“Run…”); tt2.Close(); 它将“启动服务”和“运行…”打印到日志文件中。 我也剥离了MyService的内部,所以它是空的。 在任何代码周围都有一个try / catch,现在可以简化为上面的一些日志行。 我从未输入将记录它的catch语句。 OnStart中的所有内容都已被注释掉: protected override void OnStart(string[] args) { } 所以我基本上没有想法。 我认为错误是因为Start方法永远不会完成(或者不会在30秒内完成)。 是否有其他方法被调用? 任何想法都表示赞赏。 额外信息: […]