Ham*_*jan 5 .net windows-services self-updating
我们已经构建了一个在客户端计算机上运行的Windows服务,该服务偶尔会下载其自身的较新版本,然后执行自我更新:安装新服务,启动它,停止旧服务并最终将其删除。该服务无法直接停止自身并做其他事情,因此它旋转了另一个可执行文件,完成了一些工作。正确地做到这一点是棘手的,当使用较新的.Net Framework构建较新的服务时(例如最近从.Net 2.0到.net 4.0的转换),这尤其糟糕。问题是.Net 2.0库无法在.Net 4.0服务上运行。
现在,一种方法是让服务的旧版本旋转一个新版本附带的帮助程序,但是...如果该服务的行为发生了重大变化,该怎么办?即使有些事情通常保持不变,我也对不混淆版本感到更安全-有助于降低设计复杂性。
现在,在Windows Services上似乎有一种.Net版本无关的操作方式:该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
Run Code Online (Sandbox Code Playgroud)
Microsoft(R).NET Framework安装实用程序2.0.50727.4927版本(c)Microsoft Corporation。版权所有。
初始化安装时发生异常:System.BadImageFormatException:无法加载文件或程序集“ file:/// [path] \ MyService4.exe”或其依赖项之一。该程序集由比当前加载的运行时新的运行时构建,无法加载。
您的本机 C++ 应用程序可以调用此处记录的函数:http://msdn.microsoft.com/en-us/library/ms685942 (v=VS.85).aspx(其他人提到的 SCM API)
你会想做一些类似的事情
OpenSCManager
OpenService (or CreateService)
ChangeServiceConfig
CloseServiceHandle
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1589 次 |
| 最近记录: |