C# winform程序开机自启的方法
方法1:修改注册表(好处在于即使程序需要管理员权限也能正常开启,并显示页面)
using Microsoft.Win32; //添加引用->COM,搜索Windows Script Host Object Model
try
{
if (checkBox1.Checked)
{
RegistryKey r_local = Registry.LocalMachine;//registrykey r_local = registry.currentuser;
RegistryKey r_run = r_local.CreateSubKey(@"software\microsoft\windows\currentversion\run");
r_run.SetValue("应用名称", Application.ExecutablePath);
r_run.Close();
r_local.Close();
}
else
{
RegistryKey r_local = Registry.LocalMachine;//registrykey r_local = registry.currentuser;
RegistryKey r_run = r_local.CreateSubKey(@"software\microsoft\windows\currentversion\run");
r_run.DeleteValue("应用名称", false);
r_run.Close();
r_local.Close();
}
}
catch (Exception)
{
MessageBox.Show("您需要管理员权限修改", "提示");
}
//检查是否开机自启
RegistryKey r_local = Registry.LocalMachine;//registrykey r_local = registry.currentuser;
RegistryKey r_run = r_local.OpenSubKey(@"software\microsoft\windows\currentversion\run", false);
if (r_run.GetValue("ServiceManageCenter") != null)
{
checkBox1.Checked = true;
}
r_run.Close();
r_local.Close();
方法2:将程序的启动文件制作一份快捷方式放进windows启动目录下
(好处是简单,不用改注册表,安全;坏处是winform界面无法显示出来,不知道是不是因为需要管理员权限的原因)
using IWshRuntimeLibrary;
if (checkBox1.Checked)
{
string StartupPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonStartup);
//获得文件的当前路径
string dir = Directory.GetCurrentDirectory();
//获取可执行文件的全部路径
string exeDir = dir + @"\ServiceManageCenter.exe";
WshShell wshShell = new WshShell();
string path = System.IO.Path.Combine(StartupPath, "ServiceManageCenter.lnk");
IWshShortcut shortcut = (IWshShortcut)wshShell.CreateShortcut(path);
shortcut.TargetPath = exeDir;
shortcut.WorkingDirectory = dir;
shortcut.WindowStyle = 1;//设置运行方式,默认为常规窗口
shortcut.Save();
}
else
{
string StartupPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonStartup);
System.IO.File.Delete(StartupPath + @"\ServiceManageCenter.lnk");
}
//检查是否开机自启
string StartupPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonStartup) + @"\ServiceManageCenter.lnk";
if(System.IO.File.Exists(StartupPath))
{
checkBox1.Checked = true;
}