开发者

How to determine if windows restarted?

I want my WPF application run just one time. I have no problem with this.

My problem is how can I determine if 开发者_StackOverflow中文版windows currently restarted?


You could write a file to disk, and then immediately mark it as 'delete on reboot' using MoveFileEx:

  • MSDN: http://msdn.microsoft.com/en-us/library/aa365240(v=VS.85).aspx
  • Pinvoke.net: http://www.pinvoke.net/default.aspx/kernel32.movefileex)

So in psuedocode:

if(File.Exists(CheckFileName))
   return false; // already ran once
else {
   // write out the check file
   using(checkFile = File.Create(CheckFileName, ...)) {
      // and mark it as delete on boot
      MoveFileEx(checkFile.SafeHandle,
         null,
         MOVEFILE_DELAY_UNTIL_REBOOT);
      return true; // ok to run
   }
} 


You could check and store the system uptime along with the last runtime and compare that with the current uptime.

Retrieve system uptime using C#

Some psudeocode:

   DateTime computerLastStarted = Now - Uptime;
   if (computerLastStarted > storedComputerLastStarted + or - tollerance) {
      storedComputerLastStarted = computerLastStarted;
      StartProgram();
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