2010-08-23 24 views
10

Was sind die Probleme bei der Bereitstellung eines .EXE auf einem Netzlaufwerk und mit Benutzern .EXE über das Netzwerk ausführen?Bereitstellen von EXE auf Netzwerklaufwerk?

Der Vorteil ist, dass Upgrades nur an einem Ort durchgeführt werden müssen. Was sind die Nachteile?

+2

Wie werden Sie eine Antwort für diese Frage ermitteln? Sieht so aus, als würdest du nach einer Antwort fischen, aber bist sehr vage. – webdad3

+0

@Jeff V: In der Tat sollte dies ein Community-Wiki sein (wenn überhaupt), was bedeutet, dass es definitiv nicht belohnt werden sollte. – Jasper

Antwort

0

Der Hauptnachteil ist, dass das Netzwerklaufwerk nicht verfügbar ist.

Dann jede Sprache, die Sie nicht angegeben haben, wird die EXE in Angelegenheiten geschrieben. Da .NET einige Sicherheitsprobleme hat, die von einem Netzlaufwerk ausgeführt werden.

+0

Ich bin mir der Sicherheitsprobleme mit .NET bewusst. Noch etwas? – CJ7

+0

Nein. Nichts anderes kommt mir in den Sinn. –

0

Es hängt davon ab, was die Anwendung tut. Meine Anwendung wäre eine problematische Over-the-Network-Bereitstellung, da sich die verwendeten Konfigurationsdateien alle im selben Ordner wie die EXE oder in einem Unterordner befinden. Wenn jeder Benutzer aus dem Netzwerk ausläuft, könnten sie möglicherweise die Konfigurationsdateien ändern und alles für alle anderen vermasseln.

Zum Glück wird meine App nur auf separaten Arbeitsstationen bereitgestellt werden. :)

3

Ein Problem ist das Sperren von Dateien. Wenn in einer Windows-Umgebung ein Benutzer die Anwendung direkt von einer Netzwerkfreigabe ausführt, sind die Dateien der Anwendung gesperrt. Dies verhindert, dass die Anwendung mit einer neueren Version aktualisiert wird, wenn jemand die Anwendung geöffnet hat.

Sie können dies umgehen, indem Sie die Netzwerkfreigabe deaktivieren, bevor Sie die App aktualisieren und dann erneut aktivieren.

+2

Sie können die exe auch umbenennen. Es wird die Verbindungen nicht beenden, aber Sie können eine neue Datei dort hinstellen. Benutzer erhalten die neue Datei beim nächsten Laden. Ich habe dies getan, wenn ein kleines Update benötigt wird und wenn Benutzer zwei verschiedene Versionen für eine kurze Zeit ausführen, wird nichts kritisches passieren. – bugtussle

+0

@Bugtussle, die nicht immer funktioniert, manchmal Windows lässt Sie nicht umbenennen, weil "die Datei in einem anderen Programm geöffnet ist" – alldayremix

+0

@alldayyremix ExE funktioniert meiner Erfahrung nach immer, aber andere wie Dokumente oder Datenbanken geben einen Fehler . mehr Infos http://superuser.com/questions/488127/why-can-irename-a-running-executable-but-not-delete-it – bugtussle

0

Sie verfügen möglicherweise nicht über alle Dateien, die Sie für Ihre App benötigen. Wenn dies nicht der Fall ist, müssen Sie ein Setup erstellen. Wenn sie es tun und es funktioniert und alle Laufwerke korrekt zugeordnet sind, sollte es Ihnen gut gehen.

1

Für unser Programm haben wir uns gegen eine geteilte exe entschieden. Wir dachten, es wäre schwieriger zu unterstützen (die IT muss Benutzer töten, um Dateien vor Updates zu entsperren, die Benutzer wissen nicht, wo sich die Exe im Netzwerk befindet, die Freigabe-Dateiberechtigungen müssen von der IT geändert werden usw.) und wir sollten emulieren das Verhalten anderer Programme, wenn möglich (Client-Software wird normalerweise auf den Clients installiert).

1

Wenn Sie Ihre Anwendung mit einem Object Capability Security-Modell schreiben, wie in Mark S. Miller's Ph.D. These, Robust Composition: Towards a Unified Approach to Access Control and Concurrency Control, dann werden Sie keine Sicherheitsnachteile haben.

Auf der anderen Seite ist der "Nachteil", dass Sie jetzt die Zugriffskontrolle über das Objektdiagramm verwalten müssen. Die Anwendung sollte nur Zugriff auf die Berechtigungen haben, die Sie ihnen geben. Wie einige bereits erwähnt haben, verfügt Windows über eine grundlegende Schutzrichtlinie, die die Anwendungsdateien sperrt und so verhindert, dass jemand die EXE ändert, bis die Anwendungsinstanz (en) geschlossen wird.

