+ Reply to Thread
Page 1 of 3 123 LastLast
Results 1 to 10 of 21

Thread: C# - Run a command on shutdown

  1. #1
    kbjradmin's Avatar
    kbjradmin is offline x10 Elder kbjradmin is an unknown quantity at this point
    Join Date
    Feb 2008
    Location
    Washington State, USA
    Posts
    512

    C# - Run a command on shutdown

    I am working on writing a program that will start automatically when the system boots, times how long the computer is running, and store that information in a file when the computer is shutdown. I know how to do all of this except the last part. Is there some way to make my program do something ( like store info in a file ) when the computer shutdown? I don't even know where to start on this, so if someone could explain the basic idea of how to do this, or point me to a tutorial or explaination about this, it would be greatly appreciated. Thanks in advance.

  2. #2
    saif7463 is offline x10Hosting Member saif7463 is an unknown quantity at this point
    Join Date
    Jun 2008
    Posts
    30

    Re: C# - Run a command on shutdown

    I don't know C#, but I'm sure you could constantly store timedata in a textfile. When the computer is shutdown, the updating will cease, thus the textfile will contain the shutdown time.

  3. #3
    kbjradmin's Avatar
    kbjradmin is offline x10 Elder kbjradmin is an unknown quantity at this point
    Join Date
    Feb 2008
    Location
    Washington State, USA
    Posts
    512

    Re: C# - Run a command on shutdown

    i guess that idea would work, but what kind of resources would that require? would the computer be able to do that and run other programs without slowing or lagging? i guess i'll start working on that and see how it works. thanks.

  4. #4
    misson is offline x10 Spammer misson is a jewel in the rough
    Join Date
    Mar 2008
    Location
    Libertatia
    Posts
    2,506

    Re: C# - Run a command on shutdown

    If the app is running all the time, the application exits at system shutdown, so store the runtime just before the main application function ends. Depending on how you're handling system notifications, you can also either handle the SessionEnding event or WM_ENDSESSION message.
    Be sure to read all pages linked in this post; they have further information that should prove useful. When asking for help, make sure you follow Eric Raymond's and Jon Skeet's guidelines for prompt, accurate responses. Please answer any questions I ask; they're not rhetorical (probably). Any posted code is intended as illustrative example, rather than a solution to your problem to be copied without alteration. Study it to learn how to write your own solution.
    Misson, not Mission.

  5. #5
    kbjradmin's Avatar
    kbjradmin is offline x10 Elder kbjradmin is an unknown quantity at this point
    Join Date
    Feb 2008
    Location
    Washington State, USA
    Posts
    512

    Re: C# - Run a command on shutdown

    misson, i'm still somewhat new to C#. i have a basic understanding of event handling, but don't know how to handle system notifications. i tried to see if i could figure out how to handle the SessionEnding event, but couldn't get it to work. this is what i have:
    Code:
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.IO;
    using System.Linq;
    using System.ServiceProcess;
    using System.Text;
    using System.Windows;
    
    namespace UseMonitor
    {
    
        public class DataContainer
        {
            public static string filesource = @"C:\Documents and Settings\HP_Administrator\Desktop\UseMonitor\UseMonitor\bin\Debug\";
            public static string filename = filesource + "system_use.log";
        }
    
        public partial class UseMonitor : ServiceBase
        {
    
            public UseMonitor()
            {
                InitializeComponent();
            }
    
            protected override void OnStart(string[] args)
            {
                // check that the log file exists
                if (!File.Exists(DataContainer.filename))
                    CreateLog(DataContainer.filename);
                // update the log file
                UpdateLog(DataContainer.filename, false);
            }
    
            protected override void OnStop()
            {
                UpdateLog(DataContainer.filename, "[S]");
            }
    
            public delegate void SessionEndingEventHandler(object sender, EventArgs e);
    
            public event SessionEndingEventHandler SessionEnding
            {
                add
                {
                    UpdateLog(DataContainer.filename, true);
                }
                remove
                {
                }
            }
    
            /// <summary>
            /// Creates the log file if it does not already exist
            /// </summary>
            /// <param name="file"></param>
            public static void CreateLog(string filename)
            {
                StreamWriter log;
                log = File.CreateText(filename);
                log.WriteLine("This Log File Was Generated By UseMonitor.");
                log.WriteLine("Each entry in this log contains a boot date and time, shutdown/log off date and time, and a total time the session was active.");
                log.WriteLine("");
                log.WriteLine("Legend:");
                log.WriteLine("[S] - The UseMonitor service was stopped prematurly and does not have an acurate session end time.");
                log.WriteLine("");
                log.Close();
            }
    
            /// <summary>
            /// Update the log file
            /// Runs on start-up and session end
            /// </summary>
            /// <param name="stop">
            /// False if the function is running at start-up, True if running at session end
            /// </param>
            public static void UpdateLog(string filename, bool stop)
            {
                // get data needed
                string[] time = GetTime();
                int line = GetLogLength(filename);
    
                // append data to the file
                StreamWriter SW;
                SW = File.AppendText(filename);
                if (stop)
                {
                    SW.WriteLine(" " + time[0] + " " + time[1] + time[2]);
                }
                else
                {
                    SW.Write(time[0] + " " + time[1] + time[2]);
                }
                SW.Close();
            }
    
            /// <summary>
            /// Update the log file
            /// Runs on start-up and session end
            /// </summary>
            /// <param name="stop">
            /// False if the function is running at start-up, True if running at session end
            /// </param>
            /// <param name="comment">
            /// Any comments about the nature of the service stop
            /// </param>
            public static void UpdateLog(string filename, string comment)
            {
                // get data needed
                string[] time = GetTime();
                int line = GetLogLength(filename);
    
                // append data to the file
                StreamWriter SW;
                SW = File.AppendText(filename);
                SW.WriteLine(" " + time[0] + " " + time[1] + time[2] + " " + comment);
                SW.Close();
            }
    
            /// <summary>
            /// Counts the number of line in a file
            /// Note: Not used in the recent version
            /// </summary>
            /// <param name="filename"></param>
            /// <returns>The number of lines in filename</returns>
            public static int GetLogLength(string filename)
            {
                int count = 0;
                using (var reader = File.OpenText(filename))
                {
                    while (reader.ReadLine() != null)
                    {
                        count++;
                    }
                }
                return count;
            }
    
            /// <summary>
            /// Gets the current date and time and isolates the seperate parts in an array.
            /// </summary>
            /// <returns>The date and time in an array</returns>
            public static string[] GetTime()
            {
                return DateTime.Now.ToString().Split(new Char[] { ' ' });
            }
    
        }
    
    }
    am i even close, or am i just way off?
    Last edited by kbjradmin; 08-31-2009 at 03:06 PM.

  6. #6
    descalzo's Avatar
    descalzo is offline Grim Squeaker descalzo has a brilliant futuredescalzo has a brilliant futuredescalzo has a brilliant future
    Join Date
    Jul 2009
    Location
    Ankh-Morpork
    Posts
    7,636

    Re: C# - Run a command on shutdown

    I could probably write it for you in perl.

    What you do in perl is register a SIGNAL handler, since the system sends the running program a signal when the system is shutting down. Do they have signal handlers in C#?

    Then open the file and write the starting time.

    Then call sleep() in a loop. Does C# have a sleep function?

    When the terminate signal is sent to the program, it writes the current time, closes the file and exits.
    Nothing is always absolutely so.

  7. #7
    misson is offline x10 Spammer misson is a jewel in the rough
    Join Date
    Mar 2008
    Location
    Libertatia
    Posts
    2,506

    Re: C# - Run a command on shutdown

    Quote Originally Posted by kbjradmin View Post
    Code:
    namespace UseMonitor {
    [...]
        public partial class UseMonitor : ServiceBase {
    [...]
            public delegate void SessionEndingEventHandler(object sender, EventArgs e);
    
            public event SessionEndingEventHandler SessionEnding {
                add {
                    UpdateLog(DataContainer.filename, true);
                }
                remove {}
            }
    [...]
        }
    }
    am i even close, or am i just way off?
    Not way off, but not exactly close. What you've done is defined an event on your UseMonitor class, so it can fire its own SessionEnding events. Take a look at "How do I... Catch system level events in C#?" and the following example:

    Code:
    using Microsoft.Win32;
    namespace UseMonitor {
    [...]
        public partial class UseMonitor : ServiceBase {
            static UseMonitor () {
                // register event handler
                SystemEvents.SessionEnding += new SessionEndingEventHandler(OnSessionEnding);
            }
    
            // define event handler
            private static void OnSessionEnding(object sender, SessionEndingEventArgs e) {
                UpdateLog(DataContainer.filename, true);
            }
            [...]
        }
    }
    Be sure to read all pages linked in this post; they have further information that should prove useful. When asking for help, make sure you follow Eric Raymond's and Jon Skeet's guidelines for prompt, accurate responses. Please answer any questions I ask; they're not rhetorical (probably). Any posted code is intended as illustrative example, rather than a solution to your problem to be copied without alteration. Study it to learn how to write your own solution.
    Misson, not Mission.

  8. #8
    kbjradmin's Avatar
    kbjradmin is offline x10 Elder kbjradmin is an unknown quantity at this point
    Join Date
    Feb 2008
    Location
    Washington State, USA
    Posts
    512

    Re: C# - Run a command on shutdown

    thank you, misson, for a very thorough answer as usual.


    Edit:
    ok, i tried doing what you said, but i still can't get it to work. what am i doing wrong? here is what i have now:
    Code:
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.IO;
    using System.Linq;
    using System.ServiceProcess;
    using System.Text;
    using System.Windows;
    using Microsoft.Win32;
    
    namespace UseMonitor
    {
    
        /// <summary>
        /// Used to contain variables needed by multiple methods
        /// </summary>
        public class DataContainer
        {
            public static string filesource = @"C:\Documents and Settings\HP_Administrator\Desktop\UseMonitor\UseMonitor\bin\Debug\";
            public static string filename = filesource + "system_use.log";
            public static DateTime startTime;
            public static DateTime endTime;
        }
    
        public partial class UseMonitor : ServiceBase
        {
    
            public UseMonitor()
            {
                InitializeComponent();
            }
    
            /// <summary>
            /// Occurs on service start
            /// </summary>
            /// <param name="args"></param>
            protected override void OnStart(string[] args)
            {
                SystemEvents.SessionEnding += new SessionEndingEventHandler(OnSessionEnding);
                // check that the log file exists
                if (!File.Exists(DataContainer.filename))
                    CreateLog(DataContainer.filename);
                // update the log file
                UpdateLog(DataContainer.filename, false);
            }
    
            /// <summary>
            /// Occurs on service stop
            /// </summary>
            protected override void OnStop()
            {
                UpdateLog(DataContainer.filename, "[S]");
            }
    
            /// <summary>
            /// Occurs on session end (shutdown / logoff)
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private static void OnSessionEnding(object sender, SessionEndingEventArgs e)
            {
                UpdateLog(DataContainer.filename, true);
            }
    
            /// <summary>
            /// Creates the log file if it does not already exist
            /// </summary>
            /// <param name="file"></param>
            public static void CreateLog(string filename)
            {
                StreamWriter log;
                log = File.CreateText(filename);
                log.WriteLine("This Log File Was Generated By UseMonitor.");
                log.WriteLine("Each entry in this log contains a boot date and time, shutdown/log off date and time, and a total time the session was active.");
                log.WriteLine("");
                log.WriteLine("Legend:");
                log.WriteLine("[S] - The UseMonitor service was stopped prematurly and does not have an acurate session end time.");
                log.WriteLine("");
                log.Close();
            }
    
            /// <summary>
            /// Update the log file
            /// Runs on start-up and session end
            /// </summary>
            /// <param name="stop">
            /// False if the function is running at start-up, True if running at session end
            /// </param>
            public static void UpdateLog(string filename, bool stop)
            {
                // get data needed
                string[] time = GetTime();
                int line = GetLogLength(filename);
    
                // append data to the file
                StreamWriter SW;
                SW = File.AppendText(filename);
                if (stop)
                {
                    DataContainer.endTime = DateTime.Parse(time[0] + " " + time[1] + " " + time[2]);
                    TimeSpan totalTime = DataContainer.endTime.Subtract(DataContainer.startTime);
                    SW.WriteLine("     " + time[0] + " " + time[1] + time[2] + "     " + WriteTime(totalTime));
                }
                else
                {
                    DataContainer.startTime = DateTime.Parse(time[0] + " " + time[1] + " " + time[2]);
                    SW.Write(time[0] + " " + time[1] + time[2]);
                }
                SW.Close();
            }
    
            /// <summary>
            /// Update the log file
            /// Runs on start-up and session end
            /// </summary>
            /// <param name="stop">
            /// False if the function is running at start-up, True if running at session end
            /// </param>
            /// <param name="comment">
            /// Any comments about the nature of the service stop
            /// </param>
            public static void UpdateLog(string filename, string comment)
            {
                // get data needed
                string[] time = GetTime();
                int line = GetLogLength(filename);
    
                // append data to the file
                StreamWriter SW;
                SW = File.AppendText(filename);
                DataContainer.endTime = DateTime.Parse(time[0] + " " + time[1] + " " + time[2]);
                TimeSpan totalTime = DataContainer.endTime.Subtract(DataContainer.startTime);
                SW.WriteLine("     " + time[0] + " " + time[1] + time[2] +  "     " + WriteTime(totalTime) + "     " + comment);
                SW.Close();
            }
    
            /// <summary>
            /// Counts the number of line in a file
            /// Note: Not used in the recent version
            /// </summary>
            /// <param name="filename"></param>
            /// <returns>The number of lines in filename</returns>
            public static int GetLogLength(string filename)
            {
                int count = 0;
                using (var reader = File.OpenText(filename))
                {
                    while (reader.ReadLine() != null)
                    {
                        count++;
                    }
                }
                return count;
            }
    
            /// <summary>
            /// Gets the current date and time and isolates the seperate parts in an array.
            /// </summary>
            /// <returns>The date and time in an array</returns>
            public static string[] GetTime()
            {
                return DateTime.Now.ToString().Split(new Char[] { ' ' });
            }
    
            /// <summary>
            /// Converts a TimeSpan into a string in the format d:hh:mm:ss
            /// </summary>
            /// <param name="time"></param>
            /// <returns></returns>
            public static string WriteTime(TimeSpan time)
            {
                return time.Days + ":" + time.Hours + ":" + time.Minutes + ":" + time.Seconds;
            }
    
        }
    
    }
    Last edited by kbjradmin; 08-31-2009 at 08:13 PM. Reason: Automerged Doublepost

  9. #9
    kbjradmin's Avatar
    kbjradmin is offline x10 Elder kbjradmin is an unknown quantity at this point
    Join Date
    Feb 2008
    Location
    Washington State, USA
    Posts
    512

    Re: C# - Run a command on shutdown

    ok, i've gone from one problem to three...
    first, there is the problem i first posted about (see previous post for details).
    second, i have a part of my program that is using the current username. when i handcode the username in, it works fine; but when i use Environment.UserName, it doesn't work, and i can't figure out why.
    third, is there anyway to get a list of all of the users on the computer?

    here is my current code:
    Code:
    using Microsoft.Win32;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.IO;
    using System.Linq;
    using System.Management;
    using System.Security.AccessControl;
    using System.ServiceProcess;
    using System.Text;
    using System.Windows;
    using System.Windows.Forms;
    
    namespace UseMonitor
    {
    
        /// <summary>
        /// Used to contain variables needed by multiple methods
        /// </summary>
        public class DataContainer
        {
            public static string filesource = Environment.GetEnvironmentVariable("userprofile") + @"\Desktop\UseMonitor\UseMonitor\bin\Debug\";
            public static string filename = filesource + "system_use.log";
            public static DateTime startTime;
            public static DateTime endTime;
            public static string systemName = Environment.MachineName; // YOUR-4DACD0EA75
            public static string userName = Environment.UserName; // HP_Administrator
            public static string[] userList = { "HP_Administrator" };
        }
    
        public partial class UseMonitor : ServiceBase
        {
    
            public UseMonitor()
            {
                SystemEvents.SessionEnding += new SessionEndingEventHandler(OnSessionEnding);
                InitializeComponent();
            }
    
            protected override void OnStart(string[] args)
            {
                // check that the log file exists
                if (!File.Exists(DataContainer.filename))
                    CreateLog();
                // update the log file
                UpdateLog(false);
            }
    
            protected override void OnStop()
            {
                UpdateLog("[S]");
                SystemEvents.SessionEnding -= new SessionEndingEventHandler(OnSessionEnding);
            }
    
            void OnSessionEnding(object sender, SessionEndingEventArgs e)
            {
                UpdateLog(true);
            }
    
            public static void CreateLog()
            {
                StreamWriter log;
                log = File.CreateText(DataContainer.filename);
                log.WriteLine("This Log File Was Generated By UseMonitor.");
                log.WriteLine("Each entry in this log contains a boot date and time, shutdown/log off date and time, and a total time the session was active.");
                log.WriteLine("");
                log.WriteLine("Legend:");
                log.WriteLine("[S] - The UseMonitor service was stopped prematurly and does not have an acurate session end time.");
                log.WriteLine(""); log.WriteLine("");
                log.WriteLine("======================================================");
                log.WriteLine(""); log.WriteLine("");
                log.Close();
    
                // lock the file for all users on the system
                foreach (string user in DataContainer.userList)
                {
                    LockFile(DataContainer.filename, DataContainer.systemName + "\\" + user, true);
                }
            }
    
            public static void UpdateLog(bool stop)
            {
                // get data needed
                string[] time = GetTime();
                int line = GetLogLength(DataContainer.filename);
    
                // unlock the log file
                LockFile(DataContainer.filename, DataContainer.systemName + "\\" + DataContainer.userName, false);
    
                // append data to the file
                StreamWriter SW;
                SW = File.AppendText(DataContainer.filename);
                if (stop)
                {
                    DataContainer.endTime = DateTime.Parse(time[0] + " " + time[1] + " " + time[2]);
                    TimeSpan totalTime = DataContainer.endTime.Subtract(DataContainer.startTime);
                    SW.WriteLine("     " + time[0] + " " + time[1] + time[2] + "     " + WriteTime(totalTime));
                }
                else
                {
                    DataContainer.startTime = DateTime.Parse(time[0] + " " + time[1] + " " + time[2]);
                    SW.Write(time[0] + " " + time[1] + time[2]);
                }
                SW.Close();
    
                // re-lock the log file
                LockFile(DataContainer.filename, DataContainer.systemName + "\\" + DataContainer.userName, true);
            }
    
            public static void UpdateLog(string comment)
            {
                // get data needed
                string[] time = GetTime();
                int line = GetLogLength(DataContainer.filename);
    
                // unlock the log file
                LockFile(DataContainer.filename, DataContainer.systemName + "\\" + DataContainer.userName, false);
    
                // append data to the file
                StreamWriter SW;
                SW = File.AppendText(DataContainer.filename);
                DataContainer.endTime = DateTime.Parse(time[0] + " " + time[1] + " " + time[2]);
                TimeSpan totalTime = DataContainer.endTime.Subtract(DataContainer.startTime);
                SW.WriteLine("     " + time[0] + " " + time[1] + time[2] +  "     " + WriteTime(totalTime) + "     " + comment);
                SW.Close();
    
                // re-lock the log file
                LockFile(DataContainer.filename, DataContainer.systemName + "\\" + DataContainer.userName, true);
            }
    
            public static int GetLogLength(string filename)
            {
                int count = 0;
                using (var reader = File.OpenText(filename))
                {
                    while (reader.ReadLine() != null)
                    {
                        count++;
                    }
                }
                return count;
            }
    
            public static string[] GetTime()
            {
                return DateTime.Now.ToString().Split(new Char[] { ' ' });
            }
    
            public static string WriteTime(TimeSpan time)
            {
                return time.Days + ":" + time.Hours + ":" + time.Minutes + ":" + time.Seconds;
            }
    
            public static void AddFileSecurity(string fileName, string account, FileSystemRights rights, AccessControlType controlType)
            {
    
                // Get a FileSecurity object that represents the
                // current security settings.
                System.Security.AccessControl.FileSecurity fSecurity = File.GetAccessControl(fileName);
    
                // Add the FileSystemAccessRule to the security settings.
                fSecurity.AddAccessRule(new FileSystemAccessRule(account, rights, controlType));
    
                // Set the new access settings.
                File.SetAccessControl(fileName, fSecurity);
    
            }
    
            public static void RemoveFileSecurity(string fileName, string account, FileSystemRights rights, AccessControlType controlType)
            {
    
                // Get a FileSecurity object that represents the
                // current security settings.
                System.Security.AccessControl.FileSecurity fSecurity = File.GetAccessControl(fileName);
    
                // Add the FileSystemAccessRule to the security settings.
                fSecurity.RemoveAccessRule(new FileSystemAccessRule(account, rights, controlType));
    
                // Set the new access settings.
                File.SetAccessControl(fileName, fSecurity);
    
            }
    
            public static void LockFile(string filename, string account, bool lockfile)
            {
                if (lockfile)
                {
                    AddFileSecurity(filename, account, FileSystemRights.Write, AccessControlType.Deny);
                    AddFileSecurity(filename, account, FileSystemRights.Delete, AccessControlType.Deny);
                    AddFileSecurity(filename, account, FileSystemRights.ChangePermissions, AccessControlType.Deny);
                }
                else
                {
                    RemoveFileSecurity(filename, account, FileSystemRights.Write, AccessControlType.Deny);
                    RemoveFileSecurity(filename, account, FileSystemRights.Delete, AccessControlType.Deny);
                    RemoveFileSecurity(filename, account, FileSystemRights.ChangePermissions, AccessControlType.Deny);
                }
            }
    
        }
    
    }
    thanks in advance for any help.

  10. #10
    misson is offline x10 Spammer misson is a jewel in the rough
    Join Date
    Mar 2008
    Location
    Libertatia
    Posts
    2,506

    Re: C# - Run a command on shutdown

    Quote Originally Posted by kbjradmin View Post
    ok, i've gone from one problem to three...
    first, there is the problem i first posted about (see previous post for details).
    From the MSDN documentation for SessionEnding
    This event is only raised if the message pump is running. In a Windows service, unless a hidden form is used or the message pump has been started manually, this event will not be raised. For a code example that shows how to handle system events by using a hidden form in a Windows service, see the SystemEvents class.

    Quote Originally Posted by kbjradmin View Post
    second, i have a part of my program that is using the current username. when i handcode the username in, it works fine; but when i use Environment.UserName, it doesn't work, and i can't figure out why.
    Is the handcoded user name the same as Environment.UserName? One potential problem is you're adding a deny permission for FileSystemRights.ChangePermissions, which means non-admins can't then remove all the deny permissions.

    Note that you don't need separate calls to AddFileSecurity/RemoveFileSecurity because you can combine permissions by or-ing them:
    Code:
     AddFileSecurity(filename, account, 
                            FileSystemRights.Write | FileSystemRights.Delete | FileSystemRights.ChangePermissions, 
                            AccessControlType.Deny);
    Also, having separate LockFile and UnlockFile methods rather than a single LockFile method is cleaner.

    If you're using file permissions for exclusive access, the better way is to use file locks, via the FileShare argument to the FileStream constructor.
    Code:
            public static void UpdateLog(string comment) {
                // get data needed
                string[] time = GetTime();
                int line = GetLogLength(DataContainer.filename);
    
                // append data to the file
                FileStream fs = new FileStream(DataContainer.filename, FileMode.Append, FileAccess.Write, FileShare.Read);
                StreamWriter log = new StreamWriter(fs);
                ...
                log.Close(); // also closes fs
            }
    FileShare.Read allows other processes to open the log file with read access but not write access. Use FileShare.None for exclusive access.

    Quote Originally Posted by kbjradmin View Post
    third, is there anyway to get a list of all of the users on the computer?
    Should be moot at this point, but here's one way.
    Be sure to read all pages linked in this post; they have further information that should prove useful. When asking for help, make sure you follow Eric Raymond's and Jon Skeet's guidelines for prompt, accurate responses. Please answer any questions I ask; they're not rhetorical (probably). Any posted code is intended as illustrative example, rather than a solution to your problem to be copied without alteration. Study it to learn how to write your own solution.
    Misson, not Mission.

+ Reply to Thread
Page 1 of 3 123 LastLast

Similar Threads

  1. Help please? Site just randomly shutdown
    By derk4392 in forum Free Hosting
    Replies: 3
    Last Post: 09-14-2008, 06:57 PM
  2. Direct shutdown in 4sec or so....whats this?
    By hamsn in forum Tutorials
    Replies: 2
    Last Post: 07-06-2008, 04:21 PM
  3. Cyber Incident Blamed for Nuclear Power Plant Shutdown
    By boom_media in forum Computers & Technology
    Replies: 5
    Last Post: 06-10-2008, 02:01 PM
  4. Which is better hybernation or shutdown.
    By tittat in forum Computers & Technology
    Replies: 17
    Last Post: 05-10-2008, 01:13 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
x10hosting free hosting for the masses
dedicated servers