1 网站建设的目标是什么,网站如何做整合营销,网站的链接结构包括,关键词优化怎么写日常工作中有时候会遇到需要将程序直接在服务器上运行#xff0c;而不依赖于 IIS 托管的情况#xff0c;直接运行有两种方式#xff0c;一种是部署为 服务模式#xff0c;另一种则是 直接启动 .NET 发布之后的 exe 文件以 控制台模式运行#xff0c;控制台模式运行主要问题…日常工作中有时候会遇到需要将程序直接在服务器上运行而不依赖于 IIS 托管的情况直接运行有两种方式一种是部署为 服务模式另一种则是 直接启动 .NET 发布之后的 exe 文件以 控制台模式运行控制台模式运行主要问题是服务器在重新启动之后不会自动启动当然也可以选择配置 Windows 计划任务的形式让 控制台在服务器开机时自动启动 今天给大家分享 .NET 控制台程序和 .NET 开发的 WebAPI 及 Web 项目在以 Windows 服务模式部署时的一些注意事项。.NET 项目想要部署为 Windows 服务首先需要通过 NuGet 安装 Microsoft.Extensions.Hosting.WindowsServices 然后在程序启动时做如下配置控制台程序Web 及 WebAPI 程序以上是两种常见程序的启动 Main 函数的配置 Windows 托管模式的演示其中一个关键点在于 EnvironmentHelper.ChangeDirectory(args); 该方法用于在服务启动时将运行路径重新指向为程序所在目录默认情况下 .NET 程序在命令启动时运行路径为执行命令的路径比如在 cmd 中执行如下命令虽然程序是放在 d:\Publish\ 文件夹中但是因为我们执行启动程序命令时的路径是在 c:\User\ZhangXiaoDong 所以程序启动之后的运行环境路径就是 命令执行当前目录c:\User\ZhangXiaoDong 这时候如果我们的代码中有包含一些涉及到操作 程序所在目录的 IO 操作时就会产生异常比如 加载 web 项目下的 wwwroot 文件夹中的静态资源这些都会异常所以我们需要在程序启动时将 运行目录重定向到 我们的程序所在目录就用到了 EnvironmentHelper.ChangeDirectory(args); 这个方法。EnvironmentHelper.ChangeDirectory(args); 实现如下主要逻辑是判断启动命令中 cd 参数的值是否为 true 如果 cdtrue 则重新配置程序的 CurrentDirectory 为程序文件所在目录。调整之后我们在启动程序时只要多添加一个参数即可如下只要在原本的启动命令 dotnet d:\Publish\WebAPI.dll 优化为 dotnet d:\Publish\WebAPI.dll --cdtrue 即可从上图可以看出虽然我们的启动命令还是在 c:\User\ZhangXiaoDong 目录执行的但是程序的运行目录已经被重定向到了 dotnet d:\Publish\ 这个路径也正是我们的程序所在路径。有了上面的基础我们就可以利用 Windows服务器的 SC 指令来配置服务部署了具体命令如下 安装sc.exe create MyAPI binpath d:\Publish\WebAPI.exe --cdtrue start auto安装成功之后控制台会输出 [SC] CreateService 成功 其中 MyAPI 时我们创建服务时指定的服务名称binpath 即是我们的程序路径注意 true 是 用英文状态的双引号包裹然后整个 binpath 采用因为状态的 单引号包裹start auto 则表示将我们的 MyAPI 服务设置为自动启动。在 Windows 服务管理中也可以看到我们的服务启动命令和停止命令和我们日常操作普通服务的命令一样都是 net start 服务名 和 net stop 服务名如下启动net start MyAPI停止net stop MyAPI卸载命令sc.exe delete 服务名称如sc.exe delete MyAPI至此 .NET 实现启动时重定向程序运行路径及 Windows 服务运行模式部署 就讲解完了有任何不明白的可以在文章下面评论或者私信我欢迎大家积极的讨论交流有兴趣的朋友可以关注我目前在维护的一个 .NET 基础框架项目项目地址如下https://github.com/berkerdong/NetEngine.git原文地址https://www.cnblogs.com/berkerdong/p/16697986.html作者张晓栋