太阳当空照-Windows服务化方式Winsw应用(下)

简介: 太阳当空照-Windows服务化方式Winsw应用(下)

相关指令

参考链接:https://github.com/winsw/winsw/tree/master

install to install the service to Windows Service Controller. This command requires some preliminary steps described in the Installation guide

安装windows服务控制器,命令的细节步骤可查看,安装细节引导:https://github.com/winsw/winsw/blob/master/doc/installation.md

uninstall to uninstall the service. The opposite operation of above

卸载服务,与安装指令用途相反

start to start the service. The service must have already been installed

在服务已经安装的前提下,启动服务

stop to stop the service

停止服务

stopwait to stop the service and wait until it’s actually stopped

等待停止,直到服务结束运行,实现服务停止

restart to restart the service. If the service is not currently running, this command acts like start

重启服务,如果服务未运行,效果与启动服务相似

status to check the current status of the service

This command prints one line to the console.

  • NonExistent indicates the service is not currently installed
  • Started to indicate the service is currently running
  • Stopped to indicate that the service is installed but not currently running

查看当前服务状态

执行以上命令需要以管理员身份进行执行

案例实践

控制台程序

此处基于.Net Core3创建了一个控制台,主要内容如下,启动后,循环每隔一秒写入时间到特定文件中,

static void Main(string[] args)
{
    while (true)
    {
        string datestr = DateTime.Now.ToString("HH:mm:ss");
        Thread.Sleep(1000);
        LogMsg(datestr);
    }
}
private static void LogMsg(string msg)
{
    //System.AppDomain.CurrentDomain.BaseDirectory
    //获取程序集目录:C:\Windows\Temp\.net\sctest
    //System.Environment.CurrentDirectory
    //获取该进程从中启动的目录:C:\Windows\system32
    //System.IO.Directory.GetCurrentDirectory()
    //获取当前应用工作路径:C:\Windows\system32
    //获取当前进程所属的执行exe文件名称
    string filename = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
    string dictoryPath = Path.GetDirectoryName(filename);
    string path = System.IO.Path.Combine(dictoryPath, $"{DateTime.Now.ToString("yyyy-MM-dd")}.log");
    using (var writer = File.AppendText(path))
    {
        writer.WriteLine($"当前时间:{msg}");
    }
}

配置服务

手动创建目录logs用于存储日志文件,配置文件可以参考官方案例

[sample-allOptions.xml]https://github.com/winsw/winsw/releases/download/v2.11.0/sample-allOptions.xml

[sample-minimal.xml]https://github.com/winsw/winsw/releases/download/v2.11.0/sample-minimal.xml

创建配置文件名称为test.xml,内容如下:

<service>
  <id>winswtest</id>
    <name>winsw测试服务</name>
    <description>当前用于测试winsw的服务化操作</description>
    <startmode>Automatic</startmode>
    <executable>winswtest.exe</executable>
    <startarguments></startarguments>
    <workingdirectory>%BASE%</workingdirectory>
    <logpath>%BASE%\logs</logpath>
    <log mode="roll-by-size-time">
      <sizeThreshold>10240</sizeThreshold>
    <pattern>yyyyMMdd</pattern>
      <autoRollAtTime>00:00:00</autoRollAtTime>
    </log>
    <serviceaccount>
      <username>LocalSystem</username>
    </serviceaccount>
</service>

文件目录结构如下,当前目录为E:\Study\Servers\winswtest,读者按实际需求进行更改

直接运行winswtest.exe时,能够在当前目录下生成对应的.log文本,内容为时间读秒

注册服务

注册依据模式的不同而方式不同

捆绑模式[通用]

将下载的Winsw-x64.exe放到与winswtest.exe同目录下,并重命名为test.exe,并添加配置文件test.xml,保证服务程序和配置文件同名,以管理权限运行cmd,切换目录到test.exe所在目录下,执行服务安装指令

>cd /d E:\Study\Servers\winswtest
>test.exe install
2021-08-01 22:27:22,831 INFO  - Installing service 'winsw测试服务 (winswtest)'...
2021-08-01 22:27:22,859 INFO  - Service 'winsw测试服务 (winswtest)' was installed successfully.
>>test.exe status
Stopped

