Vista: Autostart per Registry erreichen

Hallo zusammen.

Ich habe ein Programm geschrieben (C++), das sich (per Menüpunkt) selbst in die Registry eintragen soll unter HKLM/Software/Microsoft/Windows/CurrentVersion/Run. Das funktioniert auch prima, das Programm startet beim Start von Windows.
Nur unter Vista funktioniert es nicht. Genauer gesagt, dieser Schreibzugriff in der Registry schlägt fehl:

l = RegSetValueEx(h_key, „MeinProgramm“, NULL, REG_SZ, (LPBYTE)data, data_size);
if(l != ERROR_SUCCESS)
{
// Fehlermeldung

}

(data_size entspricht der Länge des Strings in data plus eins.)
Das Programm wird (bei meinen Tests) in einem Admin-Konto ausgeführt.

Jetzt habe ich viel gelesen über Registry-Virtualisierung unter Vista, könnte da der Grund liegen?

Vielleicht ist mein Ansatz unter Vista ja ganz falsch, daher frage ich mal ganz allgemein: wie kann ich per Programmcode dafür sorgen, dass mein Programm zusammen mit Windows gestartet wird?

Viele Grüße
Peter

Hallo!
Der Grund für das Verhalten ist die UAC („Benutzerkontensteuerung“) von Vista. Wenn die aktiviert ist, laufen auch Anwendungen, die unter einem Administator-Account gestartet werden, nicht von Haus aus mit vollen Zugriffsrechten.
Du kannst Dein Programm mal mit der rechten Maustaste anklicken und dann „Als Administrator ausführen“ auswählen. Nach dem Abnicken des UAC-Prompts sollte der Registryzugriff dann funktionieren.
Damit diese Abfrage automatisch passiert, kannst Du ein Manifest in Deine EXE einbetten - Google ist hier Dein Freund.

Gruß,
Martin

Danke für die superschnelle Antwort. Nach Stunden der erste Fortschritt :smile:
Tatsächlich: es funktioniert. Obwohl ich ja vorher auch Admin war. Aber Admin ist wohl nicht gleich Admin in der Vista-Welt.

Würde denn mit Manifest die Sicherheitsabfrage wegfallen?
(falls nicht: ich möchte natürlich nicht, dass der Benutzer bei jedem - noch dazu automatischen - Programmstart die Sicherheitsabfrage beantworten muss. In diesem Fall würde ich lieber auf das Feature verzichten.)

Viele Grüße
Peter

Hi nochmal!
Bei den Manifesten kannst Du 3 verschiedene Ausführungsstufen wählen:

  • asInvoker: Normalbenutzer haben keinen Schreibzugriff auf u.a. HKLM oder virtualisierte Verzeichnisse, Admins von Haus aus auch nicht.
  • highestAvailable: Normalbenutzer wie asInvoker, Admins automatisch mit erweiterten Rechten (nach Bestätigungsdialog Zugriff auf geschützte Bereiche)
  • requiresAdministrator: Programm fordert beim Start immer erweiterte Rechte an - bei Admins per Bestätigungsdialog, bei Normalbenutzern durch Abfrage von Benutzername+Passwort eines Admins.

Du kommst unter Vista (mit eingeschalteter UAC) also nicht ohne mindestens einen Bestätigungsdialog zu erweiterten Rechten.

Wenn die Anwendung aber automatisch starten soll, kannst Du das ja auch im für den Benutzer selbst frei schreibbaren Registrybereich unter HKCU machen, Du brauchst vielleicht ja nicht alle Anwender auf der Maschine damit zu beglücken…

Gruß,
Martin

Hallo,

wenn du dein Programm über die Aufgabenplanung startest und zwar mit der Option „mit höchsten Privilegien ausführen“, kannst du jedes Programm als Administrator starten, ohne dass eine Sicherheitsabfrage erfolgt.

Grüße Culles

Danke für die Manifest-Infos.

Du kommst unter Vista (mit eingeschalteter UAC) also nicht
ohne mindestens einen Bestätigungsdialog zu erweiterten
Rechten.

ja, leider

Wenn die Anwendung aber automatisch starten soll, kannst Du
das ja auch im für den Benutzer selbst frei schreibbaren
Registrybereich unter HKCU machen, Du brauchst vielleicht ja
nicht alle Anwender auf der Maschine damit zu beglücken…

Du wirst es nicht glauben, aber da bin ich noch gar nicht drauf gekommen! Natürlich, eigentlich will ich das ja sogar benutzerabhängig haben und hatte ein Brett vorm Kopf.
Das wird wohl die Lösung werden :smile:

Nochmal vielen Dank
Peter

wenn du dein Programm über die Aufgabenplanung startest und
zwar mit der Option „mit höchsten Privilegien ausführen“,
kannst du jedes Programm als Administrator starten, ohne dass
eine Sicherheitsabfrage erfolgt.

Danke für die Info. Leider kenn ich mich gar nicht in Vista aus und brauche solche Infos :smile:

Allerdings wollte ich es den Anwendern meiner Software so einfach wie möglich machen, den AutoStart an oder aus zu schalten (per Mausklick im Programm). Daher der Weg über die Registry.

Wenn ich aber - wie Martin Müller vorgeschlagen hat - HKCU statt HKLM nehme, sollte es ja klappen. Damit wäre das Problem gelöst :smile:

Vielen Dank und viele Grüße
Peter