【问题标题】:Add application to Windows startup in C#?在 C# 中将应用程序添加到 Windows 启动?
【发布时间】:2015-04-12 20:27:39
【问题描述】:

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

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

【问题讨论】:

标签: c# windows


【解决方案1】:

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

如果它没有失败,那么您将写入该值就好了,但程序永远不会在启动时启动。 Windows 不允许程序在启动时请求 UAC 提升,它只是拒绝启动它们。这是一个核心安全问题,用户不知道 UAC 提升提示来自何处,也无法可靠地给予同意。

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

  • 您的主程序没有运行提升,它启动帮助程序并要求 UAC 提升,以便它可以写入注册表。现在使用注册表项启动主程序没问题。您可能在之前看到的程序有一个带有“盾牌”图标的按钮。
  • 您的主程序始终运行提升,您的注册表项必须启动一个不要求 UAC 提升的帮助程序。它几乎没有,但提供了一个按钮来启动主程序。 UAC 同意对话框现在在用户单击按钮后立即显示,Windows 不反对,因为用户清楚地知道发生了什么。如果您的机器被 Adob​​e 软件所诅咒,那么您就会知道它是什么样子的。

第一个项目符号涵盖了每个人这样做的方式:使用安装程序编写密钥。始终是一个单独的程序,始终运行提升。

【讨论】:

  • 你的回答很好,但你愿意给我源代码吗,我真的很需要它。如果您能进一步帮助我,那就太好了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多