加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – 寻找SC.exe实用程序的API,以及有关自我更新Windows服务

发布时间:2020-12-14 05:29:36 所属栏目:Windows 来源:网络整理
导读:我们构建了一个在客户端计算机上运行的 Windows服务,它偶尔会下载更新版本的自身,然后执行自我更新:安装新服务,启动它,停止旧服务,最后删除它.该服务无法直接停止并执行其他操作,因此它会旋转另一个可执行文件,从而完成一些工作.实现这一点很棘手,当使用较
我们构建了一个在客户端计算机上运行的 Windows服务,它偶尔会下载更新版本的自身,然后执行自我更新:安装新服务,启动它,停止旧服务,最后删除它.该服务无法直接停止并执行其他操作,因此它会旋转另一个可执行文件,从而完成一些工作.实现这一点很棘手,当使用较新的.Net Framework构建较新的服务时(例如最近从.Net 2.0切换到.net 4.0),这一点尤其糟糕.问题是.Net 2.0库无法在.Net 4.0服务上运行.

现在,一种方法是让旧版本的服务旋转一个辅助程序,该程序随新版本一起提供,但是…如果它的行为以破坏方式改变怎么办?我觉得不要混淆版本更安全,即使有些东西通常保持不变 – 有助于降低设计复杂性.

现在,似乎有一种.Net版本中立的Windows服务操作方式:sc.exe工具:http://support.microsoft.com/kb/251192

我想知道这是不是我正在寻找的银弹.现在,因为我将以编程方式调用此人并检查错误,所以我不妨使用API??.理想情况下,我会有一个本机C项目,它编译为与SC.exe接口的本机exe.这可能吗?如果没有,那么我该如何在不同的计算机上找到sc.exe呢?它们可以是32位或64位,并运行从Win XP SP2 / 3开始的任何版本的Windows.

如果您对我的问题或一些巧妙的想法有疑问,或者对我在这里提出的确切问题的答案,请告诉我.

编辑:如果我尝试使用2.0代码安装4.0服务,我会得到与我一样的错误:

> C:WindowsMicrosoft.NETFrameworkv2.0.50727InstallUtil.exe MyService4.exe

Microsoft (R) .NET Framework
Installation utility Version
2.0.50727.4927 Copyright (c) Microsoft Corporation. All rights reserved.

Exception occurred while initializing
the installation:
System.BadImageFormatException: Could
not load file or assembly
‘file:///[path]MyService4.exe’ or one
of its dependencies. This assembly is
built by a runtime newer than the
currently loaded runtime and cannot be
loaded..

解决方法

您的本机C应用程序可以调用此处记录的功能: http://msdn.microsoft.com/en-us/library/ms685942(v=VS.85).aspx(其他人提到的SCM API)

你会想做一些事情

OpenSCManager
OpenService (or CreateService)
ChangeServiceConfig
CloseServiceHandle

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读