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

前端之家收集整理的这篇文章主要介绍了.net – 寻找SC.exe实用程序的API,以及有关自我更新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:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.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

猜你在找的Windows相关文章