在C#中向Windows启动添加应用程序?

时间:2015-04-12 10:06:21

标签: c# windows

我想以编程方式将我的应用程序添加到Windows启动。我使用以下代码。但当我关闭并再次启动Windows时,我的应用程序无法启动。

public static void AddApplicationToStartup()
   {
     using (RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
      {
        key.SetValue("My Program", "\"" + Application.ExecutablePath + "\"");
      }
   }

1 个答案:

答案 0 :(得分:2)

您在问题中省略了重要细节。但回答这个问题并不是必不可少的,这段代码可以从不工作。要编写此注册表项,您的程序必须以UAC提升运行。在应用程序清单中使用 requireAdministrator 完成。如果它丢失,那么OpenSubKey()将抛出异常并且永远不会写入该值。当然很容易看到。

如果它没有失败,那么你就可以很好地写出这个值,但程序永远不会在启动时启动。 Windows不允许程序在启动时要求UAC提升,它只是拒绝启动它们。这是一个核心安全问题,用户不知道UAC提升提示来自哪里,无法可靠地给予同意。

始终需要第二个程序才能正确执行此操作。两个基本场景:

  • 您的主程序没有运行升级,它启动帮助程序并要求UAC提升,以便它可以编写注册表。现在使用注册表项启动主程序没问题。你之前可能已经看过程序中有一个带有" shield"的按钮。图标。
  • 您的主程序始终运行升级,您的注册表项必须启动一个不要求UAC提升的帮助程序。哪个做的很少,但提供了启动主程序的按钮。 UAC同意对话框现在在用户单击按钮后立即显示,Windows不反对,因为用户清楚地知道发生了什么。如果您的机器被Adobe软件诅咒,那么您就知道它是什么样的。

第一个子弹涵盖了每个人这样做的方式:用安装程序写密钥。始终是一个单独的程序,总是提升。