Tag: windows services

.NET控制台应用程序作为Windows服务

我有控制台应用程序,并希望将其作为Windows服务运行。 VS2010有项目模板,可以连接控制台项目和构buildWindows服务。 我不想添加分离的服务项目,并且如果可能的话,将服务代码集成到控制台应用程序中,以将控制台应用程序保持为可作为控制台应用程序运行的项目,或者如果例如通过使用开关的命令行运行, 也许有人可以build议类库或代码片断,可以快速,轻松地将C#控制台应用程序转换为服务?

带定时器的Windows服务

我用c#.net中的计时器创build了一个windows服务。 它工作正常,而我在Visual Studio中debugging/build立项目,但安装后不执行它的操作。 这背后的原因是什么? 代码: public partial class Service1 : ServiceBase { FileStream fs; StreamWriter m_streamWriter; Timer tm = new Timer(); public Service1() { InitializeComponent(); this.ServiceName = "timerservice"; tm.Interval = 2000; tm.Tick += new EventHandler(PerformOperations); tm.Start(); fs = new FileStream(@"c:\mcWindowsService.txt", FileMode.OpenOrCreate, FileAccess.Write); m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); } private void PerformOperations(object sener, EventArgs e) […]

如何从.NET中的Windows服务获取当前logging的用户名?

我有一个Windows服务需要当前login的用户名。 我尝试了System.Environment.UserName ,Windows身份validation和Windows窗体身份validation,但所有正在返回“ 系统 ”作为我的服务在系统特权中运行的用户。 有没有办法获得当前login的用户名而不改变我的服务帐户types?

如何打电话给我的WCF服务asynchronous?

我有一个从Windows服务调用的WCF服务。 WCF服务运行一个SSIS包,该包可能需要一段时间才能完成,我不希望我的Windows服务必须等待它完成。 我如何使我的WCF服务调用asynchronous? (或默认是asynchronous?)

Inno Setup for Windows服务?

我有一个.Net Windows服务。 我想创build一个安装程序来安装该Windows服务。 基本上,它必须做到以下几点: 安装包installutil.exe (是否需要?) 运行installutil.exe MyService.exe 启动MyService 另外,我想提供一个运行以下命令的卸载程序: installutil.exe /u MyService.exe 如何使用Inno Setup来做到这些?

如何从Windows服务运行控制台应用程序?

我有一个Windows服务,用C#写的,我需要从它运行一个控制台应用程序。 控制台应用程序也用C#编写。 当它不是从Windows服务运行时,控制台应用程序运行良好。 当它从ws运行时,它不会做任何事情,因为它应该工作10-20秒,我在debugging代码中看到一次执行。 我用以下代码启动我的控制台应用程序: proc.Start(fullPathToConsole, args); proc.WaitForExit(); 到控制台的path是正确的,当我试图从cmd运行它,或者只是在资源pipe理器(没有参数),它工作正常。 但是在运行服务之后,我看不出任何效果。 我已经尝试去服务属性,并授予它访问桌面和运行在系统和我的用户(也在服务属性中指定)。 全部保持不变。 另外:我知道服务没有用户界面,我不想要一个。 我想要服务来运行控制台应用程序。 没有必要从它得到任何数据或使用这个控制台像ui,只是运行它做的工作。 更新我:发现,运行钙或任何其他Windows应用程序很容易。 但仍然不能运行cmd或任何控制台应用程序。 其实我需要在XP SP2和Windows 2003 Server上运行它。 所以无论如何不需要与Vista交互。 会很高兴的任何意见!

使用Process.Start()从Windows服务中以不同的用户身份启动进程

我想定期从一个Windows服务指定的用户帐户运行一个任意的.NET EXE文件。 到目前为止,我已经得到了我的Windows服务与逻辑运行,以确定目标进程是什么,以及什么时候运行它。 目标进程以下列方式启动: Windows服务使用“pipe理员”凭据启动。 当时间到了,一个中间.NET进程被执行,参数详细说明哪个进程应该被启动(文件名,用户名,域名,密码)。 此进程创build一个新的System.Diagnostics.Process,将一个ProcessStartInfo对象与传递给它的参数进行关联,然后调用该进程对象上的Start()。 第一次发生这种情况时, 目标进程正常执行,然后正常closures 。 然而,随后的每一次,只要目标进程开始,它就会抛出错误“Application failed to initalize properly(0xc0000142)”。 重新启动Windows服务将允许进程再次成功运行(对于第一次执行)。 自然,目标是每次成功执行目标进程。 关于上面的步骤2:以不同的用户身份运行进程.NET调用win32函数CreateProcessWithLogonW。 此function需要一个窗口句柄才能login指定的用户。由于Windows服务未以交互模式运行,因此它没有窗口句柄。 这个中间过程解决了这个问题,因为它有一个窗口句柄可以传递给目标进程。 请不要使用psexec或Windows任务计划程序的build议。 我已经接受了我的生活,包括以上述方式解决问题。

当一个Timer事件引发时,Windows服务如何启动一个进程?

我创build了一个Windows服务与计时器和定时器的触发事件。我创build了一个进程( System.Diagnostics.Process.Start(exe path) ),间隔为5秒。 但是这个过程并没有在事件发生时被创build。 还有其他的方法吗? 提前致谢。 private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { Process pr = new Process(); pr.StartInfo.FileName = @"C:\Program Files\Messenger\msmsgs.exe"; pr.StartInfo.WindowStyle = ProcessWindowStyle.Normal; pr.StartInfo.CreateNoWindow = false; pr.Start(); }

我作为服务运行吗?

我目前正在为可以在控制台中运行的服务编写一个小引导代码。 本质上归结为调用OnStart()方法,而不是使用ServiceBase来启动和停止服务(因为如果不作为服务安装,并且使debugging成为一场噩梦,它不会运行应用程序)。 现在我正在使用Debugger.IsAttached来确定是否应该使用ServiceBase.Run或[service] .OnStart,但我知道这不是最好的主意,因为有时最终用户想要在控制台中运行该服务(请参阅输出等实时)。 有关如何确定Windows服务控制器是否启动“我”,或者用户是否在控制台中启动“我”的任何想法? 可用的Environment.IsUserInteractive不是答案。 我想过使用命令行参数,但这似乎是“肮脏的”。 我总是可以看到围绕ServiceBase.Run的try-catch声明,但这似乎很脏。 编辑:尝试赶上不起作用。 我有一个解决scheme:把它放在所有其他感兴趣的堆垛机: public void Run() { if (Debugger.IsAttached || Environment.GetCommandLineArgs().Contains<string>("-console")) { RunAllServices(); } else { try { string temp = Console.Title; ServiceBase.Run((ServiceBase[])ComponentsToRun); } catch { RunAllServices(); } } } // void Run private void RunAllServices() { foreach (ConsoleService component in ComponentsToRun) { component.Start(); } WaitForCTRLC(); foreach (ConsoleService […]

从非pipe理员用户帐户启动/停止Windows服务

我有一个名为BST的WindowsService。 我需要给一个非pipe理员用户,UserA,开始/停止这个特定的服务的权限。 我的服务运行在各种Windows操作系统上,从Windows Server 2003到Windows 7。 我该怎么做? 我GOOGLE了一下,发现了一些使用命令[sc sdset]给予权限的东西,但我不完全确定参数。 我不想为一个组设置权限,但是只针对一个特定的用户,在这种情况下是UserA。