はじめに
exeは実行日時をテキストファイルに出力するシンプルなアプリ
exeを単体で実行すると問題なくファイル出力されるが、タスクスケジューラから起動すると指定した場所にファイルが出力されなかった
ファイル出力のサンプルコード
Visual Studio Codeのターミナルから以下を入力しProgram.csを少し書き換えて実行日時をテキストファイルに出力するようにした
$ dotnet new console
namespace c_;
class Program
{
static void Main(string[] args)
{
// Console.WriteLine("Hello, World!");
// カレント日時をテキストファイルに出力
string dt = DateTime.Now.ToString();
File.AppendAllText(@"./test.txt", dt + " " + Environment.NewLine);
}
}
環境
- Windows Server 2022
- .NET 8.0
- Visual Sutdio Code
結論から
原因
Program.cs内で出力先をカレントパスに指定していたこと、且つタスクスケジューラの操作の"開始(オプジョン)(T)"を空欄にすることで
デフォルトの"C:\Windows\System32"にファイルが出力されていた
@albireo さんから教えていただきました
https://qiita.com/team-t-rex/items/ac20d585e381f2607aa3#comment-04bbe69b55259a25820f
Program.cs
$ dotnet new console
File.AppendAllText(@"./test.txt", dt + " " + Environment.NewLine); <- ここ!
タスクスケジューラの設定
解決方法1
Program.cs内のファイル出力先をフルパスに変更する
namespace c_;
class Program
{
static void Main(string[] args)
{
// Console.WriteLine("Hello, World!");
// カレント日時をテキストファイルに出力
string dt = DateTime.Now.ToString();
File.AppendAllText(@"C:/Users/Administrator/Desktop/publish/test.txt", dt + " " + Environment.NewLine); <- ここ!
}
}
解決方法2
タスクスケジューラの操作の設定項目"開始(オプジョン)(T)"に実行するexeが格納されているフォルダのパスを指定する
開始(オプジョン)(T): C:/Users/Administrator/Desktop/publish/
タスクスケジューラの各設定
今回はタスクスケジューラからのexe起動を確認するだけが目的だったので、かなりシンプルな設定にしている
全般
"ユーザーがログオンしているときのみ実行する", "ユーザーがログオンしているかどうかにかかわらず実行する"のどちらでも実行できた
後者にすると設定を変更するたびにAdministratorのパスワード入力を求められる
トリガー
操作
"プログラム/スクリプト(P)"に実行するexeのフルパス、"開始(オプジョン)(T)"に実行するexeが格納されているフォルダのパス(これを指定しないと実行されない!)
その他設定項目
デフォルトのまま