我用C#写了一个软件,怎样保证开机启动,不被其他360等清理软件影响,怎样实现输入密码才可以卸载,防止一般操作人员误操作卸载。
目前主要适配的操作系统是win7 win10/11
尝试过计划任务,注册表等开机启动方法,都是有可能被清理软件清理掉,或者被一般操作人员误删掉。
怎样保证开机启动,不被其他360等清理软件影响,怎样实现输入密码才可以卸载,防止一般操作人员误操作卸载。如果可能,愿意付费解决
我用C#写了一个软件,怎样保证开机启动,不被其他360等清理软件影响,怎样实现输入密码才可以卸载,防止一般操作人员误操作卸载。
目前主要适配的操作系统是win7 win10/11
尝试过计划任务,注册表等开机启动方法,都是有可能被清理软件清理掉,或者被一般操作人员误删掉。
怎样保证开机启动,不被其他360等清理软件影响,怎样实现输入密码才可以卸载,防止一般操作人员误操作卸载。如果可能,愿意付费解决
阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
你想实现的是在 Windows 操作系统中,使用 C# 开发的软件在开机启动,并且保护软件不被其他清理软件影响,同时也实现输入密码才能卸载软件。
以下是一些建议:
System.Diagnostics 命名空间中的 TaskScheduler 类来创建计划任务。using System.Diagnostics;
// 创建计划任务
TaskScheduler scheduler = new TaskScheduler();
scheduler.CreateTask("MyTask", "C:\\Path\\To\\Your\\Executable.exe", "C:\\Path\\To\\Your\\Arguments");
scheduler.SetTrigger(TriggerType.OnStartup);
scheduler.SetPriority(Priority.Highest);
scheduler.Save();
using Microsoft.Win32;
// 读取注册表中的配置信息
RegistryKey key = Registry.CurrentUser.OpenSubKey("Software\\YourCompany\\YourSoftware", true);
string password = key.GetValue("Password").ToString();
// 在卸载时检查输入密码是否正确
if (password != inputPassword)
{
// 输入密码错误,不能卸载
return;
}
using System.Security.Cryptography;
// 生成加密密钥
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] key = new byte[16];
rng.GetBytes(key);
// 加密输入密码
string inputPassword = "your_password";
byte[] encryptedPassword = Encrypt(inputPassword, key);
// 在卸载时检查输入密码是否正确
if (!Verify(inputPassword, encryptedPassword, key))
{
// 输入密码错误,不能卸载
return;
}
// 加密和验证函数
byte[] Encrypt(string password, byte[] key)
{
using (Aes aes = Aes.Create())
{
aes.Key = key;
aes.IV = new byte[16];
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write))
{
byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
cs.Write(passwordBytes, 0, passwordBytes.Length);
}
return ms.ToArray();
}
}
}
bool Verify(string password, byte[] encryptedPassword, byte[] key)
{
using (Aes aes = Aes.Create())
{
aes.Key = key;
aes.IV = new byte[16];
using (MemoryStream ms = new MemoryStream(encryptedPassword))
{
using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read))
{
byte[] passwordBytes = new byte[encryptedPassword.Length];
cs.Read(passwordBytes, 0, passwordBytes.Length);
return Encoding.UTF8.GetString(passwordBytes) == password;
}
}
}
}
这些只是基本的实现思路和代码示例,你需要根据自己的需求和实际情况进行修改和完善。