Solved

Scheduled reboot

Posted on 2012-03-30
13
259 Views
Last Modified: 2012-04-04
I am creating a windows service that should run every hour, check database for a reboot date and time and schedule reboot based on the datetime it finds in the database.

I can use Windows scheduler to schedule my windows service and I took care of the data retrieval part. Now I am trying to find the best way to schedule a reboot based on the retrieved value.

Should I use the registry HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer? if so, could you give me an example?

or should i use System.Diagnostics.Process.Start("ShutDown", "/r")?

Also before a reboot I want to show the user a messagebox warning.

Can anyone help?
0
Comment
Question by:YZlat
  • 6
  • 6
13 Comments
 
LVL 34

Assisted Solution

by:Paul MacDonald
Paul MacDonald earned 500 total points
ID: 37788890
System.Diagnostics.Process.Start("ShutDown", "/r ")

A message box should pop up to warn the user a scheduled shutdown is taking place.  You can use the /t switch to specify how long before the shutdown takes place.
0
 
LVL 6

Expert Comment

by:-tjs
ID: 37788978
Possible example command line if I wanted to reboot a system called MyServer1 at 11:00pm today:
schtasks /create /tn "Reboot Once" /tr "shutdown /r /f /t 1 /d p:0:0" /sc once /st 23:00 /s MyServer1

This creates a scheduled task on MyServer1 that runs only one time at 11:00pm (/st) and executes the local shutdown command with a 1 second warning and enters a bogus restart reason (/d p:0:0) so the admin isn't prompted to enter a reason when the reboot is done.
0
 
LVL 35

Author Comment

by:YZlat
ID: 37788994
paulmacd, can you give me some examples?

-tjs, I need examples using .NET
0
Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

 
LVL 34

Accepted Solution

by:
Paul MacDonald earned 500 total points
ID: 37789029
System.Diagnostics.Process.Start("ShutDown", "/r /t 300 ")

...where the /t 300 tells the system to countdown for 5 minutes (300 seconds) before performing the reboot.
0
 
LVL 35

Author Comment

by:YZlat
ID: 37789041
But how can I schedule it at a particular date and time?

For instance if the date retrieved from the database is April 1st 11:00am, how can I schedule the reboot at that time?
0
 
LVL 34

Assisted Solution

by:Paul MacDonald
Paul MacDonald earned 500 total points
ID: 37789159
Ah, that's different altogether.

Try something like this (from http://stackoverflow.com/questions/206323/how-to-execute-command-line-in-c-get-std-out-results):
//Create process
System.Diagnostics.Process pProcess = new System.Diagnostics.Process();  

//strCommand is path and file name of command to run
pProcess.StartInfo.FileName = strCommand;  

//strCommandParameters are parameters to pass to program pProcess.StartInfo.Arguments = strCommandParameters;  pProcess.StartInfo.UseShellExecute = false;  

//Set output of program to be written to process output stream pProcess.StartInfo.RedirectStandardOutput = true;    

//Optional
pProcess.StartInfo.WorkingDirectory = strWorkingDirectory;  

//Start the process
pProcess.Start();  

//Get program output
string strOutput = pProcess.StandardOutput.ReadToEnd();  

//Wait for process to finish
pProcess.WaitForExit();


... and use the AT command to run the SHUTDOWN /R command
(info on AT command: http://support.microsoft.com/kb/313565)
Your AT command will look something like this:
at [time] /next:[dayofmonth] cmd /c "shutdown /r"

Note that your strCommand in the code sample above will be "AT" and strCommandParameters will be everything else.  

As a matter of full disclosure, this isn't something I've tested myself.
0
 
LVL 35

Author Comment

by:YZlat
ID: 37795863
paulmacd, I have searched everywhere but cannot find AT command or switch anywhere
0
 
LVL 34

Assisted Solution

by:Paul MacDonald
Paul MacDonald earned 500 total points
ID: 37795923
0
 
LVL 35

Author Comment

by:YZlat
ID: 37801057
paulmacd, I am working on using

System.Diagnostics.Process.Start("ShutDown", "/r /t 300 ")

as you suggested. I get a message displayed that tells me how much time left till shutdown. How can I add a snooze button to it?
0
 
LVL 34

Assisted Solution

by:Paul MacDonald
Paul MacDonald earned 500 total points
ID: 37801147
Not as such.  

You could ask the user before you start the shutdown, or you could offer the user the opportunity to cancel the shutdown (shutdown /a).
0
 
LVL 35

Author Comment

by:YZlat
ID: 37802380
Thank you. I am gonna give that a try
0
 
LVL 35

Author Closing Comment

by:YZlat
ID: 37805867
thanks for your help, you pointed me in the right direction
0
 
LVL 34

Expert Comment

by:Paul MacDonald
ID: 37805884
Very happy to help.
0

Featured Post

Webinar: Aligning, Automating, Winning

Join Dan Russo, Senior Manager of Operations Intelligence, for an in-depth discussion on how Dealertrack, leading provider of integrated digital solutions for the automotive industry, transformed their DevOps processes to increase collaboration and move with greater velocity.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…

856 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question