繁体   English   中英

为什么从Windows Task Scheduler运行时C#Application无法创建文件?

[英]Why C# Application does not create file while running from windows task scheduler?

我有一个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");


        }

    }

由于我们每天都找不到任何日志文件,因此这个问题变得非常严重。 请对此提供帮助,谢谢。

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

我已经通过引用要创建的文本文件位置的完整路径解决了我的问题。 例如:“ C:\\ MyLog \\ logs \\ URLSTR \\”,然后运行良好。 谢谢大家

在大多数情况下,这似乎是一个权限问题,因为调度程序执行者无权在特定位置创建文件。

选项:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM