I am using the following code to change the ‘Run As:’ username and password for a scheduled task on a remote host.
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = "SCHTASKS.exe";
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
//p.StartInfo.Arguments = String.Format("/Change /TN {0} /RU {1} /RP {2}",ScheduledTaskName,userName,password);
p.StartInfo.Arguments = String.Format(
"/Change /S {0} /TN {1} /TR {2} /RU {3}\\{4} /RP {5}",
MachineName, ScheduledTaskName, taskPath, activeDirectoryDomainName, userName, password);
p.Start();
// Read the error stream first and then wait.
string error = p.StandardError.ReadToEnd();
p.WaitForExit();
I have a couple of questions:
- How can I check if the specified service exists at all, so that if it does not exist, I can just quit the program.
- How can i check to see if the scheduled task is running or disabled?
- If the scheduled task is disabled, can I still change the credentials, or is it like a Windows service where credentials cannot be changed if it is disabled?
Look at the link I gave you in my last answer. The link for SCHTASKS.exe.
Look at the section called
Querying for Task Information.Here is my code to check the current running status. You can play with the output to modify this for your needs.