【问题标题】:Debugging a Windows Console Application from Task Scheduler从任务计划程序调试 Windows 控制台应用程序
【发布时间】:2019-03-16 06:11:03
【问题描述】:

在发布此之前,我还检查了有关 Stack Overflow 的先前问题。

这是我的问题:

我在 Visual Studio 2017 上创建了一个 Windows 控制台应用程序。该应用程序应该从表中获取一些数据并定期发送电子邮件。最初,我创建了一个 Windows 服务,它工作正常,但后来我决定从任务计划程序执行它,因为更改计划很容易。

主要代码如下:

public static void Main(string[] args)
{
   RetrieveData();
}

stativ void RetrieveData()
{
    // Fetch data and send mails
}

有两个问题:

(1) 我无法将它附加到进程。首先的问题是,当我在调试模式下启动它时,应用程序在尝试附加到进程时一碰到 Main 就会退出。

(2) 当我点击“附加到进程”时,.exe 名称没有出现在进程名称下。

从任务调度程序执行此应用程序时如何调试它?当任务计划程序触发此作业时,它甚至没有执行。

【问题讨论】:

  • 当您像普通控制台应用程序一样在 VS 中打开项目并单击 Start Debugging 时,究竟会发生什么? RetrieveData 做同步还是异步工作?
  • 为什么要在调度程序上调试它而不是使用 Visual Studio 运行控制台应用程序?
  • @AhmedAbdelhameed 没有异步调用。只是一个简单的 void 方法。
  • 您可以将一些 Console.WriteLines 放在您的应用程序中,并使用“添加参数(可选)”文本框在调度程序中使用 >> 运算符将输出重定向到 .txt 文件
  • @RKh 1) 你没有回答我的第一个问题。 2) “简单的 void 方法”可以包含异步工作没有具有async 签名。这是应用程序在执行某些代码之前终止的原因之一(您似乎在第 1 点中说过,这就是为什么我要求您确认从 Visual Studio 运行应用程序时是否会发生这种情况)。

标签: c# .net visual-studio-2017 scheduled-tasks windows-task-scheduler


【解决方案1】:

尝试使用Debugger.Launch()

将此行放在main中的第一行,在这个项目中保持Visual Studio打开,编译你的项目,安排一个任务来运行你新编译的可执行文件,然后等待你的程序会要求你打开Visual Studio调试。

【讨论】:

    猜你喜欢
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    相关资源
    最近更新 更多