私は C++ でプログラムを作成していますが、ユーザーが Windows で自動起動できるようにしたいと考えています。したがって、ユーザーがコンピューターを起動すると、Windows はこのプログラムを自動的に起動します。レジストリの変更またはスタートアップ フォルダへの配置に関する情報を読みましたが、これを行うための最善の「クリーンな」方法は何でしょうか?
5 に答える
スタートアップフォルダは十分にクリーンです。
必要に応じてユーザーが削除できるようにします。
アプリケーションを自動起動する方法はたくさんありますが、最も簡単で、最も一般的で、IMO で最良の方法は次のとおりです。
- 自動起動フォルダにショートカットを置く
- 自動起動エントリをレジストリに追加します (Software\Microsoft\Windows\CurrentVersion\Run)
最終結果はどちらも同じです。レジストリの方法は、スタートアップの方法よりもログオン プロセスの早い段階で実行されると思いますが、確かではありません。とにかく、ほとんどの場合、違いはありません。私はレジストリを好みますが、それは個人的な好みです。アプリでプログラムを使用して、レジストリ キーまたはショートカットを作成および削除できます。
両方のオプションで、すべてのユーザーに対して 1 つの設定 (すべてのユーザーのスタートアップ フォルダー、またはレジストリの HKLM キーの下) またはユーザー固有 (ユーザーのスタートアップ フォルダーまたは HKCR キーの下) のいずれかを使用できます。
一般に、ユーザーごとのオプションを使用することをお勧めします。これらの領域で確実に書き込み権限を持っている可能性があるためです。また、コンピューター上のすべてのユーザーは、独自の設定を持つことができます。
すべてのユーザーまたはユーザーごとのインストールを実行しているかどうかに応じて、すべてのユーザーのスタートアップ フォルダーまたはユーザーごとのスタートアップ フォルダーに配置します。メニューに表示されるスタートアップ フォルダーは両方の合併ですが、管理者以外のユーザーは、すべてのユーザーの部分からのエントリを削除できません。
ただし、実際には何もする必要はありません。ユーザーは、通常のショートカットをスタートアップ メニュー自体にコピーできます。したがって、どのプログラムも自動起動プログラムになる可能性があります。C++ である必要はまったくありません。
Windowsサービスとして登録できます。「Qt Solutions」を使えば、簡単にアプリケーションをWindowsサービスとして作ることができます。
このコードを使用すると、それを行うことができます
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);
}