问题标签 [service-control-manager]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - 远程 OpenSCManager 失败并拒绝访问
我正在尝试使用以下代码控制远程机器上的服务:
当从我们本地域中的计算机运行并针对同一域中的计算机时,这可以正常工作,无论是使用当前登录用户的凭据还是使用其他凭据时。
但是,当我尝试以不在任何域上的计算机为目标时,OpenSCManager
如果我指定的不是SC_MANAGER_CONNECT
所需的访问权限,则调用将失败并拒绝访问。从域外的计算机定位域计算机是可行的(使用作为目标计算机本地管理员的域用户的用户/域/密码组合)。从域外的计算机定位域外的计算机不起作用。
用户/密码是目标计算机上管理员组的成员,因此帐户权限应该没有问题。
我已经使用sc -sdshow scmanager
它检查了 scmanager 安全描述符,它对于域计算机和非域计算机是相同的。两者都运行 Windows 7 64 位。
我还测试过使用psexec,它具有相同的症状,即在域计算机之间可以正常工作,但在针对非域计算机时却不行。
我还测试了在目标机器上禁用 RPC over TCP 并重新启动它,因为这被描述为访问被拒绝错误的可能原因,但这似乎没有帮助。我还测试了在目标机器上禁用 Windows 防火墙,但没有改变。
是否需要启用某些设置才能使服务的远程配置正常工作?
c# - ServiceControlHandler 用于 USB 设备通知,OnStop() 不可实现
我想编写一个服务来监听设备通知(USB 媒体插入、移除)。在 C# 服务中侦听设备通知的问题是,这System.Windows.Forms.Control.WndProc
是不可用的,因为 Windows 服务没有任何窗口。
我在如何编写这样的服务上找到了这个 HowTo。那篇文章的作者找到了一种解决方法,它可以让服务侦听设备通知而不是服务控制消息,因此,该服务不再支持 OnStop()。
(26.01.13 更新:)
遗憾的是,我并不真正了解服务控制管理器和 Windows API。我想知道是否可以同时注册服务控制消息和 USB 设备通知,或者这是否真的是服务收听设备通知的唯一选择。我还没有找到任何(我可以理解的)信息来解决我的问题。
是否可以在System.Windows.Forms.Control.WndProc
不生成窗口的情况下使用(我只需要添加 System.Windows.Forms 程序集,对吗?)。
(更新 27.01.13 :)
我刚刚发现了这个问题:无法在 Windows 7 上从 Windows 服务启动桌面应用程序
第二个答案说,Windows 服务在 Windows Vista 中进行了以安全为中心的改造,现在在会话 0 中创建了 GUI 元素即使选中了“允许服务与桌面交互”。这是否意味着,我可以创建一个 Windows 窗体,然后接收 USB 设备事件(因此,我不需要弄乱ServiceControlHandler
?这样做有什么警告或问题吗?
简而言之,我需要一个执行以下操作之一的解决方案:
- 使 OnStop 再次可用,或
- 在 Windows C# 服务中提供另一种侦听 USB 设备通知的方法
我的源代码目前如下。它与我在第一段中链接的 HowTo 提供的源代码几乎相同。我所做的唯一区别是删除 FileSystemWatcher 私有字段及其所有用法,因为我不需要 FileSystemWatcher。
USBBackup.cs(服务本身 - 使用排除在我的源代码中但完整的语句):
Win32.cs:
c# - 服务控制管理器 (SCM) 对服务上的方法调用做出什么保证?
服务控制管理器 (SCM) 对服务上的方法调用做出什么保证?
它是否保证不会出现以下情况?
- 服务停止时的 OnStart/OnPause/OnContinue
- 服务暂停时的 OnStart/OnPause
- 服务运行时 OnStop/OnContinue
- 在命令方法已被执行时调用的任何命令方法
- OnStart 而 OnStart 已经在执行
- OnPause 执行时的 OnStop
到目前为止,我发现的最佳参考似乎表明确实做出了这些保证,但我发现的文档中唯一的参考非常模糊,所以我试图找到更好的参考。
这是 MSDN 论坛上的一个帖子,它说 SCM 确保状态是一致的,或者“至少我从来没有发现 [如果服务未运行或暂停,SCM 发送停止请求] 可能发生的情况”。
这是迄今为止我在文档中找到的最佳参考:
这些方法 [OnStart/OnStop/etc.] 表示服务在其生命周期中经历的状态;服务从一种状态转换到另一种状态。例如,在调用 OnStart 之前,您永远不会让服务响应 OnContinue 命令。
c# - Windows 服务是否需要确保命令可以在不同的线程上处理?
当通过服务控制管理器运行时,Windows 服务是否需要假设可以在不同的线程上调用命令处理方法(OnStart、OnStop 等),而无需确保例如对成员的分配在方法之间是可见的?
我无法保证我的示例中的异常不会被抛出,但我发现的所有示例,包括StackOverflow 上的其他地方,似乎都假设,例如,对 OnStart() 中的变量的赋值将始终在 OnStop() 中可见。
如果 SCM 没有做出这样的保证,我确实知道如何确保分配是可见的(例如,通过在服务中的所有读/写周围添加锁)。我对这些措施是否有必要感兴趣。
windows-services - 运行我的服务时,该服务每隔一分钟从服务控制管理器接收请求 SERVER_CONTROL_INTEGORATTE
在 Windows 2008 服务器机器上运行我的服务时,该服务每一分钟从服务控制管理器接收请求 SERVER_CONTROL_INTEGORATTE,因此他的服务的实际功能没有得到执行。在那台特定的机器上只有我面临这个问题,在其他机器上它工作正常。一些链接表明这个问题是由于防火墙造成的,即使我关闭了防火墙我也面临这个问题。请提出你的想法来解决这个问题。
php - 向 Windows 服务控制管理器 (SCM) 提供 IIS/PHP 权限
所以我正在调用一个 PHP 函数来访问 Windows 7 服务的状态,如下所示:
在本地安装的 WAMP 实例下运行时,该函数按预期返回一组信息。
在 IIS 下运行时,我返回错误状态 5,根据文档,它对应于以下错误:
所以使用phpinfo()
,我检查运行 PHP 环境的用户名。在 WAMP 站点上时,该服务在我的用户 ID(在 Windows 本地管理员组中)下运行。
在 IIS 版本下,用户是F6729-44TP6S7$
(这是我的计算机的名称,后跟一个$
)。因此,据推测,解决方案只是授予该用户对 Windows 中的服务控制管理器 (SCM) 的必要权限。
但问题是,我对 IIS(或 Windows)的内部运作了解不足,无法知道该用户 ID 的来源(这意味着我不知道如何授予它必要的权限)。该用户在我的计算机管理控制台中不存在,我也找不到它在 IIS 管理工具中的定义位置。
所以问题是:我需要做什么才能让这个 PHP 函数在 IIS 下运行?如何在 IIS 下向 PHP 管理器授予必要的权限。或者,如何更改运行 PHP 管理器的用户 ID?
windows - 无需重新启动即可重新初始化 Windows 事件日志服务
我正在开发记录到自定义事件日志的应用程序。应用程序最近更名了,并且事件日志的名称已更改(从“CompanyA Events”到“CompanyB Events”)。事件日志源(“Subsystem1”、“Subsystem2”等)的名称没有改变。应用程序安装程序从注册表中删除旧的日志条目并写入新的。
我注意到,在某些环境中(在 2008 R2 上经常发生)日志记录会停止,并且不会写入任何事件。有时事件实际上被写入了应该被删除的旧 evtx 文件。以下修复了问题:
- 重启机器
- 重新启动“Windows 事件日志”服务
由于访问被拒绝,即使我是管理员,也无法使用 SCM 完成后面的操作。但是,终止进程有效,并且我可以启动“Windows 事件日志”服务,之后事件日志记录正常工作。
问题:如何在不杀死进程或重新启动机器的情况下重新初始化事件日志服务?是否有某种记录或未记录的调用,我可以用它来指示事件日志服务它应该重新读取其配置?
permissions - 远程 sc OpenSCManager 查询失败 5 访问被拒绝
我正在编写一个脚本,定期检查某些服务是否在远程工作站上运行。我有一个魔鬼的时间让“SC \works1 query”命令从一台测试机器工作到另一台测试机器。两台机器都运行 XP pro SP3。两者都不是域的一部分。两者都在同一个工作组中,并且管理员帐户具有相同的密码。
我不断收到“[SC] OpenSCManager FAILED 5: Access is denied”消息,从一个工作站到另一个工作站。我已经尝试在两者上使用提升的权限。Windows 防火墙软件已关闭。事件安全日志中没有显示任何消息。当(作为管理员)我尝试进入“计算机管理”->“连接到另一台计算机”并访问远程服务时,我得到“错误 5 访问被拒绝”。
我可以成功在两台机器之间建立一个文件系统共享,并且“net use \works1\IPC$ /user:Administrator”成功完成,但是SC查询仍然失败。我在这些命令中使用的是 IP 地址而不是主机名,但这无济于事。我不知道还能尝试什么。谢谢您的帮助。
windows - 创建具有启动状态的虚拟 Windows 服务器
我使用以下命令创建了一个虚拟 Windows 服务:
sc create TestService binPath= C:\Temp\TestService.exe DisplayName= "TestService" start= auto
它成功地在 services.msc 中创建了一个虚拟服务,但我还需要它来显示“已启动”状态。我知道这需要一些编码,而我的 TestService.exe 是空白的。
知道怎么做吗?我通过网络搜索,它需要 MS Visual Studio 2010 等。看起来太复杂了,我只需要一个显示“已启动”状态的空白服务,该服务将用于测试目的。
ravendb - ServiceControl Beta 7.15 RavenDB 错误 - 无法在 MessagesViewIndex 上执行索引功能
包含产品名称的有用信息:
版本:
堆栈跟踪:
描述:
我刚刚将 ServiceControl 从 Beta6 升级到 Beta7.15,当我启动服务时出现以下错误(请参阅帖子底部),它似乎只是挂在那里。请注意,我通过以下脚本删除了以前的数据库,如说明中所述。
我还使用以下设置配置了 ServiceControl 配置文件。我成功地使用了Beta 6 的ServiceControl/Hostname
andServiceControl/ExposeRavenDB
设置。我刚刚添加ExpirationProcessTimerInSeconds
并HoursToKeepMessagesBeforeExpiring
使用了提供的说明。
您能提供的任何帮助将不胜感激。