Laden...

Probleme beim Installer: Autostart der Anwendung beim Hochfahren von Windows

Erstellt von Pezor vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.985 Views
P
Pezor Themenstarter:in
25 Beiträge seit 2008
vor 14 Jahren
Probleme beim Installer: Autostart der Anwendung beim Hochfahren von Windows

Meine 1. größere C# Anwendung ist nun endlich fertig und ich hätte nun gerne daß sie automatisch gestartet wird, sobald Windows hochfährt.

Da ich Visual Studio 2008 besitze hab ich mir eine Installer-Klasse im Projekt erzeugt, die ich laut dieser Anleitung: AutoStart Installer erstellt habe.

Danach erstelle ich das Projekt über: Erstellen-> Projekt veröffentlichen.
Leider funktioniert das nicht. Nachdem ich das veröffentlichte Projekt installiert habe und neu gestartet habe, lädt es sich nicht automatisch beim Hochfahren.

Mache ich da generell was falsch? Ich google schon seit einigen Tagen nach einnem vernünftigen Tutorial, leider ohne großen Erfolg.

Bin für jede Hilfe dankbar.
Mfg
Pezo

J
1.114 Beiträge seit 2007
vor 14 Jahren

Die Installer Klasse ist gedacht, um bei einer regulären MSI Installation deines Programms ausgeführt zu werden (der Install Teil beim Installieren, der Uninstall Teil beim Deinstallieren). Beim normalen Start der Anwendung wird der Coder aber nicht ausgeführt.

B
142 Beiträge seit 2007
vor 14 Jahren

Schiebe eine Verknüpfung zur Anwendung in den Autostartordner im Startmenü, so habe ich es gelöst!

M
194 Beiträge seit 2008
vor 14 Jahren

Hallo Björn,

Was nutzt du für eine Entwicklungsumgebung? In Visual Studio Pro 2005 kannst du ein Bereitstellungsprojekt erzeugen, welches eine Setup-Datei erstellt. Bei der Konfiguration dieses Projekts kannst du auch Registry-Schlüssel anlegen oder eine Verknüpfung im Startmenü erzeugen.

Wenn du das Einfügen in den Autostart evtl. innerhalb des Programms konfigurierbar machen möchtest, dann kann ich dir folgenden Code empfehlen:

using System.Win32;
public class CMain
{
    //Registry-Pfad für den Autostart
    private const string AUTOSTART_REGISTRY_KEY = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run";
    //Name des Registry-Eintrags
    private const string AUTOSTART_REGISTRY_VALUE_NAME = "Anwendungsname";
   
