2010-04-09 8 views
9

Für welche Teile des Frameworks muss ein Benutzer mehr als ein Standardbenutzer sein? Der Grund, warum ich frage ist, weil ich versuche, eine Liste möglicher Probleme mit bestehenden Anwendungen zu kompilieren, wenn nun auf Windows 7Welche Teile von .NET erfordern Administratorrechte, die ausgeführt werden müssen?

migrieren, kann ich denke an ein paar Dinge selbst:

  • Das Schreiben in Eventlog
  • Writing für Registrierungsschlüssel außerhalb von Current_User Umfang
  • Erste eine Umgebungsvariable
  • etc ...

Ich hätte gerne eine vollständigere Liste und bisher bin ich nicht auf eine anständige Ressource gestoßen, in der all diese Sachen aufgelistet sind.

Beachten Sie, dass ich nicht nach Möglichkeiten suche, die Berechtigungen für die vorhandenen Apps zu erhöhen (was mithilfe eines Manifests möglich ist). Ich identifiziere einfach Aktionen im Code, die Probleme verursachen könnten.

+4

nebenbei, natürlich sind diese Einschränkungen nicht spezifisch für. NET –

+2

keines der Beispiele, die Sie angeben, benötigen unbedingt Administratorrechte. Anwendungen können ihr eigenes Protokoll zum Ereignisprotokollsystem hinzufügen und eine niedrigere Berechtigungsebene angeben. Das Abrufen einer Umgebungsvariablen erfolgt pro Benutzer. das Schreiben in Registrierungsschlüssel außerhalb der HKCU hängt von der Registrierungs-ACL ab; Anwendungen können sicherlich HKLM-Schlüssel erstellen, die von jedem Benutzer beschreibbar sind. –

+1

Es scheint sehr schwierig zu sein, eine vollständige Liste von API-Aufrufen zu erhalten, die möglicherweise Probleme verursachen könnten. Ich werde mich auf andere Mittel konzentrieren müssen, um festzustellen, ob eine Anwendung scheitern würde. So wie es jetzt aussieht, scheint Daniel Rose den besten Weg zur Lösung meines Problems geboten zu haben, aber es ist nicht wirklich die Antwort auf meine Frage. Da Markus darauf hingewiesen hat, dass die Liste im Grunde die gleiche ist wie die NT-Logo-Anforderungen, werde ich ihm die Bounty gewähren. Danke an alle für Ihre Eingabe. –

Antwort

8

Nun, Ihre Beispiele haben nicht wirklich etwas mit Windows 7 oder .NET zu tun. Tatsächlich waren sie bereits Teil der Logo-Anforderungen "Entworfen für Windows NT 4.0". Wenn Sie Ihre Anwendung so geschrieben haben, dass Benutzer ohne Administratorrechte sie unter NT, Win2k oder XP ausführen konnten, funktioniert sie unter Vista/Win7 einwandfrei.

Es gibt einen weiteren häufigen Fehler, wenn Sie Ihre Software auf x64-Systemen ausführen (dies ist jedoch nicht spezifisch für Win7, sondern gilt zB auch für Win2003 Server x64 oder Win XP x64): Wenn Sie mit nativen 32 arbeiten -Bit-Code, wie Aufrufe an eine native DLL oder COM-Interop mit einer In-Process-Komponente), stellen Sie sicher, dass Sie "x86" als Plattformziel in den Visual Studio-Projekteinstellungen anstelle von "Beliebige CPU" auswählen. Andernfalls wird Ihre Anwendung als 64-Bit-Prozess ausgeführt, und Sie können nicht 32- und 64-Bit-Code im selben Prozess mischen, so dass Sie auf Fehler stoßen würden.

Und natürlich, wie es immer Best Practice war, verwenden Sie Environment.GetSpecialFolders anstelle von hart codierten Pfaden.

+2

Wie beantwortet das die Frage? – Alex

+0

@Alex - "Nun, Ihre Beispiele haben nicht wirklich etwas mit Windows 7 oder .NET zu tun." Es gibt keine .Net-Framework-Teile, die Administratorrechte erfordern. Es gibt Framework-Klassen, die Betriebssystemfunktionen umschließen, für die möglicherweise Administratorrechte erforderlich sind. Es gibt jedoch keine einfache Möglichkeit zu sagen, ob eine bestimmte .NET-Methode zu einer solchen Funktion führt. –

2

Eine Möglichkeit, eine unvollständige Liste zu erhalten, besteht darin, im "Editor für lokale Gruppenrichtlinien" nachzuschauen, welche Logon-Rechte und -Rechte den Administratoren standardmäßig zugewiesen sind.

+0

Das ist ein interessanter Ansatz. Da Corp.IT tendenziell die Richtlinien auf der Website meines Kunden überstrapaziert, könnte dies ebenfalls zu guten Ergebnissen führen. –

8

Wenn Sie darüber nachdenken, was "Bibliotheksanrufe" sind, werden Sie den falschen Weg einschlagen. Denken Sie an alles, was in eine Datei schreibt. Wenn sich diese Datei unter anderem unter Programmdateien befindet, benötigen Sie Administratorrechte. Wenn es unter AppData ist, nicht. Gleicher Bibliotheksaufruf, unterschiedliche Ergebnisse. Dito für das Schreiben in die Registrierung - HKLM benötigen Sie Admin, HKCU Sie nicht. Das Schreiben in das Ereignisprotokoll ist im Allgemeinen in Ordnung, aber das Erstellen Ihrer Ereignisquelle ist nicht möglich. Und so weiter. Es geht nicht darum, welche Methode du anrufst, es geht eher um die Parameter (zB Pfad), die du an sie übergibst.

