C#로 작업 스케줄러에 로그인하려면...
13046 단어 TaskSchedulerRiderC#
TL;DR
지금 작업 중인 사용자는 등록을 시도해 보세요
우선 보통 등록을 시도해 봅시다.
// タスクスケジューラの登録解除
runProcess(@"/c schtasks.exe /delete /TN SampleTask /F");
// タスクスケジューラの登録
var command = "/c schtasks.exe /create /TN SampleTask /TR " +
Directory.GetCurrentDirectory() + @"\SampleTask.bat ";
// TODO 必要に応じて、ここでcommandに色々な指定を追加する
// 登録
Process proc = new Process();
proc.StartInfo.FileName = Environment.GetEnvironmentVariable("ComSpec"); //"cmd.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardInput = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.Arguments = command;
proc.Start();
var results = proc.StandardOutput.ReadToEnd();
// TODO 必要ならresultsからログ出力とか
proc.WaitForExit();
proc.Close();
// 完了通知
MessageBox.Show("登録しました");
그럼이렇게 되면 로그인 상태가 아니면 이동할 수 없습니다.
그래도 괜찮다면 충분하다.
XML을 이용해서 등록해 보세요.
"다양한 설정을 하나하나 적어서 등록하는 게 번거롭지 않나요?"
따라서 템플릿의 XML을 한 번 만든 다음 작업을 등록하는 방법입니다.
템플릿 XML 만들기
등록!
작업 스케줄러에 XML을 등록합니다.
그럼에도 불구하고command 부분도 아래와 같다.
var command = "/c schtasks.exe /create /XML " + Path.Combine(Environment.CurrentDirectory, "template.xml") + " /TN SampleTask";
예를 들어, 템플릿을 읽어 편집하려는 경우 XML을 읽어 넣으면 추가 또는 변경됩니다.XmlDocument document = new XmlDocument();
document.Load(inputXmlPath); // テンプレートとなるXMLをロード
var task = document.GetElementsByTagName("Task")[0];
DateTime now = DateTime.Now;
// 今日の日付
var date = document.GetElementsByTagName("Date")[0];
date.InnerText = now.ToString("yyyy-MM-ddTHH:mm:ss");
// Author
var author = document.GetElementsByTagName("Author")[0];
author.InnerText = $@"{Environment.UserDomainName}\{Environment.UserName}";
// バッチのパス
var command = document.GetElementsByTagName("Command")[0];
command.InnerText = Directory.GetCurrentDirectory() + @"\SampleTask.bat";
// todo などなど適当にXMLに追加したり、変更したりする
// 保存
document.Save(outputXmlPath); // テンプレートに上書きでもいいが、他の名前で保存しておく(つまり、登録時のパスはoutputXmlPathを使う)
XML을 사용하여 SYSTEM 사용자가 등록
서명할 때도 이동할 수 있기 때문에 등록할 때의 사용자를 SYSTEM으로 설정합니다.
"schtasks.exe /create /XML " + Path.Combine(Environment.CurrentDirectory, "sample.xml") + " /TN SampleTask /RU "" /RP ""
이렇게 하면 실행 사용자가 SYSTEM이 됩니다(최고 수준일 수 있습니다).단, 이것은 도구를 시작할 때 계정의 권한에 따라 작업이 등록되었는지 확인할 때 오류가 발생할 수 있습니다.
ITaskService taskservice = null;
Boolean exist = false;
try
{
taskservice = new TaskScheduler.TaskScheduler();
taskservice.Connect(null, null, null, null);
ITaskFolder containingFolder = taskservice.GetFolder("\\");
// 存在確認
containingFolder.GetTask("SampleTask");
exist = true;
}
catch (Exception ex)
{
// こっちに来る
exist = false;
}
finally
{
if (taskservice != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(taskservice);
}
}
return exist;
퀘스트 등록 여부를 판단할 필요가 없다면, 그래도 된다.XML을 사용하여 사용자가 ID 및 경로를 입력하는 동안 등록
이것저것 문지르고 있다.
내보내기 작업의 설정은 사전 요구 사항으로 적어도 다음과 같습니다.
우선 일괄 처리 서류를 하나 더 만들자. 저장 경로를 동적으로 수정하려면 배치 파일을 동적으로 만듭니다. string str = "echo off" + Environment.NewLine + "set USR_INPUT_STR=" + Environment.NewLine + "set/P USR INPUT STR=\" 사용자 ID: "+ Environment 를 입력하십시오.NewLine + "schtasks /create /XML " + Path.Combine(Environment.CurrentDirectory, "template.xml") + " /TN SampleTask /RU %USR_INPUT_STR% /RP \"\"" + Environment.NewLine + "timeout 5 /nobreak"; // 마지막 5초 기다리는 게 취미(당장 끄기 싫어서 결과를 보고 싶어서) string outputBatPath = Path.Combine(Environment.CurrentDirectory, @"Register.bat"); // 저장 경로 StreamWriter sw = new StreamWriter( outputBatPath, false, Encoding.GetEncoding("shift_jis")); // 쓰기 sw.Write(str); // 닫기 sw.Close(); 이제 Process도 설정을 조금 조정합니다. string outputBatPath = Path.Combine(Environment.CurrentDirectory, @"Register.bat"); // 저장 경로 Process proc = new Process(); proc.StartInfo.Verb = "RunAs"; proc.StartInfo.FileName = Environment.GetEnvironmentVariable("ComSpec");; proc.StartInfo.UseShellExecute = true; proc.StartInfo.CreateNoWindow = true; proc.StartInfo.Arguments = "/c " + outputBatPath; try { proc.Start(); proc.WaitForExit(); proc.Close(); } catch (System.ComponentModel.Win32Exception) { // 사용자 계정 제어 대화상자 취소 등의 이유로 // 시작할 수 없을 때 return true; } return false; 이 방법을 사용하면 사용자가 사용자 ID와 비밀번호를 입력할 수 있습니다. 그렇긴 하지만 반대로 계정 관리 비밀번호를 모르면 안 되기 때문에 다른 걸로 하는 게 좋을 것 같아요. 어쨌든 내가 하고 싶은 일은 이렇게 이루어졌다.
Reference
이 문제에 관하여(C#로 작업 스케줄러에 로그인하려면...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/103ma2/items/f7b425b9bedfed917476텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)