Windows 작업 스케줄러 기능에서 .NET Console APP 실행

Windows 에 관련된 기능이지만 Windows 관련 카테고리는 없어서 여기에 질문합니다.

‘Windows 작업 스케줄러’ 라는 Windows 전용 기능이 있습니다.

image

‘이벤트 뷰어’ 같은 Windows 전용 APP 인데요.

pc에 dotnet framework를 깔아두고 windows 작업 스케줄러를 이용하여 console 앱을 실행하면 문제없이 잘 됩니다.

하지만 이제 .NET 7으로 Console 앱을 바꿨는데, 작업 스케줄러에는 실행 성공이라고 나오지만 실제로 실행이 안됩니다.

Console APP은 아래 파일이 전부입니다.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <PublishSingleFile>true</PublishSingleFile>
    <SelfContained>true</SelfContained>
    <DebugType>embedded</DebugType>
  </PropertyGroup>

</Project>
using System.Diagnostics;

Process.Start("notepad.exe");

각각 프로젝트 파일과 Program.cs 파일인데요.
프로젝트 속성을 보시면 아시겠지만, .NET 을 포함하여 단일 파일로 빌드했습니다.
그리고 Windows 샌드박스를 열어서 붙여넣고 마우스로 더블클릭하여 실행하면 잘 동작합니다.
하지만 Windows 작업 스케줄러로 실행하니까 동작하지 않습니다.

그럼 batch 파일을 만들어서 batch 파일이 app을 실행하게 해볼까도 했지만, batch 파일을 사용할 때 dotnet 명령어는 PC에 dotnet이 설치되어있어야 동작하므로 이 방법이 아닌 아래 링크의 방법으로 배치파일을 작성했지만, 그래도 실행이 되지 않습니다.

왜 더블클릭해서 실행하면 잘 되고 다른 프로그램 실행해주면 실행되지 않는 걸까요?


Windows 작업 스케줄러를 사용하게 된 이유는,

Console 앱에 Quartz 같은 host를 붙여서 써도 되지만 사용자가 마우스로 실수로 끌 수 있기 때문에 제외했고,
Windows 서비스는 등록과정이 불편했어서

가독성이 좋고 쉽게 이용이 가능하고 프로세스가 항시 hosting 되고 있지 않아도 OS에 의존하여 실행시킬 수 있는 작업 스케줄러를 선택했습니다.

3개의 좋아요

제가 테스트해본바는 다음과 같습니다.

  1. 작업스케줄러 >> notepad 실행
  2. 작업스케줄러 >> notepad를 실행하는 콘솔앱 실행

샌드박스에 실행하지 않고 로컬에서 실행했습니다.

[테스트1]
등록된 작업 스케줄러 설정 >> 보안 옵션 >> 사용자 로그온 여부에 관계없이 실행 >> 둘다 백그라운드에서 실행됨

[테스트2]
보안옵션 >> 사용자가 로그온할 때만 실행 >> 정상적으로 프로그램이 실행됨

작업스케줄러에서 gui 프로그램 실행시 사용자 로그온 상태에서 실행으로 설정해야 화면상에 나타나는 것 같습니다. 인터랙티브한 상태에서만 gui 프로그램을 작업 스케줄러에서 실행시킬수 있다고 합니다. 포그라운드로…

다른 방법이 있는지 저도 궁금하네요.

3개의 좋아요

혹시 1번과 2번 정상적으로 동작에 성공하신건가요??

1개의 좋아요

콘솔앱은 .net 7 단일파일로 빌드했습니다.

로컬에서 작업스케줄러 등록시 보안옵션 > 사용자가 로그온할때만 실행으로 선택후

  1. notepad 실행
  2. notepad를 실행하는 콘솔앱 실행

모두 정상적으로 메모장이 실행되었습니다.

3개의 좋아요