我想以编程方式将我的应用程序添加到Windows启动。我使用以下代码。但当我关闭并再次启动Windows时,我的应用程序无法启动。
public static void AddApplicationToStartup()
{
using (RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
{
key.SetValue("My Program", "\"" + Application.ExecutablePath + "\"");
}
}
答案 0 :(得分:2)
您在问题中省略了重要细节。但回答这个问题并不是必不可少的,这段代码可以从不工作。要编写此注册表项,您的程序必须以UAC提升运行。在应用程序清单中使用 requireAdministrator 完成。如果它丢失,那么OpenSubKey()将抛出异常并且永远不会写入该值。当然很容易看到。
如果它没有失败,那么你就可以很好地写出这个值,但程序永远不会在启动时启动。 Windows不允许程序在启动时要求UAC提升,它只是拒绝启动它们。这是一个核心安全问题,用户不知道UAC提升提示来自哪里,无法可靠地给予同意。
您始终需要第二个程序才能正确执行此操作。两个基本场景:
第一个子弹涵盖了每个人这样做的方式:用安装程序写密钥。始终是一个单独的程序,总是提升。