13

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

4

5 回答 5

15

启动文件夹足够干净。

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

于 2009-02-17T15:51:54.050 回答
9

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

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

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

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

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

于 2009-02-17T16:04:30.137 回答
3

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

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

于 2009-02-17T15:57:18.000 回答
1

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

于 2009-02-17T20:06:18.557 回答
-1

使用此代码,您可以做到

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);
}
于 2011-11-20T06:25:21.840 回答