    private void RegisterForAutostart(bool bRegister)
    {
        //Autostart-Schlüssel des aktuellen Users, wenn Autostart für alle User gewünscht,
        //dann CurrentMachine benutzen
        RegistryKey autostartRunKey = Registry.CurrentUser.OpenSubKey(AUTOSTART_REGISTRY_KEY, true);
        if (autostartRunKey != null)
        {
            if (bRegister)
            {
                //Wert anlegen, wenn schon vorhanden wird dieser überschrieben
                autostartRunKey.SetValue
                (
                     AUTOSTART_REGISTRY_VALUE_NAME,
                     Application.ExecutablePath, RegistryValueKind.String
                );
            }
            else
            {
                //Wert löschen, wenn nicht vorhanden, dann wird keine Exception ausgelöst
                autostartRunKey.DeleteValue(AUTOSTART_REGISTRY_VALUE_NAME, false);
            }
        }
    }

Beste Grüße
Stefan

"Indem Sie über dieses ernste Thema lachen disqualifizieren Sie sich selbst."
mrleeh.de

P
Pezor Themenstarter:in
25 Beiträge seit 2008
vor 14 Jahren

danke für die hilfe. als entwicklungsumgebung verwende ich visual studio 2008. ich werde heute abend versuchen den code in die installer klasse zu packen und melde mich dann nochmal 😁

mfg
Pezo

B
142 Beiträge seit 2007
vor 14 Jahren

Hallo Björn,

Was nutzt du für eine Entwicklungsumgebung? In Visual Studio Pro 2005 kannst du ein Bereitstellungsprojekt erzeugen, welches eine Setup-Datei erstellt. Bei der Konfiguration dieses Projekts kannst du auch Registry-Schlüssel anlegen oder eine Verknüpfung im Startmenü erzeugen.

Beste Grüße
Stefan

Darauf bezog ich mich ja, da ich aus dem ersten Beitrag herausgelesen habe, dass er bereits ein Setup erstellt hat.

MfG

M
194 Beiträge seit 2008
vor 14 Jahren

Darauf bezog ich mich ja, da ich aus dem ersten Beitrag herausgelesen habe, dass er bereits ein Setup erstellt hat.

Oh, tut mir leid Björn, ich habe die Namen vertauscht...Eigentlich wollte ich Pezor anschreiben. Dickes Sorry

Grüße

"Indem Sie über dieses ernste Thema lachen disqualifizieren Sie sich selbst."
mrleeh.de

P
Pezor Themenstarter:in
25 Beiträge seit 2008
vor 14 Jahren

So das mit Autostart innerhalb des Programmes funktioniert einwandfrei. Allerdings wäre es mir viel lieber ich könnte das schon im Installer erledigen.
Ich hab mir deshalb eine Installerklasser erstellt, die ich mit folgendem Code gefüllt habe:


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

using System.Windows.Forms;

namespace MyAP
{
    [RunInstaller(true)]
    public partial class AutoStartInstaller : Installer
    {
        private const string AUTOSTART_REGISTRY_KEY = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run";
        //Name des Registry-Eintrags
        private const string AUTOSTART_REGISTRY_VALUE_NAME = "MyAP";
        public AutoStartInstaller()
        {
            InitializeComponent();
        }
        public override void Install(System.Collections.IDictionary stateSaver)
        {
            MessageBox.Show("ES geht");
            RegistryKey autostartRunKey = Registry.CurrentUser.OpenSubKey(AUTOSTART_REGISTRY_KEY, true);
            autostartRunKey.SetValue(AUTOSTART_REGISTRY_VALUE_NAME, Application.ExecutablePath, RegistryValueKind.String);

            base.Install(stateSaver);



        }
        
        }

}

Zusätzlich würde ich mir eine Message Box ausgeben lassen, um zu sehen ob die Methode überhaupt aufgerufen wird. Leider erscheint die Message Box zu keiner Zeit der Installation, und das Programm wird auch nicht in die Autostart eingefügt.
Mache ich da grundsätzlich etwas falsch?
mfg

J
1.114 Beiträge seit 2007
vor 14 Jahren

Zusätzlich würde ich mir eine Message Box ausgeben lassen, um zu sehen ob die Methode überhaupt aufgerufen wird. Leider erscheint die Message Box zu keiner Zeit der Installation, und das Programm wird auch nicht in die Autostart eingefügt.

Wann denkst du denn würde die Routine denn ausgeführt werden. Ich hab ja schon mal erwähnt, dass der Code bei einer MSI Installation ausgeführt wird. Deshalb die Frage: Wie installierst du denn überhaupt dein Programm?

P
Pezor Themenstarter:in
25 Beiträge seit 2008
vor 14 Jahren

Ich veröffenltiche einfach das Projekt und lass mir ne setup.exe erzeugen. Wenn der Code aber nur bei einer MSI Installation ausgeführt wird, werde ich heute nach der Arbeit versuchen eine zu erstellen.
Danke für die Hilfe
mfg

3.971 Beiträge seit 2006
vor 14 Jahren

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

J
1.114 Beiträge seit 2007
vor 14 Jahren

Ich veröffenltiche einfach das Projekt und lass mir ne setup.exe erzeugen.

Wie geht das? In meinem VS2008 kann ich entweder über ClickOnce mein Projekt veröffentlichen, oder aber ich muss ein eigenes SetupProjekt anlegen. Letzteres ist wohl das was du brauchst.

P
Pezor Themenstarter:in
25 Beiträge seit 2008
vor 14 Jahren

@ Jelly: jop mit clickonce
@ kleines_eichhöernchen: danke für den Link
Ich hab mir jetzt ein SetupProjekt angelegt und mit der Anleitung im Link geht es jetzt schon fast. Das einzige Problem daß ich noch habe ist, daß der Application.ExecutablePath nicht mehr den ExecuteablePath meiner Application aufruft sondern die des MSI, welcher C:\windows\system32\msiexec.exe ist, sprich der MSI wird in die Autostart geschrieben.

mfg