【问题标题】:Why C# Application does not create file while running from windows task scheduler?为什么 C# 应用程序在从 Windows 任务调度程序运行时不创建文件?
【发布时间】:2015-02-12 11:22:21
【问题描述】:

我有一个 C# 桌面应用程序,它应该在运行时创建并写入一个文本文件。这个应用程序假设每天早上 9:00 运行,所以我在 windows 任务调度程序中创建了一个任务来运行这个程序。从 Windows 任务计划程序运行时,应用程序工作正常,除了创建任何文本文件。但是如果我关闭应用程序并通过双击重新运行,那么它会相应地创建文本文件。

这是我的文本文件编写代码:

 public void process_log(string str, string logtype)
    { 

        try
        {
            string myFile = null;
            string myDate = DateTime.Now.Date.ToString("yyyyMMdd");
            string myDir = null;
            switch (logtype)
            {
                case "process":
                    myDir = "logs\\process\\";
                    break;
                case "err":
                    myDir = "logs\\err\\";
                    break;
                case "URLSTR":
                    myDir = "logs\\URLSTR\\";
                    break;
                case "MOMT":
                    myDir = "logs\\MOMT\\";
                    break;
                default:
                    myDir = "logs\\";
                    break;
            }

            myFile = myDir + myDate + ".txt";


            StreamWriter sw = default(StreamWriter);
            DirectoryInfo dir = new DirectoryInfo(myDir);
            if (dir.Exists == false)
            {
                Directory.CreateDirectory(myDir);
            }

            if (File.Exists(myFile))
            {
                sw = File.AppendText(myFile);
            }
            else
            {
                sw = File.CreateText(myFile);
            }
            sw.WriteLine(str);
            sw.Close();



        }
        catch (Exception ex)
        {
            str = DateTime.Now.ToString("HH:mm:ss") + ex.Message;
            process_log(str, "err");
            str = ex.StackTrace;
            process_log(str, "err");


        }

    }

这个问题变得非常严重,因为我们每天都找不到任何日志文件。 请帮忙,谢谢。

【问题讨论】:

  • 我会检查权限并尝试使用绝对路径。
  • 现在将包括异常在内的每个步骤记录到 EventViewer 中,看看是否有任何收获。
  • 你明白了吗?即使我已经给予了所有人的完全许可,我也遇到了同样的问题?
  • 是的,我必须添加文本文件位置的完整路径,现在它运行良好。

标签: c# windows winforms


【解决方案1】:

我怀疑这是权限问题。当您通过双击运行应用程序时,它会在您的用户上下文中运行。当 Windows 调度程序运行它时,它在 Windows 调度程序的任务定义页面中指定的上下文下运行,默认为本地系统(我认为)。您可以通过更改 Windows Scheduler 任务定义页面中的执行上下文来检查这一点,并将其作为您自己的帐户运行 - 然后它应该可以工作。

【讨论】:

    【解决方案2】:

    我通过引用要创建的文本文件位置的完整路径解决了我的问题。例如:“C:\MyLog\logs\URLSTR\”,然后它工作正常。谢谢大家。

    【讨论】:

      【解决方案3】:

      大多数时候这似乎是权限问题,因为调度程序执行程序无权在特定位置创建文件。

      选项:

      • 授予执行者权限。
      • 更改为有权执行作业的其他执行者。

      要验证,请检查作业的历史记录,看看那里是否有任何错误消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-06
        • 1970-01-01
        • 1970-01-01
        • 2012-04-21
        • 2018-08-26
        • 2010-10-13
        • 1970-01-01
        相关资源
        最近更新 更多