This commit is contained in:
jimmy committed 2025-08-01 15:27:56 +08:00
1 parent 2fb4de59d9
commit 2f6e912c58
2 files changed
+50 -3

No files matched your search

@@ -1,4 +1,3 @@
namespace Infrastructure.Models; namespace Infrastructure.Models;
/// <summary> /// <summary>
@@ -6,6 +5,11 @@ namespace Infrastructure.Models;
/// </summary> /// </summary>
public class ProgramInfo public class ProgramInfo
{ {
/// <summary>
/// 编译时间
/// </summary>
public DateTime? CompileTimestamp { get; set; }
/// <summary> /// <summary>
/// 进程名称 /// 进程名称
/// </summary> /// </summary>
@@ -28,9 +32,9 @@ public class ProgramInfo
/* /*
ExitTime 和 ExitCode 这两个属性只有在进程已经退出后才能访问。对于正在运行的进程, ExitTime 和 ExitCode 这两个属性只有在进程已经退出后才能访问。对于正在运行的进程,
访问这些属性会抛出 "Process must exit before requested information can be determined" 异常。 访问这些属性会抛出 "Process must exit before requested information can be determined" 异常。
*/ */
/// <summary> /// <summary>
/// 退出时间 /// 退出时间
/// </summary> /// </summary>
@@ -95,6 +99,7 @@ public class ProgramInfo
public class ApplicationInfoModel public class ApplicationInfoModel
{ {
public required string Id { get; set; } public required string Id { get; set; }
/// <summary> /// <summary>
/// 进程名称 /// 进程名称
/// </summary> /// </summary>
@@ -1,3 +1,4 @@
using System.IO;
using Common; using Common;
using Common.ExpandException; using Common.ExpandException;
using Common.Logger; using Common.Logger;
@@ -230,6 +231,21 @@ public static class SysInfoUtils
Log.Information($"无法获取进程 {pid} 的图标: {ex.Message}"); Log.Information($"无法获取进程 {pid} 的图标: {ex.Message}");
} }
// 获取编译时间戳(PE Header 中的时间戳)
try
{
if (!string.IsNullOrEmpty(exeInfo.MainModulePath))
{
var compileTime = GetPECompileTime(exeInfo.MainModulePath);
exeInfo.CompileTimestamp = compileTime;
}
}
catch (Exception ex)
{
Log.Information($"无法获取进程 {pid} 的编译时间戳: {ex.Message}");
exeInfo.CompileTimestamp = null;
}
#endregion #endregion
ProcessCache.Instance.Set(pck, exeInfo); ProcessCache.Instance.Set(pck, exeInfo);
@@ -268,6 +284,32 @@ public static class SysInfoUtils
} }
} }
/// <summary>
/// 获取项目编译时间
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
private static DateTime? GetPECompileTime(string filePath)
{
try
{
using var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
using var reader = new BinaryReader(fs);
fs.Seek(0x3C, SeekOrigin.Begin);
int peOffset = reader.ReadInt32();
fs.Seek(peOffset + 8, SeekOrigin.Begin);
int timestamp = reader.ReadInt32();
return DateTimeOffset.FromUnixTimeSeconds(timestamp).LocalDateTime;
}
catch
{
return null;
}
}
/// <summary> /// <summary>
/// 获取程序路径(名称) /// 获取程序路径(名称)
/// </summary> /// </summary>