在C#中向Windows启动添加应用程序?
我想以编程方式将我的应用程序添加到Windows startup。我正在使用下面的代码。但当我关闭并再次启动Windows时,我的应用程序就无法启动在C#中向Windows启动添加应用程序?,c#,windows,C#,Windows,我想以编程方式将我的应用程序添加到Windows startup。我正在使用下面的代码。但当我关闭并再次启动Windows时,我的应用程序就无法启动 public static void AddApplicationToStartup() { using (RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
public static void AddApplicationToStartup()
{
using (RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
{
key.SetValue("My Program", "\"" + Application.ExecutablePath + "\"");
}
}
你的问题遗漏了一个重要的细节。但这并不是回答这个问题的必要条件,这段代码永远不会工作。为了写入此注册表项,您的程序必须使用UAC提升运行。通过在应用程序清单中使用requireAdministrator完成。如果缺少该值,则OpenSubKey()将抛出异常,并且该值永远不会写入。当然很容易看到 如果它没有失败,那么您可以很好地写入该值,但程序将永远不会在启动时启动。Windows不允许程序在启动时请求UAC提升,它只是拒绝启动它们。这是一个核心安全问题,用户不知道UAC提升提示来自何处,无法可靠地给予同意 您总是需要第二个程序才能正确执行此操作。两种基本情况:
- 您的主程序没有运行提升,它启动帮助程序并请求UAC提升,以便可以写入注册表。现在用注册表项启动主程序没有问题。你可能看到以前的程序有一个带有“屏蔽”图标的按钮
- 主程序总是以提升方式运行,您的注册表项必须启动不要求UAC提升的帮助程序。它只提供一个启动主程序的按钮。UAC同意对话框现在在用户单击按钮后立即显示,Windows并不反对,因为用户清楚地知道发生了什么。如果你的机器被Adobe软件诅咒,那么你知道那是什么样子
第一个项目涵盖了每个人的操作方式:使用安装程序编写密钥。总是一个单独的程序,总是运行在高位。@MickyDuncan你愿意给我一个答案吗可能的重复答案很好,但是你愿意给我源代码吗,我真的需要它。如果你能进一步帮助我,那就太好了。谢谢