【问题标题】:How to create an auto startup c++ program如何创建一个自动启动的 C++ 程序
【发布时间】:2010-10-08 03:11:24
【问题描述】:

我正在用 C++ 创建一个程序,我希望能够让用户选择让它在 Windows 中自动启动。所以当用户启动他的电脑时,windows 会自动启动这个程序。我已阅读有关修改注册表或将其放入启动文件夹的内容,但是最好的“干净”方法是什么?

【问题讨论】:

标签: c++ windows autostart


【解决方案1】:

启动文件夹足够干净。

让用户可以在需要时将其删除。

【讨论】:

  • 请注意,如果您执行此类操作,而不是运行服务,您的应用最好能够同时由多个用户运行。
  • 是的,当某些东西自动启动时我真的很讨厌它,我必须搜索注册表以防止它再次运行。有些开发者表现得好像他们拥有你的机器一样。
【解决方案2】:

有很多方法可以自动启动应用程序,但最简单、最常见和 IMO 最好的方法是:

  1. 在自动启动文件夹中放置一个快捷方式
  2. 向注册表添加自动启动条目 (Software\Microsoft\Windows\CurrentVersion\Run)

两者的最终结果是相同的。我相信注册方式在登录过程中比启动方式更早执行,但我不确定。无论如何,它对大多数情况没有任何影响。我更喜欢注册表,但这是个人喜好。您可以在应用程序中以编程方式创建和删除注册表项或快捷方式。

通过这两个选项,您可以为所有用户(所有用户启动文件夹,或注册表中的 HKLM 键)或特定用户(用户启动文件夹或 HKCR 键)使用一种设置。

一般来说,最好使用每个用户选项,因为您可以确定在这些区域拥有写入权限;并且计算机上的每个用户都可以有自己的设置。

【讨论】:

    【解决方案3】:

    根据您是执行全用户还是每用户安装,请将其放在所有用户的启动文件夹或每用户启动文件夹中。您在菜单中看到的 Startup 文件夹是两者的合并,但非管理员用户无法删除来自 All-user 部分的条目。

    不过,您实际上不必为此做任何事情。用户可以自己将您的正常快捷方式复制到“启动”菜单。因此,any 程序可以是自动启动程序。根本不需要是 C++。

    【讨论】:

      【解决方案4】:

      您可以将其注册为windows服务。您可以使用“Qt Solutions”轻松将应用程序制作为windows服务。

      【讨论】:

      • Windows 服务与 OP 所要求的完全不同。尝试发布实际适用于当前主题的答案。
      • 他可以制作一个批处理文件来将应用程序部署为服务或取消部署。
      【解决方案5】:

      使用此代码您可以做到

      procedure TForm1.Button1Click(Sender: TObject);
      var
         Reg:TRegistry;
      begin
         Reg := TRegistry.Create;
         try
            Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',True);
            Reg.WriteString('Program name',ParamStr(0));
         finally
           Reg.Free;
         end;
      
      end;
      

      或者这个:

      using Microsoft.Win32;
      private void AddStartUpKey(string _name, string  _path) {
           RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Micros  oft\Windows\CurrentVersion\Run", true);
           key.SetValue(_name, _path);
      }
      private void RemoveStartUpKey(string _name) {
           RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Micros  oft\Windows\CurrentVersion\Run", true);
           key.DeleteValue(_name, false);
      }
      

      【讨论】:

      • 不要只发布一段代码,请解释为什么这段代码可以解决所提出的问题。没有解释,这不是答案。
      • 另外,这些都不是 C++。
      猜你喜欢
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 2016-10-11
      • 2011-08-02
      相关资源
      最近更新 更多