Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中向Windows启动添加应用程序?_C#_Windows - Fatal编程技术网

在C#中向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))

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

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你愿意给我一个答案吗可能的重复答案很好,但是你愿意给我源代码吗,我真的需要它。如果你能进一步帮助我,那就太好了。谢谢