Komfortabler Dateimanager mit vielen Funktionen

Benutzerkontensteuerung bei portabler Installation

By Sven on 06.07.2011 - 16:00 in SpeedCommander 14

Zum Ausführen von Funktionen mit höheren Rechten gibt es zwei Möglichkeiten:

  1. Initialisierung eines COM-Objekts mit administrativen Rechten
  2. Starten eines zusätzlichen Hilfsprogramms mit administrativen Rechten

Ich hatte mich damals für die erste Methode entschieden, weil die programminterne Verwendung quasi einem normalen Funktionsaufruf entspricht. Nach der Erstellung der Schnittstellen für den Zugriff auf Dateien und Registrierung ließen sich alle Programmfunktionen recht einfach an die Benutzerkontensteuerung anpassen. Nachteilig ist nur, dass die entsprechenden COM-Objekte dem System bekannt sein müssen, was zwingend einen Eintrag in der Registrierung erfordert.

Bei Verwendung einer portablen Installation auf einem USB-Stick ist das natürlich kontraproduktiv. Hier hilft es nur, SpeedCommander explizit mit erhöhten Rechten zu starten, wenn Aktionen in UAC-geschützten Ordnern anstehen.

Dieses Problem ließ sich nur durch einen Umstieg auf die zweite Methode lösen. Aus dem COM-Server ist ein normales ausführbares Programm im SpeedCommander-Verzeichnis geworden, mit dem über eine Pipe Funktionen und Parameter ausgetauscht werden. Das funktioniert überraschend gut.

Wie in früheren Versionen auch erscheint die Nachfrage der Benutzerkontensteuerung nur bei der ersten Aktion in einem geschützten Ordner. Alle weiteren Aktionen während der laufenden Sitzung von SpeedCommander müssen nicht mehr bestätigt werden.

Es gibt 7 Kommentare zu diesem Beitrag

Trackback URL | RSS-Feed für Kommentare

  1. Kelden sagt:

    > Nachteilig ist nur, dass die entsprechenden COM-Objekte dem System bekannt sein müssen, was zwingend einen Eintrag in der Registrierung erfordert.

    Das stimmt nicht ganz. Nennt sich Registration-Free Activation of COM Components.
    http://msdn.microsoft.com/en-us/library/ms973913.aspx

    Ist aber wahrscheinlich mehr Aufwand als das ganze über Pipe Funktionen zu machen.

  2. Sven sagt:

    Die Frage ist, ob das auch für UAC-Objekte möglich ist. Diese brauchen noch einen AppID-Eintrag (HKCR\AppID\{CLSID}) mit speziellen Berechtigungen, damit der Aufruf auch für normale Anwender funktioniert.

  3. Kelden sagt:

    Falls du das ausprobierst wäre es super wenn du deine Erfahrungen (wie üblich) posten könntest. Würde mich auch interessieren ob es gehen würde.

  4. Registration Free gehtin jedem Fall.
    Du definierst das COM Objekt als eigenes Assmebly im Manifest und gibst dann alle GUIDs der Objekte an, die von dem Assembly unterstützt werden sollen.

  5. Kelden sagt:

    @Martin
    Das geht auch. Aber Sven weiß nicht ob es auch für UAC-Objekte möglich ist. Bisher ist mir die Möglichkeit gar nicht bewußt gewesen.

  6. COM ist COM… Warum nicht? 😉

  7. Sven sagt:

    Weil UAC-Objekte außerhalb des Prozesses in einem separaten Prozess erstellt werden. Wenn ich es richtig gelesen habe, dann funktioniert RegFree-COM nur mit prozessinternen Objekten:

    > Not every component is a suitable candidate for use under Reg-Free COM.
    > A component is not considered suitable if any of the following are true:
    >
    > – The component is an out-of-process (ActiveX EXE) server. Only DLLs are supported.

    Quelle: http://msdn.microsoft.com/de-de/magazine/cc188708(en-us).aspx

Top