表示当前服务注册成功,同时也可以直接查看对应的系统服务列表,可以发现和上述注册安装服务时,基本信息一致,需要注意的是服务在【任务管理器】-【服务】中并不会显示出来,需要去到服务列表中进行查看

全局模式[3.x]-目前不可用

将下载的Winsw-x64.exe放到一个认为合适的文件目录下,并重命名为winsw.exe,配置环境变量WINSW_HOME,路径为存放winsw.exe所在目录,此处为D:\Program Files\Winsw

添加环境变量WINSW_HOME

新建后,将环境变量添加到Pathpath中,便于在系统任意位置能够访问到winsw.exe,便于指令的执行

确认无误后,点击各级确定

打开cmd命令提示符窗口,输入winsw,查看是否收到指令提示,由于winsw本身无参数时无法任何结果反馈,此处随意输入一个参数,出现如下异常,则表示,全局环境配置成功

>winsw -h
2021-08-01 12:43:29,318 FATAL - Unhandled exception
System.IO.FileNotFoundException: Unable to locate winsw.[xml|yml] file within executable directory
   at WinSW.Program.LoadConfigAndInitLoggers(Boolean inConsoleMode)
   at WinSW.Program.Run(String[] argsArray, IServiceConfig config)
   at WinSW.Program.Main(String[] args)

出现'winsw' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

常见原因有两个:

一个是环境变量配置错误,配置路径不正确,只是配置了WINSW_HOME,并没有将环境变量添加到path/Path中,实现全局可访问

一个是当前执行的cmd命令提示窗口,在配置环境变量前就已经打开,所以造成当前窗口,环境配置无效

启动服务

捆绑模式[通用]

test.exe所在目录中,直接服务启动指令

>test.exe start
2021-08-01 23:37:07,146 INFO  - Starting service 'winsw测试服务 (winswtest)'...
2021-08-01 23:37:07,626 INFO  - Service 'winsw测试服务 (winswtest)' started successfully.
>test.exe status
Started

服务启动成功后,当前目录下,生成输出文件

全局模式[3.x]

目前官方稳定最新版本为2.x版本,所有目前无法正常使用

停止服务

捆绑模式[通用]

执行指令stop

>test.exe stop
2021-08-01 23:42:08,123 INFO  - Stopping service 'winsw测试服务 (winswtest)'...
2021-08-01 23:42:08,131 INFO  - Service 'winsw测试服务 (winswtest)' stopped successfully.
>test.exe status
Stopped

全局模式[3.x]

目前官方稳定最新版本为2.x版本,所有目前无法正常使用

卸载服务

捆绑模式[通用]

执行指令uninstall

>test.exe uninstall
2021-08-01 23:43:49,221 INFO  - Uninstalling service 'winsw测试服务 (winswtest)'...
2021-08-01 23:43:49,227 INFO  - Service 'winsw测试服务 (winswtest)' was uninstalled successfully

全局模式[3.x]

目前官方稳定最新版本为2.x版本,所有目前无法正常使用

总结

对于winsw进行了依据官方文档,进行了细化的常规操作说明,实现一个简单的应用程序,作为服务化的的服务子进程的基本操作,比较遗憾的是,全局模式并未实现成功,通过查阅,发现目前版本为2.x版本,不包含3.x的全局模式,官方最新版本master分支当前为WinSW v2.11.0,后续如果官方更新到3.x笔者将再调整文档中的内容,如果还想关系其他服务化的操作方式,可留言评论,关注笔者或者私信


