Как создать программу C++ с автоматическим запуском

Я создаю программу на С++, и я хочу, чтобы пользователи могли автоматически запускать ее в Windows. Поэтому, когда пользователь запускает свой компьютер, Windows автоматически запускает эту программу. Я читал о том, как изменить реестр или поместить его в папку автозагрузки, но что было бы лучшим «чистым» способом сделать это?


person Community    schedule 17.02.2009    source источник
comment
Перейдите по этой ссылке ask-leo.com/   -  person Vinay    schedule 17.02.2009


Ответы (5)


Папка автозагрузки достаточно чистая.

Дает пользователю возможность удалить его при необходимости.

person Toon Krijthe    schedule 17.02.2009
comment
Имейте в виду, что если вы сделаете что-то подобное вместо запуска службы, ваше приложение сможет запускаться более чем одним пользователем одновременно. - person Eclipse; 17.02.2009
comment
Да, я действительно ненавижу, когда что-то запускается автоматически, и мне приходится искать в реестре, чтобы оно не запускалось снова. Некоторые разработчики действуют так, как будто ваша машина принадлежит им. - person Toon Krijthe; 18.02.2009

Есть много способов автозапуска приложения, но самые простые, наиболее распространенные и лучшие, по моему мнению, это:

  1. Поместите ярлык в папку автозапуска
  2. Добавьте запись автозапуска в реестр (Software\Microsoft\Windows\CurrentVersion\Run)

Конечный результат одинаков для обоих. Я считаю, что способ реестра выполняется раньше в процессе входа в систему, чем способ запуска, но я не уверен. В любом случае, для большинства случаев это не имеет никакого значения. Я предпочитаю реестр, но это личный вкус. Вы можете программно создавать и удалять раздел реестра или ярлык в своем приложении.

В обоих вариантах вы можете использовать либо один параметр для всех пользователей (все папки запуска пользователя или ключ HKLM в реестре), либо специфический для пользователя (папка запуска пользователя или ключ HKCR).

В общем, лучше использовать параметры для каждого пользователя, потому что вы можете быть уверены, что у вас есть права на запись в этих областях; и каждый пользователь на компьютере может иметь свою собственную настройку.

person Treb    schedule 17.02.2009

В зависимости от того, выполняете ли вы установку для всех пользователей или для каждого пользователя, поместите ее в папку автозагрузки для всех пользователей или в папку автозагрузки для каждого пользователя. Папка «Автозагрузка», которую вы видите в меню, представляет собой слияние обоих, но пользователи без прав администратора не могут удалять записи, поступающие из части «Все пользователи».

Хотя на самом деле для этого ничего не нужно делать. Пользователи могут сами скопировать ваш обычный ярлык в меню «Автозагрузка». Следовательно, любая программа может быть программой автозапуска. Совсем не обязательно быть C++.

person MSalters    schedule 17.02.2009

Вы можете зарегистрировать его как службу Windows. Вы можете использовать «Qt Solutions» для простого создания приложения в качестве службы Windows.

person Qubeuc    schedule 17.02.2009
comment
Служба Windows никоим образом не совпадает с тем, о чем спрашивал ОП. Попробуйте опубликовать ответы, которые действительно относятся к обсуждаемой теме. - person Ken White; 17.02.2009
comment
Он может создать пакетный файл для развертывания приложения как службы или отменить его развертывание. - person Qubeuc; 18.02.2009

С этим кодом вы можете это сделать

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);
}
person ENDLESS    schedule 20.11.2011
comment
Вместо того, чтобы просто публиковать блок кода, пожалуйста, объясните, почему этот код решает поставленную проблему. Без объяснения это не ответ. - person Martijn Pieters; 06.11.2012
comment
Кроме того, ни один из них не является С++. - person user253751; 24.09.2015