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
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.
Schiebe eine Verknüpfung zur Anwendung in den Autostartordner im Startmenü, so habe ich es gelöst!
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
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
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
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
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
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?
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
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
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.
@ 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