通过 sc.exe 安装 .NET 8 服务 - 然后在 c# 中获取服务路径

问题描述 投票:0回答:1

因此,我构建了 .NET 8 Windows 服务,并在部署之前使用了“发布”选项 为我的本地服务 - 使用

Single File
“独立” 选项。然后,我将该文件夹复制到我们的一台服务器进行部署。

在PowerShell中如下:

sc.exe create "Mqtt Service" binpath="C:\dev\projects\..\NotificationServiceCore\bin\Release\net8.0-windows\publish\MyServiceCore.exe"

enter image description here

但在我的代码中,我需要获取已部署服务的路径 - 而不是 Windows 临时文件夹。

例如,这不会给我 -

System.AppContext.BaseDirectory;
- 它会返回
c:\windows\temp\.net\..

但是我在尝试加载我的证书文件时发现了异常:

2024-06-14 12:59:35 (null) [5]  ERROR Certificate Exception in WsSecureClientOptions(). Check app config settings. The system cannot find the file specified.
2024-06-14 12:59:35 (null) [5]  DEBUG Path to Certificate File - C:\Windows\TEMP\.net\NotificationServiceCore\pxsSvFJpErHm9e18vOpihtHD3i7O1g4=\certificate2024.pfx

为什么文件异常?这是因为我们没有在项目构建中包含该certificate.pjx。我们有一个

post-build
事件,将该文件复制到
$(OutDir)

cd $(ProjectDir)
xcopy "..\certificate\*.*" "$(OutDir)" /F /Y

这里的问题是 pfx 证书文件不在“c:\Windows\Temp.net...”文件夹中。

这就是我在代码中解析基本目录的方式:

string appBaseDir = System.AppContext.BaseDirectory;
windows-services .net-8.0 sc.exe
1个回答
0
投票

底线:不要选择“独立”和“生成单个文件”选项。

相反,选择“Framework dependent”和“win-x64”(或任何适合您环境的选项)。

仅供参考:现在

System.AppContext.BaseDirectory

 确实会返回您安装 Win 服务的目录(即,而不是我之前使用独立选项看到的临时文件夹)。

enter image description here

您的构建文件(.dll、.exe、.dll.config)将部署到

..\publish\win-x64

 文件夹。

© www.soinside.com 2019 - 2024. All rights reserved.