2012-03-30 2 views
2

In meiner Anwendung, ich versuche, meine Anwendung als Start zu setzen, indem Registrierungseintrag hinzufügen den folgenden Code verwenden:Verhindern Registrierungseintrag Code von Admin erfordert previliges

RegistryKey startupapp = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
startupapp.SetValue("App", "\"" + Assembly.GetExecutingAssembly().Location + "\"" +" -start"); 

Aber das Problem ist die Registrierung nur hinzugefügt wird, wenn Ich betreibe meine Anwendung als Administrator. Gibt es eine Möglichkeit, wie ich dieses Ding vermeiden könnte, so dass meine Anwendung Registrierungseinträge für die Start-App hinzufügen/löschen könnte?

+0

Soll die Anwendung beim Start für alle Benutzer oder für den Benutzer ausgeführt werden, der gerade angemeldet ist? –

+0

@Adam Mihalcin: Es wäre gut, die Anwendung für jeden Benutzer auszuführen. – Cipher

Antwort

6

Das ist, weil HKLM Administratorrechte benötigt, um zu schreiben. HKCU erfordert das nicht.

RegistryKey startupapp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 

startupapp.SetValue("App", "\"" + Assembly.GetExecutingAssembly().Location + "\"" +" -start"); 
+0

Ich habe nach diesen Wörtern gesucht, HKLM erfordert Admin zu schreiben, während HKCU nicht ... du rettest mich Mann! – CodeIt

1

Da Sie die Anwendung festlegen möchten beim Start für alle Benutzer ausgeführt werden, kein, können Sie sich um nicht irgendeine Art von Administratorzugriff erforderlich ist.

Warum ist das? Nun, als ein Gedankenexperiment, lassen Sie uns sagen, dass Windows Anwendungen erlaubt, Programme so einzustellen, dass sie beim Start ohne ein Administrator-Passwort ausgeführt werden. Dies würde jedoch den Zweck vieler Sicherheitsverbesserungen in Vista mit der Einführung von UAC und dem Aufkommen von Nicht-Administrator-Accounts standardmäßig zunichte machen. Ein Benutzer könnte ein Spiel herunterladen, das tatsächlich ein Trojaner war, und das Spiel könnte Malware so einrichten, dass sie beim Start für alle Benutzer ausgeführt wird, ohne dass die UAC-Eingabeaufforderung erforderlich ist. Daher können Sie in Windows nicht festlegen, dass das Programm beim Start ohne Administratorrechte ausgeführt wird.

Es gibt einige Tricks, die Sie verwenden können, um den Benutzer dazu zu zwingen, Ihr ganzes Programm als Administrator auszuführen. Meine erste Idee ist ein zweites Programm, dessen einzige Aufgabe es ist, das Hauptprogramm beim Start zu starten und es mit der Option ProcessStartInfo.Verb = "runas" zu starten (vorausgesetzt, Sie verwenden System.Diagnostics.Process, um den neuen Prozess zu starten), damit das Hilfsprogramm ausgeführt wird als Administrator, aber Ihre gesamte Anwendung kann ohne die UAC-Eingabeaufforderung gestartet werden.


EDIT: Als Antwort auf Ihren Kommentar

Ja, wenn Sie zum Starten des Programms beim Start für einen einzelnen Benutzer interessieren, haben Sie viel mehr Möglichkeiten. Wie in this O'Reilly article beschrieben, besteht eine Option darin, in HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Run zu schreiben, damit Ihr Programm beim Start für den aktuellen Benutzer ausgeführt wird.

+0

In diesem Fall hat der Ort, an dem meine App verwendet wird, nur angemeldete Benutzer. Kann etwas dann getan werden? – Cipher

+0

Ich habe die Registrierung in HKCU geändert, aber mit den Standard-UAC-Einstellungen startet die Anwendung nicht beim Booten. Wenn ich jedoch die UAC-Einstellungen deaktiviere, startet die Anwendung beim Booten. Dies ist das gleiche Verhalten, das ich erhalte, wenn ich die Registrierung in HKLM einstelle, außer dass ich admin prevliiges benötige, um die Registrierung in HKLM zu setzen. Warum startet diese Anwendung nicht mit den Standard-UAC-Einstellungen und wie kann dies gelöst werden? – Cipher