.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
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 启动服务
让后输入网站就可以访问了
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
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
推荐阅读
-
docker部署Asp.net core应用的完整步骤
-
.net 4.5部署到docker容器的完整步骤
-
docker部署Asp.net core应用的完整步骤
-
服务器win2008server R2 x64 部署.net core到IIS 并解决ASP .NET Core HTTP Error 502.5 – Process Failure 的问题等
-
把ASP.NET MVC项目部署到本地IIS上的完整步骤
-
.net core Api 部署到Linux的方法步骤
-
.net core部署到windows服务上的完整步骤
-
Jenkins自动构建部署项目到远程服务器上的方法步骤
-
.Net Core WebApi部署在Linux服务器上的方法
-
.Net Core WebApi部署到Windows服务器上的步骤