升级为全面系统环境检测工具
主要改进: - 重新设计用户界面,采用标签页展示不同类型的系统信息 - 实现全面的系统信息检测(操作系统版本、架构、启动信息等) - 添加详细的硬件配置检测(CPU、内存、磁盘、显卡等) - 集成网络环境检测(本地网络、公网IP、连接状态等) - 实现软件环境扫描(.NET版本、浏览器、已安装软件等) - 添加环境变量检测和导出报告功能 - 保留原有的.NET Framework 4.8环境检测功能 - 优化用户界面体验,支持实时进度显示 功能特点: - 一键检测所有系统环境信息 - 分类展示检测结果,便于查阅 - 支持导出完整检测报告为文本文件 - 异步执行检测,避免界面卡顿 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
00d19a0c56
commit
6040a2491a
@ -23,6 +23,11 @@
|
|||||||
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!-- 添加对Microsoft.VisualBasic的依赖以获取ComputerInfo功能 -->
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.VisualBasic" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<!-- 模板项目不需要外部依赖 -->
|
<!-- 模板项目不需要外部依赖 -->
|
||||||
<!-- 如需合并第三方DLL,可在此添加PackageReference -->
|
<!-- 如需合并第三方DLL,可在此添加PackageReference -->
|
||||||
<!-- 示例:
|
<!-- 示例:
|
||||||
|
|||||||
197
Form1.Designer.cs
generated
197
Form1.Designer.cs
generated
@ -36,23 +36,14 @@ namespace Environmental_testing
|
|||||||
|
|
||||||
// 主窗体设置
|
// 主窗体设置
|
||||||
AutoScaleMode = AutoScaleMode.Font;
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
ClientSize = new Size(600, 400);
|
ClientSize = new Size(800, 700);
|
||||||
Text = "WinForms应用模板";
|
Text = "系统环境检测工具";
|
||||||
StartPosition = FormStartPosition.CenterScreen;
|
StartPosition = FormStartPosition.CenterScreen;
|
||||||
|
|
||||||
// 创建控件
|
// 创建控件
|
||||||
grpSourceFolder = new GroupBox();
|
|
||||||
lblSourcePath = new Label();
|
|
||||||
txtSourcePath = new TextBox();
|
|
||||||
btnBrowseSource = new Button();
|
|
||||||
|
|
||||||
grpOutputFolder = new GroupBox();
|
|
||||||
lblOutputPath = new Label();
|
|
||||||
txtOutputPath = new TextBox();
|
|
||||||
btnBrowseOutput = new Button();
|
|
||||||
|
|
||||||
pnlButtons = new Panel();
|
pnlButtons = new Panel();
|
||||||
btnMerge = new Button();
|
btnDetect = new Button();
|
||||||
|
btnExport = new Button();
|
||||||
btnClear = new Button();
|
btnClear = new Button();
|
||||||
btnExit = new Button();
|
btnExit = new Button();
|
||||||
|
|
||||||
@ -60,115 +51,163 @@ namespace Environmental_testing
|
|||||||
progressBar = new ProgressBar();
|
progressBar = new ProgressBar();
|
||||||
txtLog = new TextBox();
|
txtLog = new TextBox();
|
||||||
|
|
||||||
// 设置源文件夹组
|
// 环境信息显示区域
|
||||||
grpSourceFolder.Text = "输入文件夹";
|
tabControl = new TabControl();
|
||||||
grpSourceFolder.Location = new Point(10, 10);
|
tabSystem = new TabPage("系统信息");
|
||||||
grpSourceFolder.Size = new Size(580, 60);
|
tabHardware = new TabPage("硬件信息");
|
||||||
grpSourceFolder.TabStop = false;
|
tabNetwork = new TabPage("网络信息");
|
||||||
|
tabSoftware = new TabPage("软件环境");
|
||||||
|
|
||||||
lblSourcePath.Text = "路径:";
|
// 系统信息控件
|
||||||
lblSourcePath.Location = new Point(10, 25);
|
grpSystemInfo = new GroupBox();
|
||||||
lblSourcePath.Size = new Size(30, 23);
|
txtSystemInfo = new TextBox();
|
||||||
|
|
||||||
txtSourcePath.Location = new Point(45, 22);
|
// 硬件信息控件
|
||||||
txtSourcePath.Size = new Size(470, 23);
|
grpHardwareInfo = new GroupBox();
|
||||||
|
txtHardwareInfo = new TextBox();
|
||||||
|
|
||||||
btnBrowseSource.Text = "浏览";
|
// 网络信息控件
|
||||||
btnBrowseSource.Location = new Point(520, 20);
|
grpNetworkInfo = new GroupBox();
|
||||||
btnBrowseSource.Size = new Size(50, 25);
|
txtNetworkInfo = new TextBox();
|
||||||
btnBrowseSource.Click += new EventHandler(btnBrowseSource_Click);
|
|
||||||
|
|
||||||
grpSourceFolder.Controls.Add(lblSourcePath);
|
// 软件环境控件
|
||||||
grpSourceFolder.Controls.Add(txtSourcePath);
|
grpSoftwareInfo = new GroupBox();
|
||||||
grpSourceFolder.Controls.Add(btnBrowseSource);
|
txtSoftwareInfo = new TextBox();
|
||||||
|
|
||||||
// 设置输出文件夹组
|
|
||||||
grpOutputFolder.Text = "输出文件夹";
|
|
||||||
grpOutputFolder.Location = new Point(10, 80);
|
|
||||||
grpOutputFolder.Size = new Size(580, 60);
|
|
||||||
grpOutputFolder.TabStop = false;
|
|
||||||
|
|
||||||
lblOutputPath.Text = "路径:";
|
|
||||||
lblOutputPath.Location = new Point(10, 25);
|
|
||||||
lblOutputPath.Size = new Size(30, 23);
|
|
||||||
|
|
||||||
txtOutputPath.Location = new Point(45, 22);
|
|
||||||
txtOutputPath.Size = new Size(470, 23);
|
|
||||||
|
|
||||||
btnBrowseOutput.Text = "浏览";
|
|
||||||
btnBrowseOutput.Location = new Point(520, 20);
|
|
||||||
btnBrowseOutput.Size = new Size(50, 25);
|
|
||||||
btnBrowseOutput.Click += new EventHandler(btnBrowseOutput_Click);
|
|
||||||
|
|
||||||
grpOutputFolder.Controls.Add(lblOutputPath);
|
|
||||||
grpOutputFolder.Controls.Add(txtOutputPath);
|
|
||||||
grpOutputFolder.Controls.Add(btnBrowseOutput);
|
|
||||||
|
|
||||||
// 设置按钮面板
|
// 设置按钮面板
|
||||||
pnlButtons.Location = new Point(10, 150);
|
pnlButtons.Location = new Point(10, 10);
|
||||||
pnlButtons.Size = new Size(580, 40);
|
pnlButtons.Size = new Size(780, 40);
|
||||||
|
|
||||||
btnMerge.Text = "执行";
|
btnDetect.Text = "开始检测";
|
||||||
btnMerge.Location = new Point(10, 8);
|
btnDetect.Location = new Point(10, 8);
|
||||||
btnMerge.Size = new Size(75, 25);
|
btnDetect.Size = new Size(100, 25);
|
||||||
btnMerge.Click += new EventHandler(btnMerge_Click);
|
btnDetect.Click += new EventHandler(btnDetect_Click);
|
||||||
|
|
||||||
btnClear.Text = "清空";
|
btnExport.Text = "导出报告";
|
||||||
btnClear.Location = new Point(100, 8);
|
btnExport.Location = new Point(120, 8);
|
||||||
btnClear.Size = new Size(75, 25);
|
btnExport.Size = new Size(100, 25);
|
||||||
|
btnExport.Click += new EventHandler(btnExport_Click);
|
||||||
|
|
||||||
|
btnClear.Text = "清空日志";
|
||||||
|
btnClear.Location = new Point(230, 8);
|
||||||
|
btnClear.Size = new Size(100, 25);
|
||||||
btnClear.Click += new EventHandler(btnClear_Click);
|
btnClear.Click += new EventHandler(btnClear_Click);
|
||||||
|
|
||||||
btnExit.Text = "退出";
|
btnExit.Text = "退出";
|
||||||
btnExit.Location = new Point(190, 8);
|
btnExit.Location = new Point(340, 8);
|
||||||
btnExit.Size = new Size(75, 25);
|
btnExit.Size = new Size(75, 25);
|
||||||
btnExit.Click += new EventHandler(btnExit_Click);
|
btnExit.Click += new EventHandler(btnExit_Click);
|
||||||
|
|
||||||
pnlButtons.Controls.Add(btnMerge);
|
pnlButtons.Controls.Add(btnDetect);
|
||||||
|
pnlButtons.Controls.Add(btnExport);
|
||||||
pnlButtons.Controls.Add(btnClear);
|
pnlButtons.Controls.Add(btnClear);
|
||||||
pnlButtons.Controls.Add(btnExit);
|
pnlButtons.Controls.Add(btnExit);
|
||||||
|
|
||||||
|
// 设置标签控件
|
||||||
|
tabControl.Location = new Point(10, 60);
|
||||||
|
tabControl.Size = new Size(780, 450);
|
||||||
|
tabControl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
|
|
||||||
|
// 系统信息标签页
|
||||||
|
grpSystemInfo.Text = "操作系统信息";
|
||||||
|
grpSystemInfo.Dock = DockStyle.Fill;
|
||||||
|
txtSystemInfo.Dock = DockStyle.Fill;
|
||||||
|
txtSystemInfo.Multiline = true;
|
||||||
|
txtSystemInfo.ScrollBars = ScrollBars.Vertical;
|
||||||
|
txtSystemInfo.ReadOnly = true;
|
||||||
|
txtSystemInfo.Font = new Font("Consolas", 9F);
|
||||||
|
grpSystemInfo.Controls.Add(txtSystemInfo);
|
||||||
|
tabSystem.Controls.Add(grpSystemInfo);
|
||||||
|
|
||||||
|
// 硬件信息标签页
|
||||||
|
grpHardwareInfo.Text = "硬件配置信息";
|
||||||
|
grpHardwareInfo.Dock = DockStyle.Fill;
|
||||||
|
txtHardwareInfo.Dock = DockStyle.Fill;
|
||||||
|
txtHardwareInfo.Multiline = true;
|
||||||
|
txtHardwareInfo.ScrollBars = ScrollBars.Vertical;
|
||||||
|
txtHardwareInfo.ReadOnly = true;
|
||||||
|
txtHardwareInfo.Font = new Font("Consolas", 9F);
|
||||||
|
grpHardwareInfo.Controls.Add(txtHardwareInfo);
|
||||||
|
tabHardware.Controls.Add(grpHardwareInfo);
|
||||||
|
|
||||||
|
// 网络信息标签页
|
||||||
|
grpNetworkInfo.Text = "网络环境信息";
|
||||||
|
grpNetworkInfo.Dock = DockStyle.Fill;
|
||||||
|
txtNetworkInfo.Dock = DockStyle.Fill;
|
||||||
|
txtNetworkInfo.Multiline = true;
|
||||||
|
txtNetworkInfo.ScrollBars = ScrollBars.Vertical;
|
||||||
|
txtNetworkInfo.ReadOnly = true;
|
||||||
|
txtNetworkInfo.Font = new Font("Consolas", 9F);
|
||||||
|
grpNetworkInfo.Controls.Add(txtNetworkInfo);
|
||||||
|
tabNetwork.Controls.Add(grpNetworkInfo);
|
||||||
|
|
||||||
|
// 软件环境标签页
|
||||||
|
grpSoftwareInfo.Text = "软件环境信息";
|
||||||
|
grpSoftwareInfo.Dock = DockStyle.Fill;
|
||||||
|
txtSoftwareInfo.Dock = DockStyle.Fill;
|
||||||
|
txtSoftwareInfo.Multiline = true;
|
||||||
|
txtSoftwareInfo.ScrollBars = ScrollBars.Vertical;
|
||||||
|
txtSoftwareInfo.ReadOnly = true;
|
||||||
|
txtSoftwareInfo.Font = new Font("Consolas", 9F);
|
||||||
|
grpSoftwareInfo.Controls.Add(txtSoftwareInfo);
|
||||||
|
tabSoftware.Controls.Add(grpSoftwareInfo);
|
||||||
|
|
||||||
|
tabControl.TabPages.Add(tabSystem);
|
||||||
|
tabControl.TabPages.Add(tabHardware);
|
||||||
|
tabControl.TabPages.Add(tabNetwork);
|
||||||
|
tabControl.TabPages.Add(tabSoftware);
|
||||||
|
|
||||||
// 设置进度组
|
// 设置进度组
|
||||||
grpProgress.Text = "进度";
|
grpProgress.Text = "检测进度";
|
||||||
grpProgress.Location = new Point(10, 200);
|
grpProgress.Location = new Point(10, 520);
|
||||||
grpProgress.Size = new Size(580, 180);
|
grpProgress.Size = new Size(780, 150);
|
||||||
|
grpProgress.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
grpProgress.TabStop = false;
|
grpProgress.TabStop = false;
|
||||||
|
|
||||||
progressBar.Location = new Point(10, 25);
|
progressBar.Location = new Point(10, 25);
|
||||||
progressBar.Size = new Size(560, 23);
|
progressBar.Size = new Size(760, 23);
|
||||||
progressBar.Style = ProgressBarStyle.Continuous;
|
progressBar.Style = ProgressBarStyle.Continuous;
|
||||||
|
|
||||||
txtLog.Location = new Point(10, 55);
|
txtLog.Location = new Point(10, 55);
|
||||||
txtLog.Size = new Size(560, 115);
|
txtLog.Size = new Size(760, 85);
|
||||||
txtLog.Multiline = true;
|
txtLog.Multiline = true;
|
||||||
txtLog.ScrollBars = ScrollBars.Vertical;
|
txtLog.ScrollBars = ScrollBars.Vertical;
|
||||||
txtLog.ReadOnly = true;
|
txtLog.ReadOnly = true;
|
||||||
|
txtLog.Font = new Font("Consolas", 8F);
|
||||||
|
|
||||||
grpProgress.Controls.Add(progressBar);
|
grpProgress.Controls.Add(progressBar);
|
||||||
grpProgress.Controls.Add(txtLog);
|
grpProgress.Controls.Add(txtLog);
|
||||||
|
|
||||||
// 添加所有控件到窗体
|
// 添加所有控件到窗体
|
||||||
Controls.Add(grpSourceFolder);
|
|
||||||
Controls.Add(grpOutputFolder);
|
|
||||||
Controls.Add(pnlButtons);
|
Controls.Add(pnlButtons);
|
||||||
|
Controls.Add(tabControl);
|
||||||
Controls.Add(grpProgress);
|
Controls.Add(grpProgress);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private GroupBox grpSourceFolder;
|
|
||||||
private Label lblSourcePath;
|
|
||||||
private TextBox txtSourcePath;
|
|
||||||
private Button btnBrowseSource;
|
|
||||||
private GroupBox grpOutputFolder;
|
|
||||||
private Label lblOutputPath;
|
|
||||||
private TextBox txtOutputPath;
|
|
||||||
private Button btnBrowseOutput;
|
|
||||||
private Panel pnlButtons;
|
private Panel pnlButtons;
|
||||||
private Button btnMerge;
|
private Button btnDetect;
|
||||||
|
private Button btnExport;
|
||||||
private Button btnClear;
|
private Button btnClear;
|
||||||
private Button btnExit;
|
private Button btnExit;
|
||||||
private GroupBox grpProgress;
|
private GroupBox grpProgress;
|
||||||
private ProgressBar progressBar;
|
private ProgressBar progressBar;
|
||||||
private TextBox txtLog;
|
private TextBox txtLog;
|
||||||
|
|
||||||
|
// 环境信息显示控件
|
||||||
|
private TabControl tabControl;
|
||||||
|
private TabPage tabSystem;
|
||||||
|
private TabPage tabHardware;
|
||||||
|
private TabPage tabNetwork;
|
||||||
|
private TabPage tabSoftware;
|
||||||
|
private GroupBox grpSystemInfo;
|
||||||
|
private TextBox txtSystemInfo;
|
||||||
|
private GroupBox grpHardwareInfo;
|
||||||
|
private TextBox txtHardwareInfo;
|
||||||
|
private GroupBox grpNetworkInfo;
|
||||||
|
private TextBox txtNetworkInfo;
|
||||||
|
private GroupBox grpSoftwareInfo;
|
||||||
|
private TextBox txtSoftwareInfo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
738
Form1.cs
738
Form1.cs
@ -1,6 +1,13 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.NetworkInformation;
|
||||||
|
using System.Text;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using Microsoft.Win32;
|
||||||
|
|
||||||
namespace Environmental_testing
|
namespace Environmental_testing
|
||||||
{
|
{
|
||||||
@ -26,38 +33,96 @@ namespace Environmental_testing
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnBrowseSource_Click(object sender, EventArgs e)
|
private void btnDetect_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
using (FolderBrowserDialog dialog = new FolderBrowserDialog())
|
Log("开始系统环境检测...");
|
||||||
|
btnDetect.Enabled = false;
|
||||||
|
|
||||||
|
System.Threading.Tasks.Task.Run(() =>
|
||||||
{
|
{
|
||||||
dialog.Description = "选择文件夹";
|
try
|
||||||
if (dialog.ShowDialog() == DialogResult.OK)
|
|
||||||
{
|
{
|
||||||
txtSourcePath.Text = dialog.SelectedPath;
|
// 清空现有信息
|
||||||
Log($"选择的文件夹: {dialog.SelectedPath}");
|
ClearAllInfo();
|
||||||
|
|
||||||
|
// 检测进度设置
|
||||||
|
int totalSteps = 5;
|
||||||
|
int currentStep = 0;
|
||||||
|
|
||||||
|
// 1. 检测系统信息
|
||||||
|
this.Invoke(new Action(() => UpdateProgress(++currentStep, totalSteps, "检测操作系统信息...")));
|
||||||
|
var systemInfo = GetSystemInfo();
|
||||||
|
this.Invoke(new Action(() => txtSystemInfo.Text = systemInfo));
|
||||||
|
Log("系统信息检测完成");
|
||||||
|
|
||||||
|
// 2. 检测硬件信息
|
||||||
|
this.Invoke(new Action(() => UpdateProgress(++currentStep, totalSteps, "检测硬件配置信息...")));
|
||||||
|
var hardwareInfo = GetHardwareInfo();
|
||||||
|
this.Invoke(new Action(() => txtHardwareInfo.Text = hardwareInfo));
|
||||||
|
Log("硬件信息检测完成");
|
||||||
|
|
||||||
|
// 3. 检测网络信息
|
||||||
|
this.Invoke(new Action(() => UpdateProgress(++currentStep, totalSteps, "检测网络环境信息...")));
|
||||||
|
var networkInfo = GetNetworkInfo();
|
||||||
|
this.Invoke(new Action(() => txtNetworkInfo.Text = networkInfo));
|
||||||
|
Log("网络信息检测完成");
|
||||||
|
|
||||||
|
// 4. 检测软件环境
|
||||||
|
this.Invoke(new Action(() => UpdateProgress(++currentStep, totalSteps, "检测软件环境信息...")));
|
||||||
|
var softwareInfo = GetSoftwareInfo();
|
||||||
|
this.Invoke(new Action(() => txtSoftwareInfo.Text = softwareInfo));
|
||||||
|
Log("软件环境检测完成");
|
||||||
|
|
||||||
|
this.Invoke(new Action(() => UpdateProgress(++currentStep, totalSteps, "检测完成!")));
|
||||||
|
|
||||||
|
this.Invoke(new Action(() => Log("所有环境检测完成!")));
|
||||||
}
|
}
|
||||||
}
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
this.Invoke(new Action(() => Log($"检测过程中发生错误: {ex.Message}")));
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
this.Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
btnDetect.Enabled = true;
|
||||||
|
progressBar.Value = 0;
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnBrowseOutput_Click(object sender, EventArgs e)
|
private void btnExport_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
using (FolderBrowserDialog dialog = new FolderBrowserDialog())
|
using (SaveFileDialog dialog = new SaveFileDialog())
|
||||||
{
|
{
|
||||||
dialog.Description = "选择输出文件夹";
|
dialog.Filter = "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*";
|
||||||
|
dialog.FileName = $"系统环境检测报告_{DateTime.Now:yyyyMMdd_HHmmss}.txt";
|
||||||
|
dialog.Title = "导出环境检测报告";
|
||||||
|
|
||||||
if (dialog.ShowDialog() == DialogResult.OK)
|
if (dialog.ShowDialog() == DialogResult.OK)
|
||||||
{
|
{
|
||||||
txtOutputPath.Text = dialog.SelectedPath;
|
try
|
||||||
Log($"输出文件夹: {dialog.SelectedPath}");
|
{
|
||||||
|
ExportReport(dialog.FileName);
|
||||||
|
Log($"报告已导出到: {dialog.FileName}");
|
||||||
|
MessageBox.Show("报告导出成功!", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log($"导出报告失败: {ex.Message}");
|
||||||
|
MessageBox.Show($"导出报告失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnClear_Click(object sender, EventArgs e)
|
private void btnClear_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
txtSourcePath.Clear();
|
ClearAllInfo();
|
||||||
txtOutputPath.Clear();
|
|
||||||
txtLog.Clear();
|
txtLog.Clear();
|
||||||
progressBar.Value = 0;
|
progressBar.Value = 0;
|
||||||
|
Log("已清空所有信息");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnExit_Click(object sender, EventArgs e)
|
private void btnExit_Click(object sender, EventArgs e)
|
||||||
@ -65,17 +130,654 @@ namespace Environmental_testing
|
|||||||
Application.Exit();
|
Application.Exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnMerge_Click(object sender, EventArgs e)
|
private void ClearAllInfo()
|
||||||
{
|
{
|
||||||
MessageBox.Show("HelloWorld", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
txtSystemInfo.Clear();
|
||||||
Log("HelloWorld");
|
txtHardwareInfo.Clear();
|
||||||
|
txtNetworkInfo.Clear();
|
||||||
|
txtSoftwareInfo.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateProgress(int current, int total, string status)
|
||||||
|
{
|
||||||
|
progressBar.Value = (int)((double)current / total * 100);
|
||||||
|
Log(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Log(string msg)
|
private void Log(string msg)
|
||||||
{
|
{
|
||||||
txtLog.AppendText($"{msg}\r\n");
|
txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] {msg}\r\n");
|
||||||
txtLog.ScrollToCaret();
|
txtLog.ScrollToCaret();
|
||||||
Application.DoEvents();
|
Application.DoEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string GetSystemInfo()
|
||||||
|
{
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 操作系统基本信息
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine(" 操作系统基本信息");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
|
||||||
|
var os = Environment.OSVersion;
|
||||||
|
sb.AppendLine($"操作系统版本: {os}");
|
||||||
|
sb.AppendLine($"系统架构: {Environment.Is64BitOperatingSystem ? "64位" : "32位"}");
|
||||||
|
sb.AppendLine($"计算机名: {Environment.MachineName}");
|
||||||
|
sb.AppendLine($"用户名: {Environment.UserName}");
|
||||||
|
sb.AppendLine($"域名: {Environment.UserDomainName}");
|
||||||
|
|
||||||
|
// 系统目录信息
|
||||||
|
sb.AppendLine();
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine(" 系统目录信息");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine($"系统目录: {Environment.SystemDirectory}");
|
||||||
|
sb.AppendLine($"Windows目录: {Environment.GetFolderPath(Environment.SpecialFolder.Windows)}");
|
||||||
|
sb.AppendLine($"程序文件目录: {Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)}");
|
||||||
|
sb.AppendLine($"临时文件夹: {Path.GetTempPath()}");
|
||||||
|
|
||||||
|
// 系统启动信息
|
||||||
|
sb.AppendLine();
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine(" 系统启动信息");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine($"系统启动时间: {GetSystemBootTime()}");
|
||||||
|
sb.AppendLine($"当前时间: {DateTime.Now}");
|
||||||
|
sb.AppendLine($"系统已运行: {GetSystemUptime()}");
|
||||||
|
|
||||||
|
// 注册表获取更多系统信息
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion"))
|
||||||
|
{
|
||||||
|
if (key != null)
|
||||||
|
{
|
||||||
|
sb.AppendLine();
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine(" 详细系统信息");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
|
||||||
|
var productName = key.GetValue("ProductName")?.ToString() ?? "未知";
|
||||||
|
var editionId = key.GetValue("EditionID")?.ToString() ?? "未知";
|
||||||
|
var version = key.GetValue("CurrentVersion")?.ToString() ?? "未知";
|
||||||
|
var build = key.GetValue("CurrentBuild")?.ToString() ?? "未知";
|
||||||
|
var buildLab = key.GetValue("BuildLabEx")?.ToString() ?? "未知";
|
||||||
|
|
||||||
|
sb.AppendLine($"产品名称: {productName}");
|
||||||
|
sb.AppendLine($"版本号: {version}");
|
||||||
|
sb.AppendLine($"版本ID: {editionId}");
|
||||||
|
sb.AppendLine($"构建号: {build}");
|
||||||
|
if (!string.IsNullOrEmpty(buildLab))
|
||||||
|
{
|
||||||
|
sb.AppendLine($"完整构建信息: {buildLab}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"获取详细系统信息失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"系统信息检测失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetHardwareInfo()
|
||||||
|
{
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// CPU信息
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine(" CPU 信息");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"HARDWARE\DESCRIPTION\System\CentralProcessor\0"))
|
||||||
|
{
|
||||||
|
if (key != null)
|
||||||
|
{
|
||||||
|
var processorName = key.GetValue("ProcessorNameString")?.ToString() ?? "未知CPU";
|
||||||
|
var vendor = key.GetValue("VendorIdentifier")?.ToString() ?? "未知";
|
||||||
|
var mhz = key.GetValue("~MHz")?.ToString() ?? "未知";
|
||||||
|
|
||||||
|
sb.AppendLine($"处理器型号: {processorName}");
|
||||||
|
sb.AppendLine($"制造商: {vendor}");
|
||||||
|
sb.AppendLine($"主频: {mhz} MHz");
|
||||||
|
sb.AppendLine($"处理器核心数: {Environment.ProcessorCount}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"获取CPU信息失败: {ex.Message}");
|
||||||
|
sb.AppendLine($"处理器核心数: {Environment.ProcessorCount}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 内存信息
|
||||||
|
sb.AppendLine();
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine(" 内存信息");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
|
||||||
|
var gc = GC.GetTotalMemory(false);
|
||||||
|
sb.AppendLine($"当前内存使用: {gc / 1024 / 1024} MB");
|
||||||
|
sb.AppendLine($"系统工作集内存: {Environment.WorkingSet / 1024 / 1024} MB");
|
||||||
|
|
||||||
|
// 获取总物理内存
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"HARDWARE\DESCRIPTION\System\CentralProcessor\0"))
|
||||||
|
{
|
||||||
|
// 这里可以通过其他方式获取内存信息
|
||||||
|
}
|
||||||
|
|
||||||
|
var computerInfo = new Microsoft.VisualBasic.Devices.ComputerInfo();
|
||||||
|
sb.AppendLine($"总物理内存: {computerInfo.TotalPhysicalMemory / 1024 / 1024} MB");
|
||||||
|
sb.AppendLine($"可用物理内存: {computerInfo.AvailablePhysicalMemory / 1024 / 1024} MB");
|
||||||
|
sb.AppendLine($"总虚拟内存: {computerInfo.TotalVirtualMemory / 1024 / 1024} MB");
|
||||||
|
sb.AppendLine($"可用虚拟内存: {computerInfo.AvailableVirtualMemory / 1024 / 1024} MB");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"获取详细内存信息失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 磁盘信息
|
||||||
|
sb.AppendLine();
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine(" 磁盘信息");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
|
||||||
|
var drives = DriveInfo.GetDrives();
|
||||||
|
foreach (var drive in drives)
|
||||||
|
{
|
||||||
|
if (drive.IsReady)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"驱动器 {drive.Name}:");
|
||||||
|
sb.AppendLine($" 文件系统: {drive.DriveFormat}");
|
||||||
|
sb.AppendLine($" 卷标: {drive.VolumeLabel}");
|
||||||
|
sb.AppendLine($" 总容量: {drive.TotalSize / 1024 / 1024 / 1024} GB");
|
||||||
|
sb.AppendLine($" 可用空间: {drive.AvailableFreeSpace / 1024 / 1024 / 1024} GB");
|
||||||
|
sb.AppendLine($" 已用空间: {(drive.TotalSize - drive.AvailableFreeSpace) / 1024 / 1024 / 1024} GB");
|
||||||
|
sb.AppendLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 显卡信息
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine(" 显卡信息");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}"))
|
||||||
|
{
|
||||||
|
if (key != null)
|
||||||
|
{
|
||||||
|
var subKeyNames = key.GetSubKeyNames();
|
||||||
|
foreach (var subKeyName in subKeyNames)
|
||||||
|
{
|
||||||
|
using (var subKey = key.OpenSubKey(subKeyName))
|
||||||
|
{
|
||||||
|
var driverDesc = subKey?.GetValue("DriverDesc")?.ToString();
|
||||||
|
if (!string.IsNullOrEmpty(driverDesc))
|
||||||
|
{
|
||||||
|
sb.AppendLine($"显卡: {driverDesc}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"获取显卡信息失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"硬件信息检测失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetNetworkInfo()
|
||||||
|
{
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 网络接口信息
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine(" 网络接口信息");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
|
||||||
|
var adapters = NetworkInterface.GetAllNetworkInterfaces();
|
||||||
|
foreach (var adapter in adapters)
|
||||||
|
{
|
||||||
|
if (adapter.NetworkInterfaceType != NetworkInterfaceType.Loopback)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"网络接口: {adapter.Name}");
|
||||||
|
sb.AppendLine($" 类型: {adapter.NetworkInterfaceType}");
|
||||||
|
sb.AppendLine($" 状态: {adapter.OperationalStatus}");
|
||||||
|
sb.AppendLine($" 描述: {adapter.Description}");
|
||||||
|
|
||||||
|
if (adapter.OperationalStatus == OperationalStatus.Up)
|
||||||
|
{
|
||||||
|
var ipProperties = adapter.GetIPProperties();
|
||||||
|
|
||||||
|
// IP地址信息
|
||||||
|
foreach (var unicastIp in ipProperties.UnicastAddresses)
|
||||||
|
{
|
||||||
|
if (unicastIp.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork ||
|
||||||
|
unicastIp.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
|
||||||
|
{
|
||||||
|
sb.AppendLine($" IP地址: {unicastIp.Address}");
|
||||||
|
sb.AppendLine($" 子网掩码: {unicastIp.IPv4Mask}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 网关信息
|
||||||
|
foreach (var gateway in ipProperties.GatewayAddresses)
|
||||||
|
{
|
||||||
|
sb.AppendLine($" 网关: {gateway.Address}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// DNS服务器信息
|
||||||
|
foreach (var dns in ipProperties.DnsAddresses)
|
||||||
|
{
|
||||||
|
sb.AppendLine($" DNS服务器: {dns}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sb.AppendLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 公网IP信息
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine(" 公网连接信息");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 检测网络连接状态
|
||||||
|
sb.AppendLine($"本地连接测试: {TestNetworkConnection()}");
|
||||||
|
|
||||||
|
// 获取公网IP(需要网络连接)
|
||||||
|
var publicIP = GetPublicIPAddress();
|
||||||
|
if (!string.IsNullOrEmpty(publicIP))
|
||||||
|
{
|
||||||
|
sb.AppendLine($"公网IP地址: {publicIP}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sb.AppendLine("公网IP地址: 无法获取");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"获取公网信息失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 网络配置信息
|
||||||
|
sb.AppendLine();
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine(" 网络配置信息");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine($"主机名: {Dns.GetHostName()}");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var hostEntry = Dns.GetHostEntry(Dns.GetHostName());
|
||||||
|
sb.AppendLine("主机IP地址:");
|
||||||
|
foreach (var ip in hostEntry.AddressList)
|
||||||
|
{
|
||||||
|
sb.AppendLine($" {ip}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"获取主机IP失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"网络信息检测失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetSoftwareInfo()
|
||||||
|
{
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// .运行时环境
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine(" .NET运行时环境");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
|
||||||
|
// .NET Framework版本
|
||||||
|
sb.AppendLine(".NET Framework版本:");
|
||||||
|
GetNetFrameworkVersions(sb);
|
||||||
|
|
||||||
|
// 当前应用运行环境
|
||||||
|
sb.AppendLine();
|
||||||
|
sb.AppendLine("当前运行时信息:");
|
||||||
|
sb.AppendLine($" .NET版本: {Environment.Version}");
|
||||||
|
sb.AppendLine($" CLR版本: {Environment.Version}");
|
||||||
|
|
||||||
|
// 浏览器信息
|
||||||
|
sb.AppendLine();
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine(" 浏览器信息");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
|
||||||
|
GetBrowserInfo(sb);
|
||||||
|
|
||||||
|
// 已安装软件(部分常用软件)
|
||||||
|
sb.AppendLine();
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine(" 已安装软件信息");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
|
||||||
|
GetInstalledSoftware(sb);
|
||||||
|
|
||||||
|
// 环境变量
|
||||||
|
sb.AppendLine();
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine(" 重要环境变量");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
|
||||||
|
var envVars = new[]
|
||||||
|
{
|
||||||
|
"PATH", "TEMP", "TMP", "USERNAME", "COMPUTERNAME",
|
||||||
|
"OS", "PROCESSOR_ARCHITECTURE", "NUMBER_OF_PROCESSORS",
|
||||||
|
"WINDIR", "SYSTEMROOT", "PROGRAMFILES", "PROGRAMFILES(X86)",
|
||||||
|
"COMMONPROGRAMFILES", "APPDATA", "LOCALAPPDATA", "USERPROFILE"
|
||||||
|
};
|
||||||
|
|
||||||
|
foreach (var envVar in envVars)
|
||||||
|
{
|
||||||
|
var value = Environment.GetEnvironmentVariable(envVar);
|
||||||
|
sb.AppendLine($"{envVar}: {value}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"软件环境检测失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GetNetFrameworkVersions(StringBuilder sb)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (RegistryKey ndpKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
|
||||||
|
{
|
||||||
|
if (ndpKey != null)
|
||||||
|
{
|
||||||
|
foreach (string versionKeyName in ndpKey.GetSubKeyNames())
|
||||||
|
{
|
||||||
|
if (versionKeyName.StartsWith("v"))
|
||||||
|
{
|
||||||
|
RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName);
|
||||||
|
if (versionKey != null)
|
||||||
|
{
|
||||||
|
object name = versionKey.GetValue("Version");
|
||||||
|
object sp = versionKey.GetValue("SP");
|
||||||
|
object install = versionKey.GetValue("Install");
|
||||||
|
|
||||||
|
if (install != null && install.ToString() == "1")
|
||||||
|
{
|
||||||
|
var versionInfo = $" {versionKeyName}";
|
||||||
|
if (name != null)
|
||||||
|
{
|
||||||
|
versionInfo += $" - {name}";
|
||||||
|
}
|
||||||
|
if (sp != null)
|
||||||
|
{
|
||||||
|
versionInfo += $" SP{sp}";
|
||||||
|
}
|
||||||
|
sb.AppendLine(versionInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查客户端和完整版本
|
||||||
|
RegistryKey subKey = versionKey.OpenSubKey("Client");
|
||||||
|
if (subKey != null)
|
||||||
|
{
|
||||||
|
name = subKey.GetValue("Version");
|
||||||
|
if (name != null)
|
||||||
|
{
|
||||||
|
sb.AppendLine($" {versionKeyName} (Client): {name}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
subKey = versionKey.OpenSubKey("Full");
|
||||||
|
if (subKey != null)
|
||||||
|
{
|
||||||
|
name = subKey.GetValue("Version");
|
||||||
|
if (name != null)
|
||||||
|
{
|
||||||
|
sb.AppendLine($" {versionKeyName} (Full): {name}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"获取.NET Framework版本失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GetBrowserInfo(StringBuilder sb)
|
||||||
|
{
|
||||||
|
// 检测常用浏览器
|
||||||
|
var browsers = new[]
|
||||||
|
{
|
||||||
|
new { Name = "Google Chrome", Path = @"SOFTWARE\Google\Chrome" },
|
||||||
|
new { Name = "Mozilla Firefox", Path = @"SOFTWARE\Mozilla\Mozilla Firefox" },
|
||||||
|
new { Name = "Microsoft Edge", Path = @"SOFTWARE\Microsoft\Edge" },
|
||||||
|
new { Name = "Internet Explorer", Path = @"SOFTWARE\Microsoft\Internet Explorer" }
|
||||||
|
};
|
||||||
|
|
||||||
|
foreach (var browser in browsers)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(browser.Path))
|
||||||
|
{
|
||||||
|
if (key != null)
|
||||||
|
{
|
||||||
|
var version = key.GetValue("Version")?.ToString();
|
||||||
|
if (!string.IsNullOrEmpty(version))
|
||||||
|
{
|
||||||
|
sb.AppendLine($"{browser.Name}: {version}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 尝试其他版本键
|
||||||
|
var pv = key.GetValue("pv")?.ToString();
|
||||||
|
if (!string.IsNullOrEmpty(pv))
|
||||||
|
{
|
||||||
|
sb.AppendLine($"{browser.Name}: {pv}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// 浏览器未安装或无法访问注册表
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GetInstalledSoftware(StringBuilder sb)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 从注册表获取已安装软件
|
||||||
|
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"))
|
||||||
|
{
|
||||||
|
if (key != null)
|
||||||
|
{
|
||||||
|
var softwareList = new List<string>();
|
||||||
|
foreach (string subKeyName in key.GetSubKeyNames())
|
||||||
|
{
|
||||||
|
using (RegistryKey subKey = key.OpenSubKey(subKeyName))
|
||||||
|
{
|
||||||
|
if (subKey != null)
|
||||||
|
{
|
||||||
|
var displayName = subKey.GetValue("DisplayName")?.ToString();
|
||||||
|
var displayVersion = subKey.GetValue("DisplayVersion")?.ToString();
|
||||||
|
var publisher = subKey.GetValue("Publisher")?.ToString();
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(displayName))
|
||||||
|
{
|
||||||
|
var software = displayName;
|
||||||
|
if (!string.IsNullOrEmpty(displayVersion))
|
||||||
|
{
|
||||||
|
software += $" ({displayVersion})";
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrEmpty(publisher))
|
||||||
|
{
|
||||||
|
software += $" - {publisher}";
|
||||||
|
}
|
||||||
|
softwareList.Add(software);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 显示前20个软件
|
||||||
|
foreach (var software in softwareList.Take(20))
|
||||||
|
{
|
||||||
|
sb.AppendLine(software);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (softwareList.Count > 20)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"... 还有 {softwareList.Count - 20} 个软件未显示");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"获取已安装软件失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetSystemBootTime()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 通过系统启动时间计算
|
||||||
|
var uptime = TimeSpan.FromMilliseconds(Environment.TickCount64);
|
||||||
|
var bootTime = DateTime.Now - uptime;
|
||||||
|
return bootTime.ToString("yyyy-MM-dd HH:mm:ss");
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return "无法获取";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetSystemUptime()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var uptime = TimeSpan.FromMilliseconds(Environment.TickCount64);
|
||||||
|
return $"{uptime.Days}天 {uptime.Hours}小时 {uptime.Minutes}分钟 {uptime.Seconds}秒";
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return "无法获取";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string TestNetworkConnection()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (var ping = new Ping())
|
||||||
|
{
|
||||||
|
var reply = ping.Send("www.baidu.com", 3000);
|
||||||
|
return reply.Status == IPStatus.Success ?
|
||||||
|
$"正常 (延迟: {reply.RoundtripTime}ms)" :
|
||||||
|
$"异常 ({reply.Status})";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return "无法检测";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetPublicIPAddress()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 使用简单的HTTP请求获取公网IP
|
||||||
|
var client = new WebClient();
|
||||||
|
client.Headers.Add("User-Agent", "Environment Checker");
|
||||||
|
var ip = client.DownloadString("https://api.ipify.org?format=text");
|
||||||
|
return ip.Trim();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var client = new WebClient();
|
||||||
|
var response = client.DownloadString("http://ipinfo.io/ip");
|
||||||
|
return response.Trim();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ExportReport(string fileName)
|
||||||
|
{
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
sb.AppendLine("系统环境检测报告");
|
||||||
|
sb.AppendLine("═══════════════════════════════════════");
|
||||||
|
sb.AppendLine($"生成时间: {DateTime.Now:yyyy年MM月dd日 HH:mm:ss}");
|
||||||
|
sb.AppendLine($"检测工具: 系统环境检测工具");
|
||||||
|
sb.AppendLine();
|
||||||
|
|
||||||
|
sb.AppendLine(GetSystemInfo());
|
||||||
|
sb.AppendLine();
|
||||||
|
sb.AppendLine(GetHardwareInfo());
|
||||||
|
sb.AppendLine();
|
||||||
|
sb.AppendLine(GetNetworkInfo());
|
||||||
|
sb.AppendLine();
|
||||||
|
sb.AppendLine(GetSoftwareInfo());
|
||||||
|
|
||||||
|
File.WriteAllText(fileName, sb.ToString(), Encoding.UTF8);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user