【问题标题】:Schedule a .Net Core console application on windows using Task Scheduler使用任务计划程序在 Windows 上计划 .Net Core 控制台应用程序
【发布时间】:2017-04-24 18:18:29
【问题描述】:

是否可以使用任务计划程序安排 .net 核心控制台应用程序在每天的特定时间运行?

【问题讨论】:

  • 是的,有可能。描述到目前为止您已经尝试过什么以及当前的问题是什么。现在你的问题是题外话。
  • 我的控制台应用程序位于文件夹 D:\Test\Test1 中。我可以从这个文件夹中运行程序:dotnet MyApp.dll。但是我不确定如何从已发布文件夹之外运行它。当我尝试像这样从外部运行它时出现错误:dotnet D:\Test\Test1\MyApp.dll。错误说它找不到 appsettings.json。从已发布文件夹之外运行 .net 核心控制台应用程序的正确语法是什么?
  • 然后您需要显示您定义程序应该读取 appsettings.json 的代码
  • 为什么投反对票?每个人都可能不知道对你来说微不足道的答案。

标签: .net asp.net-core .net-core


【解决方案1】:

我认为您必须在将任务计划程序中的任务创建到您的应用文件夹(即 D:\Test\Test1)时设置“开始于”的值。该应用程序将在此文件夹中运行,并且应该能够找到 appsettings 文件。

【讨论】:

  • 谢谢普拉尚特!这解决了它。
  • @Prashant - 当我使用 asp.net Core 2.0 创建控制台应用程序时,bin/debug 文件夹中没有生成 .exe 文件
  • 看看这个链接对你有没有帮助。 stackoverflow.com/questions/44038847/…
  • .netcore 3.1 控制台应用程序,带有窗口服务器 2016 任务调度程序,有关更详细的解决方案,请查看面包车的答案:serverfault.com/questions/863405/…
  • 这个解决方案对我有帮助。谢谢
【解决方案2】:

是的,有可能。但是有个窍门。出于某种原因,任务调度程序要求托管进程的完整路径和文件名,因此您需要在“程序/脚本”中输入“C:\Program Files\dotnet\dotnet.exe”。在带有最新补丁的 Windows Server 2012 R2 上确认了这一点。 .Net Core 程序进入参数框,那里不需要完整路径。但是,“开始于”中需要 .Net 核心程序位置路径。至少在程序期望从它的位置找到一些文件的情况下。

【讨论】:

  • 恕我直言,这是最完整的答案。我意识到它在其他人之后很好地出现了,但它的细节在其他答案中并不完全清楚。特别是对于像我这样习惯于调度控制台应用程序的“旧方式”的人。
  • Start In for the win.... 找不到我的 appsettings.json 文件.... :-) 设置 Start In 并开始工作。
【解决方案3】:

我有类似的问题 2 小时试图得到这个答案。

您只需为您的 .Net Core 控制台应用程序做所有事情!

  • 转到您的任务计划程序
  • 转到选项卡菜单并单击操作
  • 点击新建/编辑
  • 选择下拉菜单:操作:启动程序
  • 程序/脚本:“C:\Document\MyConsoleApp.exe”

-----> 注意很重要。将您的应用程序路径放入您拥有控制台应用程序的位置,因为您的任务计划程序必须读取配置 - 开始于(可选):C:\Document\

这解决了我的问题。

大家好!!!

【讨论】:

    【解决方案4】:

    创建一个内容为“dotnet myDLL.dll”的 .bat 文件 在行动中 程序/脚本->“c:\yourpath\myBatFile.bat” 从 --> "c:\yourpath"

    开始

    完成。

    【讨论】:

      【解决方案5】:

      默认情况下,应用会查看当前文件夹是否存在appsettings.json,原因如下:

          var builder = new ConfigurationBuilder()
              .SetBasePath(env.ContentRootPath)
              .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
              .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
              .AddEnvironmentVariables();
          Configuration = builder.Build();
      

      "appsettings.json" 替换为文件的完整路径。

      【讨论】:

      • 实际上不应该 .SetBasePath(env.ContentRootPath) 使它不使用当前文件夹。但实际上查看应用程序的基本路径?我敢打赌,问题是 OP 只是缺少那条线。
      • @ScottChamberlain 这取决于我认为他如何配置他的 webhostbuilder。默认情况下,webhost builder 使用.UseContentRoot(Directory.GetCurrentDirectory()) 我相信......所以这不会使 setbasepath 也不正确吗?
      • 感谢您的建议!我只是没有在任务计划程序中设置“开始”文件夹——这就是问题所在。顺便说一句,它是她..
      • 投了赞成票。提供的答案对提出的问题很有帮助
      • 投了反对票。提供的答案绝不会回答 OP 的问题。
      猜你喜欢
      • 2019-03-27
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      相关资源
      最近更新 更多