2

Named Pipes können Probleme verursachen. Normalerweise ist dies kein Problem, aber die Verwendung von Named Pipes nimmt jetzt zu, wobei WCF diese nativ für den IPC-Transport unterstützt.

+0

Danke. Ich füge das auch meiner Liste hinzu. –

3

Ich glaube nicht, dass die Umgebungsvariablen erhöht werden müssen. Zumindest bin ich noch nie darauf gestoßen. Gibt es wirklich Fälle, in denen das stimmt?

+0

Sie können Recht haben. Mein Ansatz bestand darin, zunächst eine Liste möglicher Schmerzpunkte zu erstellen und dann für jeden von ihnen festzustellen, ob ich in Schwierigkeiten geriet oder nicht. –

2

Nichts im .Net-Framework erfordert Administratorrechte. Alles, was mit der Sicherheit auf Benutzerebene zu tun hat, wird vom Betriebssystem gesteuert. Ob Administratorrechte erforderlich sind, hängt von der Betriebssystemkonfiguration ab. Daher kann der Rahmen nicht bestimmen, ob eine Erhöhung erforderlich ist.

Sie sollten nicht im Sinne von "Was im .Net-Framework erfordert Erhöhung?", Sondern in Bezug auf "Welche OS-Funktionen verwendet meine App, die Admin-Erhöhung in der Standardkonfiguration erfordern" denken. Und wie @Marcus sagte, die Logo-Anforderungen "Entworfen für Windows NT 4.0" sind ein sehr guter Ausgangspunkt, um zu bestimmen, welche OS-Funktionen Ihre App vermeiden sollte, wenn sie als normaler Benutzer ausgeführt werden soll.

+0

Punkt genommen. Die Sache ist, wenn ich es auf eine Reihe von Bibliotheken eingrenzen kann, wird es möglich sein, (alle) Codebasen auf das Auftreten von irgendwelchen von diesen zu scannen, die schnell mögliche Probleme anzeigen würden. –

+0

Ich verstehe, was Sie erreichen möchten, aber es wird schwer sein, solche Anrufe automatisch zu scannen und zu markieren. Hauptsächlich deshalb, weil die Admin-Erhöhung oft nicht durch den Methodenaufruf selbst ausgelöst wird, sondern durch die Parameter, die an diesen Methodenaufruf übergeben werden. –

+0

Admin-Elevation wird von Methodenaufrufen überhaupt nicht ausgelöst. Was ausgelöst werden könnte, ist "Scheitern, wenn Sie nicht erhöht sind". Das sind verschieden. –

1

Sie können die Luapriv-Prüfungen von Application Verifier verwenden, um Probleme zu finden. Auch die Standard User Analyzer wird Ihnen helfen.

+0

Das sind großartige Ressourcen. Sie werden mir sicherlich sehr dabei helfen, meine Arbeit zu erledigen. Vielen Dank! –

+0

Eigentlich sind diese Tools Teil des Anwendungskompatibilitäts-Toolkits: http://www.microsoft.com/downloads/details.aspx?FamilyId=24DA89E9-B581-47B0-B45E-492DD6DA2971&displaylang=en –

1

Wenn ich Ihre Frage richtig zu verstehen, Visual Studio kann dies für Sie berechnen ...

Gehen Sie einfach auf Ihr Projekt Eigenschaften, klicken Sie auf der Registerkarte Sicherheit und klicken Sie auf „Aktivieren von Clickonce Security Settings“ Kontrollkästchen. Wählen Sie das Optionsfeld "Dies ist eine Teilvertrauensantrag" und klicken Sie dann auf "Berechtigungsberechnung".

VS ein Häkchen neben jede Berechtigung wie IO, Register platzieren wird, usw. Ihre Anwendung erfordert ...

+0

Wow. Das scheint ein guter Ansatz zu sein. –

0

ich es ernsthaft bezweifeln, eine Art und Weise ist eine vollständige Liste der .NET-Anrufe zu erhalten, die Erhöhung von Berechtigungen erfordern .

Das Schreiben von BTW in das Ereignisprotokoll erfordert keine Erhöhung, das Erstellen einer Ereignisprotokollquelle erfordert jedoch eine Erhöhung.

Der beste Weg, herauszufinden, welche Teile Ihres Codes Probleme haben, ist durch Testen auf Win7 und sehen, was bricht, nicht elegant, aber macht den Job. Wenn Sie Zeitschätzungen für diese Aufgabe erstellen möchten, müssen Sie möglicherweise ein oder zwei Tage mit Ihrer App hantieren: Führen Sie Win7 aus, sehen Sie, was sich bricht, notieren Sie sich, kommentieren/vermeiden/deaktivieren Sie diesen Abschnitt und wiederholen Sie den Vorgang bis du denkst, du hast genug von einer Liste von Dingen, die du ansprechen musst.

+0

Wenn es nur eine einzige App wäre, die ich überprüfe, stimme ich zu, dass Ihr Ansatz gut wäre. Allerdings sprechen wir über 250 Anwendungen leider. Und ich möchte verhindern, dass ich sie alle nacheinander ausführen muss. –

+0

Dann wollen Sie den LUA (oder Standard-Benutzer) -Analysator, er wird die App laufen sehen und Ihnen sagen, was es macht. Holen Sie sich das Toolkit von den Links in der anderen Antwort sicher. –

Verwandte Themen