Wirklich, das Schlüsselproblem hier ist, müssen Sie sich fragen, welche Autorität das Programm und seine Bestandteile haben sollten. Wenn es eine lokale Benutzerberechtigung erfordert, müssen Sie entweder dafür entwerfen oder dem Programm die Erlaubnis erteilen.

Die Auswirkungen zu verstehen und es gut zu machen, ist keine leichte Aufgabe.

+3

Das ist eine Art unhöflich. Ich gab eine technisch gültige Antwort - NICHT jede Antwort muss eine sofortige KLUDGE-Lösung für ein Problem sein. Wenn Sie einen anderen Ansatz mit unentscheidbaren Sicherheitseigenschaften verwenden möchten, fahren Sie fort. Hier ist eine andere Möglichkeit, das Thema zu lernen: http://www.object-oriented-security.org/ – user429921

-1

IMHO das ist eine wirklich schlechte Design-Entscheidung. Wir haben eine Drittanwendung in unserem Unternehmen, die genau so gestaltet ist.

Damit das Programm ordnungsgemäß ausgeführt werden kann, muss es vollständig für diesen Ordner freigegeben werden. In diesem Fall war das Schlimmste, dass das Programm die verdammte DATENBANK im selben freigegebenen Ordner hatte (ja, ich war auch schockiert, als ich das herausfand) !!! Dauerte nicht zu lange, bis jemand jede Datei löschte, die nicht aus diesem Ordner verwendet wurde, einschließlich der Datenbank natürlich :)

Ich empfehle wirklich einen Client-Server-Ansatz, auch wenn Sie einen Smart kaufen/bauen müssen Installer mit Auto-Update-Funktionen zur Überwindung von Bereitstellungsproblemen.

+1

Vollständige Freigabe ist nicht erforderlich, um eine Exe von einem Netzlaufwerk in der Windows-Umgebung auszuführen. Selbst wenn die Exe Daten in das Verzeichnis schreiben muss, in dem sie sich befindet, werden nur Read/Execute-Berechtigungen benötigt, um die exe auszuführen. Ein schlechtes Datenbank-/Dateizugriffsdesign ist kein Grund, die Methode insgesamt zu beschuldigen, aber möglicherweise ein Grund, andere Optionen in Betracht zu ziehen, um mögliche Anwendungsdesign- oder Implementierungsfehler zu begrenzen. – userx

+0

Hmm ... Wenn ich eine freigegebene EXE-Datei von meinem Computer ausführe, wird die EXE-Datei nicht mit meinen Benutzerberechtigungen in meinem Computerspeicher/Betriebssystem ausgeführt? Mit der Lese- und Ausführungsberechtigung ist es vergleichbar mit dem Ausführen einer Datei von einer CD-ROM, und wir alle wissen, dass diese Programme im Nur-Lese-Modus laufen. Wenn die .exe Lese-/Ausführungsberechtigungen hat, wie kann sie in einen Ordner schreiben, in dem sie keine Schreibberechtigung hat? Bitte erläutern Sie es klarer oder verweisen Sie auf einige Dokumente, wenn Sie etwas anderes wissen. Vielen Dank! – Bogdan

+0

Nur weil die ausführbare Datei schreibgeschützt ist, bedeutet das nicht, dass die ausführbare Datei nicht in andere Verzeichnisse schreiben kann. Die meisten Programme stellen sich selbst für Programmdateien bereit, was für Nicht-Administratoren eigentlich nur ein schreibgeschützter Speicherort eines Computers ist. Temporäre Dateien, gespeicherte Dokumente usw. werden alle in Ihrem Benutzerordner für Eigene Dateien, Desktop, Anwendungsdaten (AppData) usw. gespeichert, wo ein Benutzer voll (oder zumindest Schreibberechtigung) hat. Wenn Sie Ihren Ordner "Eigene Dateien" löschen, werden keine anderen gelöscht! Wenn Sie eine bestimmte Frage haben, ist dies stackoverflow schließlich, posten Sie eine neue Frage :) – userx

4

Die EXE ist eine Sache, aber Sie müssen auch alle DLLs und andere freigegebene Ressourcen berücksichtigen, die mit der App verknüpft sein können.

Einige DLLs können mit der EXE geliefert werden - Sie müssten diese auf dem Remote-Laufwerk mit der EXE, die zusätzlichen Netzwerkverkehr verursachen würde, wenn sie benötigt werden, um sie zu verwenden.

