2011-01-09 3 views
7

HintergrundGewähren von Administratorrechten für eine Anwendung, die beim Start ohne UAC-Eingabeaufforderung gestartet wird?

ich ein kleines C# /. NET 4.0-Anwendung geschrieben haben, die in den Programmdateien installiert verschiedene Einstellungen von einem Spiel synchronisiert und von anderen Kopien des gleichen Spiels auf verschiedenen Maschinen (man denke Chrome Lesezeichen-Synchronisierung, aber für dieses Spiel). Die Synchronisierung selbst ist eine relativ einfache Angelegenheit, die sich mit Dateien beschäftigt, die im Ordner "Programme" des Spiels gespeichert sind.

Auf meinem Computer funktioniert das gut, ohne meine Anwendung über UAC zu erhöhen. Windows 7 lässt das Programm mit der Virtualisierung von Programmdateien arbeiten und meine Anwendung funktioniert gut damit.

Aber auf vielen Maschinen des Testers bekomme ich Berichte, dass die Anwendung entweder nicht mit den Dateien arbeiten kann und in manchen Fällen den Ordner des Spiels nicht sehen kann! Wenn der Benutzer mit der rechten Maustaste klickt und "Als Administrator ausführen", wird das Problem in jedem Fall gelöst.

So, wir nur das Manifest der Anwendung festlegen, um Administratorrechte benötigen, nicht wahr? Das ist gut (wenn auch nicht ideal), wenn der Benutzer die Anwendung oder den Synchronisierungsprozess manuell aufruft, da sie mit der Anwendung interagieren und bereit sind, eine UAC-Anforderung zu akzeptieren.

Eine der Funktionen meiner Anwendung ist jedoch eine Option "Automatisch synchronisieren", mit der der Benutzer die Anwendung "einstellen und vergessen" kann. Mit diesem Set wird die Anwendung in die Registrierung unter HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Run versetzt, um beim Start ausgeführt zu werden und in der Taskleiste zu sitzen und die Einstellungen im Hintergrund nach Bedarf zu synchronisieren.

Offensichtlich muss ich hier klüger sein. Die Eingabe einer UAC-Eingabeaufforderung, sobald sich der Benutzer bei seinem Konto anmeldet oder in zufälligen Abständen danach, ist nicht der richtige Weg.

Also, meine Frage!

Wie komme ich am besten zu einer Situation, in der ich beim Start eine Anwendung ausführen muss, die Administratorrechte benötigt? Gibt es eine Möglichkeit, dass der Benutzer eine Installation autorisiert, die dazu führt, dass das System die Anwendung automatisch mit den richtigen Berechtigungen ausführt, ohne beim Start/Login eine Eingabeaufforderung zu erhalten?

Update Nur um klar zu sein, muss dies im Code erreichbar sein.

+1

Ich denke, das wird Sie aufklären: http://StackOverflow.com/Questions/2488632/Win-CR-Run-app-as-Administrator-without-uac-prompt/2488645#2488645 Prost :) – Machinarius

Antwort

6

Sie sollten in Betracht ziehen, die Synchronisierungsfunktion in einem Windows-Dienst zu aktivieren. Dies ist die bevorzugte Methode zum Ausführen der Hintergrundfunktionalität unter Windows.

Der Dienst kann entweder unter dem Konto des Benutzers ausgeführt werden (vorausgesetzt, sie verfügen über Berechtigungen zum Ändern der Dateien), oder Sie können ein anderes Konto verwenden, das dies tut. Im schlimmsten Fall können Sie als SYSTEM laufen (obwohl dies nicht die beste Vorgehensweise ist).

Wenn Ihre Hintergrundprozessfunktionalität bereits funktioniert, sollte dies ein einfacher Prozess für die Konvertierung in einen Dienst sein.

Es gibt ein Beispielprojekt hier, dass Sie auf dem richtigen Weg gesetzt werden: http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx

+0

Danke - Installation als eine Dienstleistung scheint der Weg zu sein. Vielen Dank! – iKenndac

2

würde ich Sicherheitsnamespace verwenden und überprüfen inline für die Benutzerrollen.

Der currentUser kann Ihre Anwendung starten und erhält eine Info-Nachricht, wenn er nicht Mitglied der Administratorrolle ist!

Hoffe, das kann helfen!

+0

Danke, aber das ist keine Antwort auf die Frage, die ich gestellt habe! – iKenndac

+0

oh es tut mir leid, ich lese gerade Ihre ursprüngliche Frage neu. Es scheint, dass die Verwendung eines Windows-Dienstes eine gute Alternative sein könnte. Falls ich eine andere Lösung finde, werde ich sie veröffentlichen ... –

1

Da Sie erwähnt, beim Start ausgeführt, warum nicht eine geplante Aufgabe statt, was Sie mit der Registrierung tun? Sie können sie aus Code einrichten - es gibt a project on CodePlex, das ist im Grunde ein managed Wrapper, um Sie zu sparen, die PInvokes selbst zu tun. Sie führen Ihre kleine App "Richten Sie die Startaufgabe ein", die erhöht wird, und es gibt an, dass die Anwendung erhöht gestartet werden soll, und der Benutzer wird nicht einmal aufgefordert werden. Ich glaube, das ist die Antwort auf die Frage in Ihrem letzten Absatz.

Verwandte Themen