我有一个 Asp.Net Core 应用程序,可以托管在 IIS 中或作为 WindowsService。
这是 Program.cs 的一部分
public static class Program
{
public static void Main(string[] args)
{
var hostAsWindowsService = !args.Contains("--web");
var contentRoot = hostAsWindowsService ? Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) : Directory.GetCurrentDirectory();
var config = new ConfigurationBuilder()
.SetBasePath(contentRoot)
.AddJsonFile("host.json")
.AddCommandLine(args)
.AddEnvironmentVariables()
.Build();
var environment = config["environment"];
var urls = config["server.urls"];
var certificateFilename = config["certificate.filename"];
var certificatePassword = config["certificate.password"];
var hostConfig = new WebHostBuilder()
.UseConfiguration(config)
.UseUrls(urls)
.UseContentRoot(contentRoot)
.UseKestrel(options =>
{
if (!string.IsNullOrWhiteSpace(certificateFilename))
{
options.UseHttps(contentRoot + certificateFilename, certificatePassword);
}
})
.UseStartup<Startup>();
if (!string.IsNullOrWhiteSpace(environment))
{
hostConfig.UseEnvironment(environment);
}
if (hostAsWindowsService)
{
hostConfig
.Build()
.RunAsEycService();
}
else
{
hostConfig
.UseIISIntegration()
.Build()
.Run();
}
}
}
我无法在作为 Windows 服务托管时传递参数,因此默认情况下该项目作为 WS 托管。我实际上可以在 IIS 启动我的站点时将参数传递给它,以便使用 Main 方法中的正确托管(args.Contains("--web"))吗?
我尝试将参数传递给Windows服务主机:
1) sc.exe 创建 MyService binPath= "c:\Projects\MyService.exe --ws=true"
2)在Windows服务对话框的“启动参数”中添加“--ws=true”(实际上不会保存)
我知道这是一个老问题 - 但以防万一其他人遇到这个问题(就像我刚才所做的那样)。
请注意,通过使用“ApplicationHost.config”而不是“您的站点 Web.config”,即使在重新发布站点(覆盖 web.config 文件)后,您也可以保留该设置