小编eer*_*ick的帖子

如何让Windows服务自我更新?

我能找到的关于这个主题的所有解决方案都非常古老,而且似乎没有一个能回答我的问题......

我正在尝试创建一个可以自我更新(或通过某些外部触发器自动更新)的 Windows 服务。过去,我创建了一个使用 InstallShield 安装的 Windows 服务,我们可以通过让该服务将批处理脚本写入本地计算机,然后运行该批处理脚本,以一种黑客的方式更新自动更新服务,这将停止服务,用新文件覆盖服务可执行文件和其他文件,然后重新启动服务。这令人惊讶地奏效了。

但是,我已更新服务以使用 InstallUtil.exe,并且此自动更新脚本不再起作用...我认为这与 InstallShield 处理服务安装的方式与 InstallUtil 的处理方式有关...但我只能使猜测,因为我不完全理解每个人对注册表的作用。

由于我不能只覆盖文件并使用 InstallUtil 方法重新启动服务,因此我想编写一个运行 sc.exe 的批处理脚本来停止服务,完全卸载它,写入新文件,安装新服务文件,然后启动它...不幸的是,我似乎无法让 sc.exe 自动从 Windows 服务运行,因为它需要管理员权限...我尝试使用此代码片段强制它自提升到管理员权限,但它似乎不能作为服务工作(如果我从命令行而不是作为服务运行它,它可以正常工作)

if not "%1"=="am_admin" (powershell start -verb runas '%0' am_admin & exit /b)
Run Code Online (Sandbox Code Playgroud)

有谁知道如何让 Windows 服务进行自我更新?如果 .NET Core 中有某种我不知道的自我更新方法,我可以考虑更新到 .NET Core Worker 服务...任何想法都非常感激...实际上不应该这么难完成...

作为参考,这里是我当前使用的批处理脚本(忽略奇怪的变量,例如我动态替换其中的一些变量,它在手动启动时效果很好,只是在服务尝试运行它时不起作用):

@echo off
setlocal enableextensions enabledelayedexpansion


::make sure to run whole script as admin (this restarts scripts as admin if not already in admin mode)
if not "%1"=="am_admin" (powershell start -verb runas '%0' am_admin & …
Run Code Online (Sandbox Code Playgroud)

c# windows-services batch-file auto-update

6
推荐指数
1
解决办法
2240
查看次数

如何在模型上使用布尔值来包装数据库中的字符串值?

奇怪的问题,可能没有答案...我继承了一个旧的 mysql 数据库,不幸的是许多“布尔”字段被设置为 VARCHAR 而不是更合适的 TINYINT(1)...

我现在在数据库之上运行 Entity Framework Core。由于我不知道在哪里使用布尔值,所以我还不能更新数据库,但我希望能够在 EF 中实际使用字符串值作为布尔值...有没有办法改变模型类型,以便模型将所有内容整齐地包装为 bool,但当我将其推送到数据库时,它仍然将字段视为字符串?

本质上,在我的代码中,我希望能够执行以下操作: object.IsGood = true; 而不是这样:object.IsGood = "TRUE"

我的模型只会谨慎地处理值转换,就像这样写入数据库(并且我需要另一个转换器来从数据库读回布尔值):

string databaseValue = "";
if (object.IsGood)
{
  databaseValue = "TRUE";
}
else
{
  databaseValue = "FALSE";
}
Run Code Online (Sandbox Code Playgroud)

无论如何,我可以看到这样做,当我更改模型时,我实际上会更改数据库......我知道我可以将模型本身包装到另一个类中,但这似乎令人困惑。我很想更新数据库,但这可能会非常痛苦,因为要解开代码接触这些值的所有可能位置......所以我希望有一个中间解决方案。

c# mysql entity-framework-core

2
推荐指数
1
解决办法
1657
查看次数