Andere DLLs können Teil von Windows sein, aber hier können Probleme mit der Versionsverwaltung auftreten, wenn Ihre Arbeitsstationen unterschiedliche Windows-Versionen oder sogar verschiedene Service Packs oder Patches haben, aber alle eine gemeinsame Version der App ausführen.

Und was ist mit Lizenzierung? Ermöglicht die Lizenz der App es tatsächlich, sie auf einem Netzlaufwerk zu installieren - viele Softwareunternehmen sind sehr spezifisch in dieser Hinsicht, also müssen Sie wirklich vorsichtig sein, wenn Sie nicht erwischt werden wollen.

Kurz gesagt, es klingt nach einer guten Idee, um einen schnellen Gewinn für Ihr Deployment Management zu erzielen, aber es verursacht wahrscheinlich weit mehr Probleme, als es löst.

Wenn Sie wirklich diesen Weg gehen wollen, sollten Sie Alternativen wie Remote-Desktop (zB Citrix oder Terminal Server) oder etwas Ähnliches in Erwägung ziehen - es gibt viel bessere Möglichkeiten, Ihre Ziele zu erreichen, als nur alles in einem Netzwerk anzubringen Fahrt.

+0

wäre eine mögliche Netzwerkimplementierung nicht leichter als mit Citrix und Terminal? Nehmen wir an, Sie haben eine EXE mit allen erforderlichen gemeinsamen Bibliotheken und arbeiten mit verschiedenen Windows-Versionen. Es speichert die Konfigurationsdateien lokal oder verwendet nur eine mitgelieferte Konfigurationsdatei. Ich denke, es klingt nach einer realisierbaren Option. –

0

Ich führe eine App des Verkäufers so bei der Arbeit. Sie haben nicht dafür entworfen, aber es funktioniert ohne ein Problem. Ich habe alle Shortcuts, die auf den UNC-Pfad zeigen. Diese spezielle App verwendet keine Dateien im exe-Verzeichnis, so dass das Sperren von Dateien kein Problem darstellt. Es ist auch an SQL Server für die Daten angeschlossen, so dass der Datenspeicher ebenfalls kein Problem darstellt. (Wäre ein großes Problem, wenn die App eine lokale SQLite, Access oder eine andere dateibasierte Datenbank verwendet).

Wenn es sich bei Ihrer App um eine .Net-App handelt, funktioniert dies NICHT ohne größere Änderungen an den Sicherheitseinstellungen der einzelnen Computer Das ist wahrscheinlich eine schlechte Idee. Wenn Sie über eine .Net-App sprechen, sollten Sie ClickOnce verwenden. Ich benutze es auch für ein paar Apps bei der Arbeit, und es ist großartig und einfach zu bedienen.

Das Problem ist, gibt es keine endgültige Antwort auf Ihre Frage, nur eine Reihe von "es hängt" Qualifikationen. Die großen Probleme, AFAIK, verwenden lokale Dateien für die Datenspeicherung, seien es Textdateien oder Datenbanken. Es ist großartig für Updates, weshalb die oben erwähnte App so läuft.

0

Dies ist perfekt machbar. Stellen Sie sicher, dass beim Kompilieren das Flag "Von CD-ROM ausführen" (ich denke?) In den Visual Studio-Einstellungen gesetzt ist - dies verhindert, dass das Bild direkt von der Binärdatei gesichert wird. Sie können es also aktualisieren, während andere es ausführen.Ich bin im Moment nicht Windows, also kann ich nicht überprüfen, aber Sie können dieses Flag auch für DLLs setzen.

Ein Problem damit ist, dass, wenn Ihr Programm sich mit Dateien verbindet, wenn das Netzwerk sich ändert und Computer umbenannt werden, jeder PC beginnt, wie ein Hund zu laufen. Explorer hat eine Tendenz, diese Dinge zu lustigen Zeiten abzufragen.

Ein anderes ernsthafteres Problem ist, dass wenn jemand versehentlich eine kaputte Version einsetzt, es nicht nur die Early Adopters sind, die gestopft werden!

Für ein leichtes Leben, persönlich empfehle ich XCOPY Bereitstellung ...

0

Für .NET-Anwendungen, wir BadImageFormatException beobachtet haben, die wir zu glauben, sind gekommen, um aus Netzwerk Glitches (oder Computer-Netzwerk-Konnektivität in entscheidenden Momenten zu verlieren, zum Beispiel mit WIFI) beim Lesen der EXE- oder DLL-Dateien.

Verwandte Themen