Articles of 服务

Windows服务无法正常工作

我准备了一个WCF服务库和Windows服务的应用程序。 在Code项目的这个链接的帮助下,我已经完成了整个过程。 在创buildWCF的所有function之后,它成功构build并创build了WCF DLL文件。 现在,我在相同的解决scheme资源pipe理器中创build了Windows服务项目,以托pipe服务DLL。 在OnStart方法里面我写了下面的代码: namespace WindowsService1 { public partial class Service1 : ServiceBase { ServiceHost sHost; public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { sHost = new ServiceHost(typeof(WcfServiceLibrary1.Service1)); sHost.Open(); } protected override void OnStop() { sHost.Close(); } } } 为了添加WcfServiceLibrary1 ,我在这个服务中添加了WCF DLL的引用。 为此,请右键单击解决scheme资源pipe理器中的项目,然后select添加引用 。 要在引用中添加DLL,请在出现的窗口中select浏览选项卡,然后导航到WCF服务库所在的文件夹。 在那个位置,DLL可以在“bin \ Release”文件夹中find。 在添加引用后,它没有提供任何错误,但是当我正在构build解决scheme时,会出现以下错误: 无法findtypes或名称空间名称“WcfServiceLibrary1”(是否缺lessusing指令或程序集引用?) […]

在服务中是否有与WndProc相当的安全性?

这个问题接收Windows消息服务解决了我有的问题,并build议不要创build一个wndproc,以避免粉碎攻击。 问题是我有一个Windows应用程序我想转换为使用Asynchronous Winsock的服务,因此需要一个wndProc来操作。 鉴于我不在乎显示窗口,下面的安全措施是否能防止破碎的攻击? 我将wndProc复制过来,但用一个简单的返回值0来replace默认处理程序(当前调用DefWindowProc()); 。

Windows服务产生的进程比GUI产生的进程慢3至4倍

我用Borland C ++编写了一个服务应用程序。 它工作正常。 在ServiceStart(TService * Sender,bool&Started)例程中,我调用mjwinrun来启动一个进程来处理macros。 这个过程没有用户界面,任何错误logging到一个文件。 它将继续运行,直到服务器重新启动,closures或使用任务pipe理器终止进程。 这是mjwinrun: – int mjwinrun(AnsiString cmd) { STARTUPINFO mjstupinf; PROCESS_INFORMATION mjprcinf; memset(&mjstupinf,0,sizeof(STARTUPINFO)); mjstupinf.cb=sizeof(STARTUPINFO); if (!CreateProcess(NULL,cmd.c_str(),NULL,NULL,TRUE,0,NULL,GetCurrentDir().c_str(),&mjstupinf,&mjprcinf)) { LogMessage("Could not launch "+cmd); return -1; } CloseHandle(mjprcinf.hThread); CloseHandle(mjprcinf.hProcess); return mjprcinf.dwProcessId; } cmd是启动macros队列处理器的命令行。 我使用了一个CPU /内存密集型的macros,并将它的时序写入文件。 这是我发现的: 1)如果在login会话中从命令行启动macros处理器,则无论运行的是哪个Windows核心,macros都将在6秒内完成。 2)如果macros处理器是从Vista核心或更低版本(使用上面的mjwinrun)启动的服务启动的,则macros在6秒内完成。 3)如果macros处理器是从在Windows 7内核或更高版本上启动的服务(使用上面的mjwinrun)启动的,则macros将在超过18秒内完成。 我已经尝试了CreateProcess的所有不同的标志,没有一个有所作为。 我已经尝试了所有不同的服务帐户,这没有任何区别。 我尝试设置任务,I / O和Page的各种优先级,但都没有区别。 就好像这个服务的产生的进程在某种程度上受到了限制,而不是以I / O方式,而是在CPU /内存使用方面。 任何想法在Windows 7以后发生了什么变化?

WCF作为服务托pipe

