Beim Durchsuchen von Assemblies unterscheidet sich das gesuchte PublicKeyToken bei der Ausführung als Admin vs als normaler Benutzer?

9

Ich befolge Anweisungen aus einem 2006 Microsoft .Net-Kursarbeitsbuch und gehe eine der Übungen durch. (Insbesondere ist dieser Kurs MS2349B und ich mache Modul 4 Übung 2.). Diese Übungen scheinen für die Tage vor der Vista-Phase entwickelt zu sein, wenn jeder die ganze Zeit über volle Administratorrechte hat. (Ich verwende .net 4.0.)

In dieser Übung erstellen Sie eine Assembly mit starkem Namen, installieren sie im GAC, erstellen eine lokale ausführbare Datei für die Assembly mit starkem Namen und überprüfen, ob die ausführbare Datei ausgeführt wird.

Wie im Tutorial beschrieben, signiere ich meine Assembly mit einem #if block:

%Vor%

Ich baue meine ausführbare Datei als lokaler Benutzer:

%Vor%

Ich installiere es über eine visuelle Studio-Eingabeaufforderung, die als Administrator ausgeführt wird, in den GAC:

%Vor%

Wenn ich meine exe in der Administrator-Eingabeaufforderung ausführe, bekomme ich die Ausgabe, die ich erwarte - die Anwendung läuft gut und scheint die DLL korrekt aus dem gac zu laden. Wenn ich unter der Nicht-Admin-Eingabeaufforderung ausgeführt werde, erhalte ich den folgenden Fehler

%Vor%

Was mir seltsam ist, ist, dass das publicKeyToken nicht dasselbe ist wie das, was in der GAC ist:

%Vor%

ABER wenn ich AReverser von der GAC deinstalliere und versuche, meine exe als Admin-Eingabeaufforderung auszuführen, erhalte ich den folgenden Fehler, der anzeigt, dass er nach dem erwarteten öffentlichen Schlüsseltoken f0548c0027634b66 sucht:

%Vor%

Beachten Sie unter Admin, dass es eigentlich nach dem richtigen publicKeyToken sucht.

Was gibt? Warum unterscheiden sich die gesuchten publickKeyTokens? Was hätte ich falsch machen können?

BEARBEITEN

Die App-Konfiguration, die wir benutzen sollen, könnte der Schuldige sein. Ich frage mich, ob Sie Administrator sein müssen, um einige dieser Einstellungen zu übernehmen. Wenn Sie es loswerden, scheint es zu passieren, dass admin fehlschlägt (obwohl in diesem Fall publicKeyToken als NULL aufgelistet ist). Hier ist meine App-Konfiguration

%Vor%     
Doug T. 01.10.2011, 01:02
quelle

2 Antworten

1

Durchsuchen Sie Ihre Festplatte nach AReverser.dll. Es ist möglich, dass Sie einige zusätzliche Kopien irgendwo versteckt haben. VS kann Schattenkopien von kompilierten DLLs erstellen.

Wenn das nicht hilft, aktivieren Sie die Fusion-Protokollierung (verwenden Sie fuslogvw.exe oder Spool-Fusion-Protokolle auf der Festplatte) und suchen Sie dann in den Protokollen, aus denen die problematische DLL geladen wird. IMO ist es die falsche DLL, die geladen wird.

    
Petar Repac 09.10.2011 21:48
quelle
0
___ qstnhdr ___ Beim Durchsuchen von Assemblies unterscheidet sich das gesuchte PublicKeyToken bei der Ausführung als Admin vs als normaler Benutzer? ___ antwort10238450 ___

Wo ist Ihre Lösung, sagen Sie, die Versammlung ist? Visual Studio verwendet den gac nicht zum Erstellen, wenn Sie eine andere Version der zugewiesenen Assembly-Assembly in Ihrem Referenzverzeichnis haben, wird der Client dagegen erstellt und schlägt fehl, wenn Sie versuchen, zur Laufzeit zu laden, da der gac zuerst geladen wird .

    
___ tag123assemblies ___ Assemblies sind Sammlungen von kompilierten .Net-Typen und -Ressourcen, die in einer logischen und physischen Einheit gruppiert sind (in Form einer .dll-Datei oder einer .exe-Datei). ___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ tag123gac ___ Das gac-Tag bezieht sich auf Probleme im Zusammenhang mit dem globalen Assemblycache. ___ qstntxt ___

Ich befolge Anweisungen aus einem 2006 Microsoft .Net-Kursarbeitsbuch und gehe eine der Übungen durch. (Insbesondere ist dieser Kurs MS2349B und ich mache Modul 4 Übung 2.). Diese Übungen scheinen für die Tage vor der Vista-Phase entwickelt zu sein, wenn jeder die ganze Zeit über volle Administratorrechte hat. (Ich verwende .net 4.0.)

In dieser Übung erstellen Sie eine Assembly mit starkem Namen, installieren sie im GAC, erstellen eine lokale ausführbare Datei für die Assembly mit starkem Namen und überprüfen, ob die ausführbare Datei ausgeführt wird.

Wie im Tutorial beschrieben, signiere ich meine Assembly mit einem %code% block:

%Vor%

Ich baue meine ausführbare Datei als lokaler Benutzer:

%Vor%

Ich installiere es über eine visuelle Studio-Eingabeaufforderung, die als Administrator ausgeführt wird, in den GAC:

%Vor%

Wenn ich meine exe in der Administrator-Eingabeaufforderung ausführe, bekomme ich die Ausgabe, die ich erwarte - die Anwendung läuft gut und scheint die DLL korrekt aus dem gac zu laden. Wenn ich unter der Nicht-Admin-Eingabeaufforderung ausgeführt werde, erhalte ich den folgenden Fehler

%Vor%

Was mir seltsam ist, ist, dass das publicKeyToken nicht dasselbe ist wie das, was in der GAC ist:

%Vor%

ABER wenn ich AReverser von der GAC deinstalliere und versuche, meine exe als Admin-Eingabeaufforderung auszuführen, erhalte ich den folgenden Fehler, der anzeigt, dass er nach dem erwarteten öffentlichen Schlüsseltoken f0548c0027634b66 sucht:

%Vor%

Beachten Sie unter Admin, dass es eigentlich nach dem richtigen publicKeyToken sucht.

Was gibt? Warum unterscheiden sich die gesuchten publickKeyTokens? Was hätte ich falsch machen können?

BEARBEITEN

Die App-Konfiguration, die wir benutzen sollen, könnte der Schuldige sein. Ich frage mich, ob Sie Administrator sein müssen, um einige dieser Einstellungen zu übernehmen. Wenn Sie es loswerden, scheint es zu passieren, dass admin fehlschlägt (obwohl in diesem Fall publicKeyToken als NULL aufgelistet ist). Hier ist meine App-Konfiguration

%Vor%     
___ answer7706775 ___

Durchsuchen Sie Ihre Festplatte nach AReverser.dll. Es ist möglich, dass Sie einige zusätzliche Kopien irgendwo versteckt haben. VS kann Schattenkopien von kompilierten DLLs erstellen.

Wenn das nicht hilft, aktivieren Sie die Fusion-Protokollierung (verwenden Sie fuslogvw.exe oder Spool-Fusion-Protokolle auf der Festplatte) und suchen Sie dann in den Protokollen, aus denen die problematische DLL geladen wird. IMO ist es die falsche DLL, die geladen wird.

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die zum Erstellen einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___
Steve Mitcham 19.04.2012 23:49
quelle

Tags und Links