.net core部署到windows服务上的完整步骤

Net core 项目部门在Windows有很多种方式,大致有以下几种,

dotnet 命令,

iis(windowshosts),

一些开源的应用容器(docker )

基于一些exe 程序,微软官网上案例

Nssm 搭建windows服务

其中优劣对比在这不进行累述。我今天是把它搭建到windows服务上的,这种方式对于我们现有dotnet来说相对美观(一个黑框框,一个看不到),电脑重启可以自动重启。

1.实现

1.1.下载nssm

官网,下载地址

1.2.搭建windows 服务 

找到文件夹下建立的Install.bat 点击运行弹出操作窗体。

Install.bat内容:

%~d0 cd %~dp0 nssm install NPSWebCoreService PAUSE

.net core部署到windows服务上的完整步骤

Path:选择系统运行bat----C:\Nps\CoreWeb\1run.bat

ps:因为我们系统中要特殊处理所以直接执行了bat。此内容正常是填写C:\Program Files\dotnet\dotnet.exe. 因为要执行dotnet命令,我这些操作实在bat中执行的。

Startup directory:bat 所在目录不用改变;

ps:发布项目文件夹的地址。

Arguments:为空;

ps:项目运行dll:

Service name:我写在install.bat 批处理里面了,不要改变,因为代码中重启服务我这是写死的。。

ps:创建线管名称即可,即windows 服务名称。

然后点击Install service按钮就完成了部署。

注:红色字体为是一般处理方式,非红色是我们系统中处理的方式

1.2.3 启动服务

让后输入网站就可以访问了

.net core部署到windows服务上的完整步骤

.net core部署到windows服务上的完整步骤

3. Nssm

3.1.输入nssm 了解其命令行

3.2.官网

4. 针对与咱们系统的问题的处理方案 

4.1. 日志问题,nssm 中path 文件运行bat 不要运行dotnet.exe. Log4net 配置问题。

4.2. Office 转换pdf 问题,windows servers 2008 服务器缺少com组件缺少窗口,我在程序中增加了相关代码,如果没有权限请手动创建(服务器2008 r2 ,2016都能创建)

System.Runtime.InteropServices.COMException (0x800A03EC): Microsoft Office Excel 不能访问文件“D:\Benz\Daimler\Benz.Win\LSHBizPlanFigure.xls”。 可能的原因有:

? 文件名称或路径不存在。
? 文件正被其他程序使用。
? 您正要保存的工作簿与当前打开的工作簿同名。

此问题的出现 我十分不解。

解决方案 也十分疑惑

This solution is ...

?Windows 2008 Server x64
Please make this folder.

C:\Windows\SysWOW64\config\systemprofile\Desktop

?Windows 2008 Server x86

Please make this folder.

C:\Windows\System32\config\systemprofile\Desktop

...instead of dcomcnfg.exe.

This operation took away office automation problems in my system.

A Desktop folder seems to be necessary in the systemprofile folder to open file by Excel.

It disappears from Windows2008, Windows2003 had the folder,
and I think it cause this error.

即在C:\Windows\System32\config\systemprofile和C:\Windows\SysWOW64\config\systemprofile目录下创建名为Desktop目录即可解决问题

该方法确实解决了我的问题

4.3.数据库备份重启服务问题,改为重启windows服务,所以请用上面的install.bat运行不要,改变Service name。

重启服务代码:

try { ServiceController service = new ServiceController("NPSWebCoreService"); if (service.Status == ServiceControllerStatus.Running) { service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped); } service.Start(); service.WaitForStatus(ServiceControllerStatus.Running); } catch (Exception){}

4.4.netcoreweb要基于mysql 服务问题,担心再启服务器的时候,mysql和windows 服务启动顺序的问题,我在启动bat 中怎么了判断mysql服务是否启动的判断。

bat 内容:

@echo off SETLOCAL enabledelayedexpansion rem 关闭自动输出 :begin for /f "skip=3 tokens=4" %%i in ('sc query MySQL') do set "zt=%%i" &goto :next :next if /i "%zt%"=="RUNNING" ( echo 已经发现该服务在运行。 ) else ( net start MySQL80 echo 已经发现该服务在运行1。 ) rem 接收输入 rem 输出得到的输入信息 echo 启动NPSWebCore dotnet ./NPSWebCore.dll @echo 启动结束 exit

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdswyj.html