相关文章
|
17天前
|
安全 前端开发 Windows
Windows Electron 应用更新的原理是什么?揭秘 NsisUpdater
本文介绍了 Electron 应用在 Windows 中的更新原理,重点分析了 `NsisUpdater` 类的实现。该类利用 NSIS 脚本,通过初始化、检查更新、下载更新、验证签名和安装更新等步骤,确保应用的更新过程安全可靠。核心功能包括差异下载、签名验证和管理员权限处理,确保更新高效且安全。
26 4
Windows Electron 应用更新的原理是什么?揭秘 NsisUpdater
|
2月前
|
XML 缓存 前端开发
Electron-builder 是如何打包 Windows 应用的?
本文首发于微信公众号“前端徐徐”,作者徐徐深入解析了 electron-builder 在 Windows 平台上的打包流程。文章详细介绍了 `winPackager.ts`、`AppxTarget.ts`、`MsiTarget.ts` 和 `NsisTarget.ts` 等核心文件,涵盖了目标创建、图标处理、代码签名、资源编辑、应用签名、性能优化等内容,并分别讲解了 AppX/MSIX、MSI 和 NSIS 安装程序的生成过程。通过这些内容,读者可以更好地理解和使用 electron-builder 进行 Windows 应用的打包和发布。
142 0
|
2月前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
46 0
|
4月前
|
Unix Linux Ruby
在windows和linux上高效快捷地发布Dash应用
在windows和linux上高效快捷地发布Dash应用
|
4月前
|
vr&ar C# 图形学
WPF与AR/VR的激情碰撞:解锁Windows Presentation Foundation应用新维度,探索增强现实与虚拟现实技术在现代UI设计中的无限可能与实战应用详解
【8月更文挑战第31天】增强现实(AR)与虚拟现实(VR)技术正迅速改变生活和工作方式,在游戏、教育及工业等领域展现出广泛应用前景。本文探讨如何在Windows Presentation Foundation(WPF)环境中实现AR/VR功能,通过具体示例代码展示整合过程。尽管WPF本身不直接支持AR/VR,但借助第三方库如Unity、Vuforia或OpenVR,可实现沉浸式体验。例如,通过Unity和Vuforia在WPF中创建AR应用,或利用OpenVR在WPF中集成VR功能,从而提升用户体验并拓展应用功能边界。
73 0
|
4月前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
69 0
|
4月前
|
C# Windows 监控
WPF应用跨界成长秘籍:深度揭秘如何与Windows服务完美交互,扩展功能无界限!
【8月更文挑战第31天】WPF(Windows Presentation Foundation)是 .NET 框架下的图形界面技术,具有丰富的界面设计和灵活的客户端功能。在某些场景下,WPF 应用需与 Windows 服务交互以实现后台任务处理、系统监控等功能。本文探讨了两者交互的方法,并通过示例代码展示了如何扩展 WPF 应用的功能。首先介绍了 Windows 服务的基础知识,然后阐述了创建 Windows 服务、设计通信接口及 WPF 客户端调用服务的具体步骤。通过合理的交互设计,WPF 应用可获得更强的后台处理能力和系统级操作权限,提升应用的整体性能。
109 0
|
8天前
|
网络安全 Windows
Windows server 2012R2系统安装远程桌面服务后无法多用户同时登录是什么原因?
【11月更文挑战第15天】本文介绍了在Windows Server 2012 R2中遇到的多用户无法同时登录远程桌面的问题及其解决方法,包括许可模式限制、组策略配置问题、远程桌面服务配置错误以及网络和防火墙问题四个方面的原因分析及对应的解决方案。
|
13天前
|
监控 安全 网络安全
Windows Server管理:配置与管理技巧
Windows Server管理:配置与管理技巧
44 3
|
17天前
|
存储 安全 网络安全
Windows Server 本地安全策略
由于广泛使用及历史上存在的漏洞,Windows服务器成为黑客和恶意行为者的主要攻击目标。这些系统通常存储敏感数据并支持关键服务,因此组织需优先缓解风险,保障业务的完整性和连续性。常见的威胁包括勒索软件、拒绝服务攻击、内部威胁、恶意软件感染等。本地安全策略是Windows操作系统中用于管理计算机本地安全性设置的工具,主要包括用户账户策略、安全选项、安全设置等。实施强大的安全措施,如定期补丁更新、网络分段、入侵检测系统、数据加密等,对于加固Windows服务器至关重要。
下一篇
无影云桌面