Laden...

AutoStart Installer ( update )

Erstellt von Jabi vor 16 Jahren Letzter Beitrag vor 15 Jahren 6.976 Views
J
Jabi Themenstarter:in
222 Beiträge seit 2006
vor 16 Jahren
AutoStart Installer ( update )

Beschreibung:

Autostart für Ihre Application in die Registry eintragen.
Bei Uninstall wird das ganze wieder gelöscht.
Einfach die Installer Komponente in das " exe Projekt geben das gestartet werden soll.
Ist vielleicht noch nicht ganz Perfekt aber für Kritik bin ich immer offen.
Viel Spass damit !

AutoStartInstaller.cs
edit : using verweise


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using Microsoft.Win32;


[RunInstaller(true)]
    public partial class AutostartInstaller : Installer
    {
        public AutostartInstaller()
        {
            InitializeComponent();
        }

        public override void Install(System.Collections.IDictionary stateSaver)
        {
            base.Install(stateSaver);
            
            if (!IsAutostart())
            {
                Reg();
            }
            else
            {
                UnReg();
                Reg();
            }

        }
        public override void Rollback(System.Collections.IDictionary savedState)
        {
            base.Rollback(savedState);
            if (!IsAutostart())
            {
                Reg();
            }
            else
            {
                UnReg();
                Reg();
            }
        }
        public override void Uninstall(System.Collections.IDictionary savedState)
        {
            base.Uninstall(savedState);
            if (IsAutostart())
            {
                UnReg();
            }
        }
        
        protected override void OnAfterInstall(System.Collections.IDictionary savedState)
        {
            base.OnAfterInstall(savedState);
        }
        protected override void OnBeforeUninstall(System.Collections.IDictionary savedState)
        {
            base.OnBeforeUninstall(savedState);
        }
        
        private static bool IsAutostart()
        {
            bool exists = false;
            RegistryKey regKey;
            regKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", true);
            if (regKey.GetValue(/*Hier einen string als schlüsseleintragen zb "MyApp" */ != null)
            {
                exists = true;
            }
            else
            {
                exists = false;
            }
            return exists;
        }
        private void UnReg()
        {
            RegistryKey regKey;
            regKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
            if (regKey == null) regKey = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
            regKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", true);
            regKey.DeleteValue((/*Hier einen string als schlüsseleintragen zb "MyApp" */, false);
            regKey.Close();
        }
        private void Reg()
        {
            RegistryKey regKey;
            regKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
            if (regKey == null) regKey = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
            regKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", true);
            regKey.SetValue((/*Hier einen string als schlüsseleintragen zb "MyApp" */ , Parent.Context.Parameters["assemblypath"].ToString());
            regKey.Close();
        }
    }

AutostartInstaller.Designer.cs


partial class AutostartInstaller
    {
        /// <summary>
        /// Erforderliche Designervariable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary> 
        /// Verwendete Ressourcen bereinigen.
        /// </summary>
        /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Vom Komponenten-Designer generierter Code

        /// <summary>
        /// Erforderliche Methode für die Designerunterstützung.
        /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
        /// </summary>
        private void InitializeComponent()
        {
            components = new System.ComponentModel.Container();
        }

        #endregion
    }

Schlagwörter: Autostart, Installer mit Autostart, Installer, Setup

1.820 Beiträge seit 2005
vor 16 Jahren

Hallo!

Ist mir größtenteils (nach MSDN-Lektüre 😄) soweit klar, bis auf Rollback: Dort wird meinem Verständnis nach die Anwendung wie bei Install (neu) registriert, aber laut MSDN sollte damit der Ursprungszustand wieder hergestellt werden, oder hab' ich da was falsch verstanden ?(.

Nobody is perfect. I'm sad, i'm not nobody 🙁

J
Jabi Themenstarter:in
222 Beiträge seit 2006
vor 16 Jahren

ja schon aber wenn wer das ding versehentlich aus der registry gelöscht hat dann ist bei " reparieren" auch nochmal die abfrage da ob autostart schon existiert ansonsten wirds nochmal eingetragen ... ich habe in meinem programm auch die möglichkeit autostart zu deaktivieren deswegen hab ichs so gelich in das snippet eingetragen

1.820 Beiträge seit 2005
vor 16 Jahren

Hallo!

OK, dann hab' ich es verstanden. Thx =)

Nobody is perfect. I'm sad, i'm not nobody 🙁

M
1 Beiträge seit 2009
vor 15 Jahren

Erstmal, auch wenn es schon eine Weile her ist, vielen Dank für dieses ausgezeichnete Script. Das ist genau das was ich gesucht habe.

Bei der rollback Methode bin ich mir jedoch nicht ganz sicher ob sie so korrekt ist. Rollack wird ja aufgerufen wenn die Installation fehlschlägt, also nach meinem Verständnis sollte der Registry Eintrag, falls er bereits vorhanden ist, entfernt werden.
Mein Vorschlag:


        public override void Rollback(System.Collections.IDictionary savedState)
        {
            base.Rollback(savedState);
            if (IsAutostart())
            {
                UnReg();
            }
        }

Oder sehe ich das falsch?

Achja, nochwas ist mir aufgefallen: bei den Kommentarzeilen...

/*Hier einen string als schlüsseleintragen zb "MyApp" */

... scheint jeweils ein Fehler mit der Klammerung reingerutscht zu sein.

MFG.Mario

Polymorph Webdesign | CMS | SEO