2008-09-19 7 views
2

Ich versuche, einen Test zu schreiben, der in seiner Einrichtung Setup eine Datei sichert und löscht das Original, führt den Test ohne das Original vorhanden, dann im Teardown, stellt das Original aus dem Backup. Die Datei befindet sich in meinem Ordner% ProgramFiles%. Ich erhalte eine UnauthorizedAccessException für die Anweisung fileInfo.Delete(). Ich habe kein Problem damit, diese Datei von einem anderen Testprojekt auf demselben Rechner zu löschen, das nicht vom Resharper Test Runner läuft.Warum kann ich eine Datei in% ProgramFiles% nicht von einem Komponententest über Resharper's Test Runner Unit Test löschen?

Ich kann die Datei woanders bewegen - es ist ssapi.dll, eine installierte DLL für Visual Source. (Ja, ich bin etwas invasive in einem Unit-Test zu tun.)

Es ist der gleiche Benutzer (me) für beiden Wege - ich habe es über die Task-Manager. Mein Benutzerkonto ist Mitglied der lokalen Administratorgruppe. Welche anderen Faktoren bestimmen meine "Autorisierung", etwas mit einer Datei zu tun?

BEHOBEN: Obwohl es meine ursprüngliche Frage nicht beantwortet (auf die ich immer noch die Antwort wissen möchte), habe ich eine Ausweichlösung für meine Testzwecke gefunden, die System.Security.Permissions framewok verwendend, a Anforderung für FileIOPermissionAccess.Lesen Sie den App-Code (Nicht-Test), der die Datei benötigt (für einen Interop-Aufruf), und einen Deny für denselben im Test dieses Codes, der ein Szenario erfordert, dass diese Datei nicht vorhanden ist. Dies sollte jetzt funktionieren (und ich liebe es, ein wenig über den Namespace System.Security.Permissions gelernt zu haben)!

Antwort

0

Es ist möglich, dass ReSharper seinen Test-Runner als separater Prozess ausgeführt wird, und dass separater Prozess wird stattdessen nicht mit Ihrer Windows-Identität aber, ein anderen mit niedrigeren Privilegien.

Möglicherweise können diese Öffnung Task-Manager und Überprüfung anzeigen Prozesse aller Benutzer überprüfen.

1

Nicht wirklich eine Lösung, aber ich würde in Betracht ziehen, dieses Problem aus einem anderen Blickwinkel zu beheben.

Sie vielleicht das Verzeichnis in Erwägung ziehen könnte Umstellung auf% AppData% (man könnte diese Änderung auch für Sie Haupt-Anwendung vornehmen müssen).

Es könnte Ihr Problem lösen und werden Sie auch gut sehen, wenn Sie auf Vista zu verschieben, da UAC Sie (oder die Anwendung Benutzer) stoppen konnte von dem% Programfiles% Verzeichnis.

0

Sie können dies wahrscheinlich beheben, indem Sie Ihrem Benutzerkonto vollen Zugriff auf diesen Ordner gewähren.

Navigieren Sie zu dem Ordner im Windows Explorer. Klicken Sie mit der rechten Maustaste auf den Ordner und wählen Sie Eigenschaften. Wählen Sie die Registerkarte Sicherheit, dann die Schaltfläche Bearbeiten und fügen Sie die vollständige Kontrolle für sich hinzu. Ja - ich nehme an, es ist ein potenzielles Sicherheitsproblem, aber Sie müssen die Dateien in diesem Verzeichnis ändern, und Sie scheinen zu wissen, was Sie tun, also sollte es funktionieren.

0

Sie können die Überwachung für die Datei aktivieren und die Fehlernachricht im Ereignisprotokoll überprüfen. Beachten Sie, dass Sie die Überwachung an zwei Orten aktivieren müssen: einmal unter Lokale Sicherheitsrichtlinie/Lokale Richtlinien/Überwachungsrichtlinie und einmal in der Datei selbst. Dies würde das Problem nicht lösen, würde aber zumindest helfen, das Problem zu diagnostizieren.

0

Haben Sie Vista oder Server 2008 mit aktivierter UAC? Wenn ja, könnte dies die Ursache sein - der Test-Runner-Prozess ist möglicherweise nicht im "erhöhten" Modus.