Laden...

Programm in Autostart schreiben

Erstellt von UZI vor 12 Jahren Letzter Beitrag vor 12 Jahren 8.369 Views
U
UZI Themenstarter:in
189 Beiträge seit 2011
vor 12 Jahren
Programm in Autostart schreiben

Beschreibung:
Diese Methode schreibt die angegebene Datei in den Autostart des aktuellen Nutzers, sodass diese beim Anmelden des Nutzers ausgeführt wird.


private bool SchreibeinAutostart(string dateipfad)
        {
            try
            {
                string user = Environment.UserDomainName + "\\" + Environment.UserName;
                System.Security.AccessControl.RegistrySecurity rs = new System.Security.AccessControl.RegistrySecurity();
                rs.AddAccessRule(new System.Security.AccessControl.RegistryAccessRule(user,
            System.Security.AccessControl.RegistryRights.WriteKey | System.Security.AccessControl.RegistryRights.ChangePermissions,
             System.Security.AccessControl.InheritanceFlags.None,
             System.Security.AccessControl.PropagationFlags.None,
             System.Security.AccessControl.AccessControlType.Allow));
                RegistryKey key = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run\\");
                key.SetValue(dateipfad.Remove(0,dateipfad.LastIndexOf(@"\")+1), dateipfad);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

Schlagwörter: Autostart automatisch starten bei windows autorun von selbst

16.807 Beiträge seit 2008
vor 12 Jahren

Inhaltlich genau das gleiche, jedoch hab ich mir mal die Mühe gemacht, und es etwas leserlicher gestaltet:

private Boolean SchreibeinAutostart( String dateipfad )
{
    try
    {
        String samAccountName;
        {
            var currentWindowsIdentity = WindowsIdentity.GetCurrent( );
            if ( currentWindowsIdentity == null )
            {
                return false;
            }

            samAccountName = currentWindowsIdentity.Name;
        }

        var registrySecurity = new RegistrySecurity( );
        {
            registrySecurity.AddAccessRule( new RegistryAccessRule( samAccountName,
                    RegistryRights.WriteKey | RegistryRights.ChangePermissions, InheritanceFlags.None, PropagationFlags.None, AccessControlType.Allow ) );
        }

        var targetRegistryKey = Registry.CurrentUser.CreateSubKey( "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\" );

        if ( targetRegistryKey == null )
        {
            return false;
        }

        targetRegistryKey.SetValue( dateipfad.Remove( 0, dateipfad.LastIndexOf( @"\" ) + 1 ), dateipfad );

    }
    catch ( Exception )
    {
        return false;
    }

    return true;
}

Ich würde aber empfehlen, lieber mit der void Rückgabe und entsprechenden Exceptions zu arbeiten.