我有一个VB.NET WCF服务作为一个窗口服务托pipe。 我能够创build一个安装包,将服务安装到我的机器上,然后从“pipe理工具”中的“服务”手动启动服务。 现在,当我尝试在我的testing控制台应用程序(地址: http:// localhost:8080 / )中引用服务时,出现以下错误: 下载“http:// localhost:8080”时出错 无法连接到远程服务器由于目标机器主动拒绝它127.0.0.1:8080`,因此无法build立连接 元数据包含无法parsing的引用:“http:// localhost:8080 /”。 无法连接到http:// localhost:8080 / 。 TCP错误代码10061:由于目标机器主动拒绝127.0.0.1:8080,所以无法build立连接。 无法连接到远程服务器由于目标机器主动拒绝,无法build立连接127.0.0.1:8080如果在当前解决scheme中定义了服务,请尝试构build解决scheme并重新添加服务引用。 不知道我能做些什么。 有任何想法吗??? 谢谢,杰森。 以下是我的服务中app.config的代码: <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.diagnostics> <sources> <!– This section defines the logging configuration for My.Application.Log –> <source name="DefaultSource" switchName="DefaultSwitch"> <listeners> <add name="FileLog"/> <!– Uncomment the below section to write to […]

Delphi中带有数据库连接的Windows服务

我只想要一个关于情况的小费。 我创build了一个Windows服务来完成我的应用程序的任务pipe理。 该服务连接到数据库(Firebird)并调用执行任务pipe理的组件。 该过程工作正常,但是,在Windows 10中,服务不会在重新启动计算机后自动启动。 在其他版本的Windows中,一切正常。 在testing中,我发现如果我对调用任务执行的方法发表评论,服务通常从Windows 10开始。 Procedure TDmTaskService.ServiceExecute(Sender: TService); Begin Inherited; While Not Terminated Do Begin //Process; Sleep(3000); ServiceThread.ProcessRequests(False); End; End; 问题是组件或服务中没有任何exception。 通过分析Windows事件监视器,我发现与我的服务发生的错误是超时,在这种情况下服务无法连接到服务pipe理器的时间限制。 没有更多的例外生成。 有没有人有任何关于在Delphi中连接到数据库的Windows服务? 我的源代码示例: **Base class:** unit UnTaskServiceDmBase; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs; type TDmTaskServicosBase = class(TService) private { Private declarations } public function GetServiceController: TServiceController; […]

SC删除不删除服务

所以我正在运行Windows Server 2008 R2 Standard,并试图用' sc delete <myservicesname> '来删除一个服务,而且这个命令似乎没有抱怨地执行,但是当我运行命令后检查服务列表时,服务是还在那儿。 有任何想法吗?

有没有办法睡觉,除非收到消息?

我正在一个服务的主循环如下所示: while (fServer.ServerState = ssStarted) and (Self.Terminated = false) do begin Self.ServiceThread.ProcessRequests(false); ProcessFiles; Sleep(3000); end; ProcessRequests很像Application.ProcessMessages 。 我不能true做到这一点,因为如果我这样做,它会阻塞,直到从Windows收到一条消息,ProcessFiles将不会运行,它必须不断运行。 睡眠在那里,以保持CPU使用率下降。 这工作得很好,直到我试图从Windows的服务pipe理列表closures服务。 当我点击“停止”时,它会发送一条消息,并希望几乎立即得到响应,如果它处于该“睡眠”命令的中间,则Windows会给我一个错误信息,指出服务没有响应“停止”命令。 所以我需要说的是“睡眠3000或直到收到一条消息,以先到者为准”。 我确定有一个API,但我不知道它是什么。 有人知道吗?

Windows Server 2003上的内存使用情况说明

我们一直在努力工作。 我们在两台机器上安装了一个应用程序服务,两台机器都运行Windows Server 2003.这些服务完全一样。 但是,一旦加载,其中一个服务使用比其他服务less200mb。 对于可能导致这种差异的情况,我们有点不知所措。 我想知道是否有某种服务器设置,会导致应用程序使用更多的内存(堆块大小)或任何解释这一点。 如果任何人有什么可能导致这个问题,或如何找出是什么原因造成这个问题,我会非常感激。

从Windows 7服务启动应用程序

目前,我们正在使用一个由用户定义的函数启动的报表打印应用程序,该应用程序位于作为服务运行的Firebird数据库中。 UDF由一个简单的DLL组成,该DLL启动报告应用程序,并通过“CreateProcessAsUser”API传递要打印的报告ID。 具体来说,我们模拟一个特定的Windows帐户,以访问用户的打印机。 运行该软件的计算机从不参加。 没有人真的打开一个会议。 所以我们就是这么做的: LogonUser( sUser, nil, sPass, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken ); … LoadUserProfile(hToken, ProfileInfo); … ImpersonateLoggedOnUser(hToken); … StartupInfo.lpDesktop := Pchar('Winsta0\Default'); CreateProcessAsUser(hToken,nil, Pchar(sCommand), nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo); … UnloadUserProfile(hToken,ProfileInfo.hProfile); 现在我们已经转移到了Windows 7平台,显然,它不再工作。 即使用户没有login,是否仍然可以冒充用户帐号,并在Windows Vista / 7下使用他的打印机? (否则,我会使用用户当前活动的会话ID) 谢谢你的帮助

tcp错误代码10060调用WCF服务

我有一个Windows服务,呼叫到同一台服务器上的IIS托pipe的WCF。 这工作得很好,直到我们的虚拟服务器崩溃,不得不重build。 从那时起,当windows服务尝试调用这个WCF服务时,我得到了“tcp error code 10060”错误。 它给出的IP不存在,它是一个旧的IP地址。 在代码或configuration文件中的任何地方都没有指定IP地址。 我可以从该机器和任何其他我称之为的机器从IE启动WCF服务。 我被告知DNS是好的。 还有什么我在某处失踪?