gpt4 book ai didi

.net - 寻找 SC.exe 实用程序的 API,以及关于 self 更新 Windows 服务的建议

转载 作者:行者123 更新时间:2023-12-03 23:59:27 25 4
gpt4 key购买 nike

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

7年前关闭。




Improve this question




我们已经构建了一个在客户端机器上运行的 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 接口(interface)的本地 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..

最佳答案

sc.exe 实际上始终位于同一路径:%windir%\System32\sc.exe(x64 使用 System32 处理 64 位二进制文​​件:-)。不知道您当前的设置如何,但如果您有,或者可以切换到 MSI - 它可以运行自定义安装操作,可以是您的新 .exe 配置文件,用于 SCM API 或仅启动 sc.exe 2-3 次停止、配置、启动。从技术上讲,您甚至可以使用 .cmd 作为 MSI 中的自定义安装操作,但它可能看起来有点难看(用户看到 cmd 窗口即将出现)。

如果你想使用 SCM API 并且你知道你的 C++,那绝对是最好的方法——中间没有层来搞砸。此外,一旦您有单独的二进制文件仅用于安装任务,您就不会受到 .NET 嵌入式安装过程的约束 - 您可以从 C# 和 C++ 获得相同的 NT API。 关键是执行管理任务以停止、启动、配置等服务的二进制文件必须与服务本身的二进制文件不同 - 这是 .NET 的问题 - 混为一谈。

由于您正在进行重大切换,如果您之前的安装不在 MSI 下,那么新的 MSI 将无法自行处理所有内容,因此您可能希望从字面上删除 .cmd 文件以停止并清理使用 sc.exe 的旧服务,只需启动干净,然后启动新的安装二进制文件 - 不管它是什么。 MSI 将停止并卸载窗口服务,但前提是它之前由 MSI 安装。那样有点粘:-)

关于.net - 寻找 SC.exe 实用程序的 API,以及关于 self 更新 Windows 服务的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3427598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com