添加自启动工具

This commit is contained in:
zsyg
2025-07-02 18:00:22 +08:00
committed by GitHub
parent 6dd8819f22
commit 4ef8099054
3 changed files with 536 additions and 0 deletions

View File

@@ -0,0 +1,86 @@
using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Security.Principal;
namespace AppStore
{
public class SelfStartingManagerToolCard : ToolCard
{
public SelfStartingManagerToolCard()
{
this.ToolName = "自启动管理";
try
{
string iconPath = Path.Combine(Application.StartupPath, "img", "resource", "png", "Self_starting_management.png");
if (File.Exists(iconPath))
{
this.ToolIcon = Image.FromFile(iconPath);
}
this.UpdateDisplay();
}
catch (Exception ex)
{
Logger.LogError("加载自启动管理图标失败", ex);
}
// 订阅点击事件
this.ToolCardClicked += OnSelfStartingManagerClicked;
}
private void OnSelfStartingManagerClicked(object sender, EventArgs e)
{
if (!IsRunningAsAdmin())
{
var result = MessageBox.Show("自启动管理需要管理员权限,是否立即以管理员身份重新运行?",
"权限提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (result == DialogResult.Yes)
{
RestartAsAdmin();
}
return;
}
try
{
var form = new SelfStartingManagerForm();
form.ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show($"启动自启动管理器失败: {ex.Message}", "错误",
MessageBoxButtons.OK, MessageBoxIcon.Error);
Logger.LogError("启动自启动管理器失败", ex);
}
}
private bool IsRunningAsAdmin()
{
var identity = WindowsIdentity.GetCurrent();
var principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
private void RestartAsAdmin()
{
try
{
var startInfo = new ProcessStartInfo
{
FileName = Application.ExecutablePath,
UseShellExecute = true,
Verb = "runas"
};
Process.Start(startInfo);
Application.Exit();
}
catch (Exception ex)
{
MessageBox.Show($"无法以管理员身份重新运行: {ex.Message}", "错误",
MessageBoxButtons.OK, MessageBoxIcon.Error);
Logger.LogError("以管理员身份重新运行失败", ex);
}
}
}
}