windows 重启记录查看
时间: 2023-10-03 07:02:58 浏览: 1100
在 Windows 操作系统中,可以通过以下步骤查看系统的重启记录:
1. 打开“事件查看器”:在 Windows 搜索栏中输入“eventvwr.msc”,然后回车或点击“运行”即可打开事件查看器。
2. 在事件查看器中找到“Windows 日志”下的“系统”选项卡,然后选择“过滤器当前日志…”。
3. 在“事件来源”中选择“Kernel-General”,并在“关键字”中选择“关机/重启”。
4. 单击“确定”后,事件查看器将过滤出所有与重启相关的事件记录。
在过滤出来的事件记录中,可以查看每一次重启的时间、原因、持续时间等详细信息。
相关问题
windows系统下监控进程并自动重启
在Windows系统下,监控进程并自动重启可以通过编写脚本来实现。具体步骤如下:
1. 打开任务管理器,找到需要监控的进程并记录其进程ID。
2. 编写一个批处理文件,内容如下:
:top
tasklist | find "进程名" || start "程序路径"
timeout /t 10
goto top
其中,“进程名”为需要监控的进程名称,“程序路径”为需要启动的程序路径,10为时间间隔。
3. 将批处理文件保存为一个.bat文件,将其放置在需要监控的进程同级目录下。
4. 在控制面板中打开“管理工具”,找到“任务计划程序”并打开。
5. 在任务计划程序中设置一个新任务,选择“触发器”选项卡,添加一个启动任务的时间点。
6. 在“操作”选项卡中选择“启动程序”,浏览到需要启动的.bat文件,并确定。
7. 在“条件”选项卡中取消勾选“只有在计算机使用交流电源时才启动此任务”,以保证无论计算机是否接通电源都能启动。
通过以上步骤,就可以实现在Windows系统下监控进程并自动重启的功能了。当需要监控的进程关闭时,批处理文件会自动启动该进程,从而实现自动重启。需要注意的是,该方法只适用于单个进程的监控,如果需要同时监控多个进程,需要编写多个批处理文件并分别设置对应的触发器。
c++ Windows后台服务,实现定时监控进程,重启并打开进程界面,记录重启次数
实现这个功能需要以下步骤:
1. 创建一个 Windows 服务程序,可以使用 C++ 和 WinAPI 进行开发。可以使用 Visual Studio 生成一个 Windows Service 项目模板,然后在其中添加自己的代码。
2. 在服务程序中实现定时监控进程的功能。可以使用 Windows API 中的 EnumProcesses 函数枚举当前系统中所有的进程,并根据进程名字或者进程 ID 判断是否需要重启进程。可以使用 CreateProcess 函数启动进程,并且可以使用 ShellExecuteEx 函数打开进程界面。
3. 记录重启次数的功能可以使用文件或者数据库进行存储。可以在服务程序启动时读取之前的记录,然后在重启进程时更新记录。
4. 将服务程序注册到系统中并启动。可以使用命令行工具 sc.exe 或者使用 Visual Studio 的安装工具进行注册和卸载。
示例代码如下:
```c++
#include <windows.h>
#include <stdio.h>
SERVICE_STATUS g_ServiceStatus = {0};
SERVICE_STATUS_HANDLE g_StatusHandle = NULL;
HANDLE g_ServiceStopEvent = INVALID_HANDLE_VALUE;
VOID WINAPI ServiceMain (DWORD argc, LPTSTR *argv);
VOID WINAPI ServiceCtrlHandler (DWORD);
DWORD WINAPI ServiceWorkerThread (LPVOID lpParam);
#define SERVICE_NAME _T("MyService")
int main(int argc, char** argv)
{
SERVICE_TABLE_ENTRY ServiceTable[] =
{
{SERVICE_NAME, (LPSERVICE_MAIN_FUNCTION) ServiceMain},
{NULL, NULL}
};
if (StartServiceCtrlDispatcher (ServiceTable) == FALSE)
{
return GetLastError ();
}
return 0;
}
VOID WINAPI ServiceMain (DWORD argc, LPTSTR *argv)
{
DWORD Status = E_FAIL;
g_StatusHandle = RegisterServiceCtrlHandler (SERVICE_NAME, ServiceCtrlHandler);
if (g_StatusHandle == NULL)
{
goto EXIT;
}
g_ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
g_ServiceStatus.dwServiceSpecificExitCode = 0;
g_ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
SetServiceStatus (g_StatusHandle, &g_ServiceStatus);
g_ServiceStopEvent = CreateEvent (NULL, TRUE, FALSE, NULL);
if (g_ServiceStopEvent == NULL)
{
g_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus (g_StatusHandle, &g_ServiceStatus);
goto EXIT;
}
g_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
g_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus (g_StatusHandle, &g_ServiceStatus);
HANDLE hThread = CreateThread (NULL, 0, ServiceWorkerThread, NULL, 0, NULL);
WaitForSingleObject (hThread, INFINITE);
CloseHandle (g_ServiceStopEvent);
g_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus (g_StatusHandle, &g_ServiceStatus);
EXIT:
return;
}
VOID WINAPI ServiceCtrlHandler (DWORD CtrlCode)
{
switch (CtrlCode)
{
case SERVICE_CONTROL_STOP :
if (g_ServiceStatus.dwCurrentState != SERVICE_RUNNING)
break;
g_ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING;
SetServiceStatus (g_StatusHandle, &g_ServiceStatus);
SetEvent (g_ServiceStopEvent);
break;
case SERVICE_CONTROL_SHUTDOWN :
if (g_ServiceStatus.dwCurrentState != SERVICE_RUNNING)
break;
g_ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING;
SetServiceStatus (g_StatusHandle, &g_ServiceStatus);
SetEvent (g_ServiceStopEvent);
break;
default:
break;
}
}
DWORD WINAPI ServiceWorkerThread (LPVOID lpParam)
{
HANDLE hTimer = CreateWaitableTimer(NULL, FALSE, NULL);
if (hTimer == NULL)
{
return GetLastError();
}
LARGE_INTEGER liDueTime;
liDueTime.QuadPart = -10000000LL; // 1 second
if (!SetWaitableTimer(hTimer, &liDueTime, 60 * 1000, NULL, NULL, FALSE))
{
return GetLastError();
}
while (1)
{
DWORD dwWaitResult = WaitForSingleObject(hTimer, INFINITE);
if (dwWaitResult == WAIT_OBJECT_0)
{
// TODO: 定时监控进程并重启
}
else if (dwWaitResult == WAIT_FAILED)
{
return GetLastError();
}
}
return ERROR_SUCCESS;
}
```