With a little modification, I made it to be easily called by any project. What you need to do is just pass in the 'Key Name' and 'Assembly Location' parameters.
Here is the complete class:
Sample Usage:using Microsoft.Win32;
/// <summary>
/// Utility.
/// </summary>
public class Util
{
private const string RUN_LOCATION = @"Software\Microsoft\Windows\CurrentVersion\Run";
/// <summary>
/// Sets the autostart value for the assembly.
/// </summary>
/// <param name="keyName">Registry Key Name</param>
/// <param name="assemblyLocation">Assembly location (e.g. Assembly.GetExecutingAssembly().Location)</param>
public static void SetAutoStart(string keyName, string assemblyLocation)
{
RegistryKey key = Registry.CurrentUser.CreateSubKey(RUN_LOCATION);
key.SetValue(keyName, assemblyLocation);
}
/// <summary>
/// Returns whether auto start is enabled.
/// </summary>
/// <param name="keyName">Registry Key Name</param>
/// <param name="assemblyLocation">Assembly location (e.g. Assembly.GetExecutingAssembly().Location)</param>
public static bool IsAutoStartEnabled(string keyName, string assemblyLocation)
{
RegistryKey key = Registry.CurrentUser.OpenSubKey(RUN_LOCATION);
if (key == null)
return false;
string value = (string)key.GetValue(keyName);
if (value == null)
return false;
return (value == assemblyLocation);
}
/// <summary>
/// Unsets the autostart value for the assembly.
/// </summary>
/// <param name="keyName">Registry Key Name</param>
public static void UnSetAutoStart(string keyName)
{
RegistryKey key = Registry.CurrentUser.CreateSubKey(RUN_LOCATION);
key.DeleteValue(keyName);
}
}
string keyName = "MyProgramName";
string assemblyLocation = Assembly.GetExecutingAssembly().Location; // Or the EXE path.
// Set Auto-start.
Util.SetAutoStart(keyName, assemblyLocation);
// Unset Auto-start.
if (Util.IsAutoStartEnabled(keyName, assemblyLocation))
Util.UnSetAutoStart(keyName);
If you find this post helpful, would you buy me a coffee?
How can we call *sample usage* code from installation package? I mean first the .msi package must change the registry key so .exe file can start automatically?
ReplyDeleteI miss the UnSet() Methode ;)
ReplyDeletehi,
ReplyDeleteit seems that IsAutoStartEnabled method is not complete. Why don't you correct all the misses and post normal version?
Nice code, it seems very usefull.
ReplyDeleteput function "Sample Usage:" here?
ReplyDeleteRegistryKey ... use Dispose and close for the key variable
ReplyDeleteCan this be used on two buttons?
ReplyDeletesure
Deleteif the programm was started manually - function IsAutoStartEnabled() works correctly, but if program was "autostarted" it gives me always FALSE, how can i fix this or what can be a reason
ReplyDeleteprogramm seems to be started with the same user
Thanks, was really helpful!
ReplyDelete