Frage

Ich habe ein .NET Setup-Projekt, an dem ich eine benutzerdefinierten Installer Aktion hinzugefügt habe. Während des Installationsvorgangs muss der Benutzer einen Pfad zur Verfügung zu stellen (die oft einen UNC-Pfad ist) zu einer Freigabe auf ihre Dateiserver. Ich versuche, einige Validierung zu tun, bevor das Verzeichnis sicher existiert, um fortfahren, wie zum Beispiel:

if (!Directory.Exists(serverDirectory)) { 
    throw new InstallException("Specified path does not exist or ..."); 
} 

Pretty Vanille - und in einer Konsolenanwendung, die Directory.Exists () Code funktioniert wie erwartet. Doch im Rahmen des MSI, ist es nicht. Insbesondere schlägt der Aufruf an Directory.Exists immer, wenn eine Netzwerkressource verwenden. Die Dokumentation für Directory.Exists anzeigt warum :

  

Die Exists-Methode keine Netzwerk-Authentifizierung durchzuführen. Wenn Sie eine vorhandene Netzwerkfreigabe Abfrage ohne vorauthentifiziert ist, besteht die Methode false zurück.

Sucht hat mich auf andere ähnliche Szenarien in ASP.NET geführt, wo Identitätswechsel ist die Lösung. Das ist hier nicht anwendbar, aber es zeigt das Problem.

Wie kann ich für die Existenz des Netzwerkpfads überprüfen? Um in der Sprache der Dokumentation zu stellen - wie ich vor dem Aufruf Vorauthentifizierung? Der Benutzer wird als Administrator installieren, und das Surfen auf diesen Pfad in Windows Explorer erfolgreich funktioniert, so dass es nicht Berechtigungen des Benutzers ist, sondern ein Mangel durch den Code zu überprüfen.

Habe ich eine unnötige Sorge geschaffen - sollte ich das weglassen und die Ausnahme später werfen, wenn sie versuchen die Netzwerkressource zu verwenden ... es ist weitgehend gleich kritischen Fehler, rechts

?
War es hilfreich?

Lösung

Es ist nicht nur Existenz: Sie müssen auch für Berechtigungen überprüfen, und Sorgen darüber, was passiert, wenn sie auf Sie in der Zeit zwischen ändern, wenn Sie überprüfen, und wenn Sie tatsächlich den Wert verwenden.

Daher ist der normale Mechanismus ist nur okay, alles ist übernehmen. Stattdessen setzen Sie Ihre Entwicklungsaufwand in die Ausnahmebehandlung, wenn die Annahme als falsch erweist, weil Sie das zu tun anmutig ohnehin in der Lage sein müssen.

Für diesen Fall könnten Sie in der Lage sein, auf das zu verbessern, indem sie sofort eine kleine Platzhalter-Datei im Verzeichnis in Frage zu schaffen und auf dieser Datei eine Sperre hält, bis Sie mit dem Ordner komplett fertig sind. Das würde erlauben Sie etwas besseres Feedback zu geben, da Sie eine sofortige Fehlermeldung erhalten, werden versuchen, die Datei zu erstellen. Es hilft auch, Garantie, dass der Ordner bleibt zugänglich, da unter Windows mindestens Nutzer haben eine harte Zeit zu löschen oder zu deutlich Ordner zu ändern, solange Sie eine Sperre auf diese Datei zu halten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top