PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie sperrt Word eine Datei gegen Verändern von zwei Benutzern gleichzeitig?



axeljaeger
07-05-2004, 15:01
Wenn ich mit Word eine Datei öffne und von einem anderen PC per Netzwerk ebenfalls die selbe Datei öffne, bekomme ich eine Meldung, dass die Datei gegen Bearbeiten geschützt sei, ich sie aber im Schreibschutzmodus öffnen könne. Mich interessiert jetzt, wie MS dieses Verfahren wohl implementiert haben mag: Ich kann mir vorstellen, dass in die Datei geschrieben wird, dass sie gerade bearbeitet wird und eine weitere Word-Instanz dieses ausliest. Aber was ist, wenn das eine Word abstürzt?

sticky bit
07-05-2004, 16:20
Komische Theorie die Du da hast, aber gut bei Microsoft weiss man ja nie. Ich denke eher das wird halt einfach gelockt.
Im Gegensatz zu deiner in die Datei was schreiben Lösung gibts da nämlich normalerweise ein Time Out, die "Absturz" Problematik wird dadurch dann entschärft und ausserdem ist es applikationsunabhängig...

axeljaeger
07-05-2004, 16:41
Wie kann man denn eine Datei 'locken'?

Zum Thema "applikationsunabhängig": Mir wäre nicht bekannt, dass man überlicherweise mit einer anderen Applikation als Word eine Word Datei gleichzeitig aufmacht. Außerdem: Geht das dann auch über Netzwerk und wie werden da andere Applikationen drüber informiert? Ist die Datei dann einfach read-only?

sticky bit
07-05-2004, 16:59
Man lockt sie in dem man das Betriebssystem oder entsprechende Userland Locking-Facilities freundlich darum fragt. Je nach API / OS / Sprache dann halt so oder so.
Und das ist dann deshalb applikationsunabhängig, weil man das a) in jede Applikation programmieren kann und zwar unter Verwendung ein und des seleben Mechanismus und man eben keine so eben von der Applikation abhängigen Sachen machen muss wie du in deinem ersten Post beschrieben hast. Wenn die Datei dann richtig gelockt ist, dann hat kein anders Proggie mehr Zugriff auf die Datei sofern das ganze über den Kernel gelockt wurde und der einfach keine anderen Deskriptoren mit Schreibrechten mehr her gibt, das ist natürlich Vorraussetzung. In dem Sinne ist sie dann temporär ro wenn auch nicht von den Dateisystemattributen her...
Aber wie gesagt was Microsoft da zusammen schustert? K. A..

axeljaeger
07-05-2004, 17:33
Was mich so ein bißchen wundert: Ich meine, es gäbe eine andere Meldung, wenn eine Word-Datei als read-only in den Dateiattributen markiert ist und wenn sie durch eine andere Instanz gelockt wurde. Offenbar gibt es da programmiertechnisch doch noch einen Unterschied.

UPDATE:
Ich hab es gerade ausprobiert: Eine entbehrbare Worddatei mit Word aufgemacht und dann hinter Words Rücken mit Notepad aufgemacht und drinn rumgefummelt. Die Datei lies sich speichern und lies sich wie erwartet danach nicht mehr mit Word öffnen. Dann macht Windows 2000 das entweder sehr schlecht mit dem Kernellocking oder aber meine erste Theorie ist doch nicht so verkehrt, da der aufmerksame Benutzer merkt, dass Word beim öffnen eine verstecke Datei anlegt, die so ähnlich wie die geöffnete Datei nur mit Tilde am Anfang heist.

sticky bit
08-05-2004, 15:34
Original geschrieben von axeljaeger
Was mich so ein bißchen wundert: Ich meine, es gäbe eine andere Meldung, wenn eine Word-Datei als read-only in den Dateiattributen markiert ist und wenn sie durch eine andere Instanz gelockt wurde. Offenbar gibt es da programmiertechnisch doch noch einen Unterschied.
Sind ja auch zwei paar Stiefel, auch wenn es den seleben Effekt hat die Applikation kann das durchaus mitbekommen (natürlich wieder abhängig von der Umgebung) ob ne Datei von den Attributen her nicht beschreibbar ist oder gelockt ist....


Original geschrieben von axeljaeger
UPDATE:
Ich hab es gerade ausprobiert: Eine entbehrbare Worddatei mit Word aufgemacht und dann hinter Words Rücken mit Notepad aufgemacht und drinn rumgefummelt. Die Datei lies sich speichern und lies sich wie erwartet danach nicht mehr mit Word öffnen. Dann macht Windows 2000 das entweder sehr schlecht mit dem Kernellocking oder aber meine erste Theorie ist doch nicht so verkehrt, da der aufmerksame Benutzer merkt, dass Word beim öffnen eine verstecke Datei anlegt, die so ähnlich wie die geöffnete Datei nur mit Tilde am Anfang heist.
Kann ich hier nicht verifizieren, hab hier kein Windows da und demnach auch kein Word. Aber Du kannst ja einfach mal experimentieren, kopier Deine Word Datei, dann öffne sie und mach ne Kopie von der geöffneten. Dann vergleich sie und versuch herauszufinden welche von den Unterschieden dafür verantwortlich ist in dem Du mit nem Hexeditor wieder in eine Kopie der ursprünglichen die Änderungen vornimmst und guckst wie sich Word verhält wenn Du sie dann öffnen willst.
An der Datei mit der Tilde kann natürlich auch was dran sein, Du kannst die ja mal kopieren, Word schliessen und anschliessend die Kopie wieder neben die eigentliche Datei legen und gucken was dann passiert wenn Du das Original öffnen willst...
Vielleciht geht das mit dem Locking unter Windows aber auch auf Benutzerebene? Also Datei ist dann für alle anderen ausser dem der sie geöffnet hat gelockt und Du kannst sie zwar mit Notepad editieren aber kein anderer? Könnte mir so Halbherzigkeiten bei Microsoft schon vorstellen, aber nichts genaues weiss man halt nicht...

anda_skoa
09-05-2004, 12:42
Original geschrieben von axeljaeger
Mich interessiert jetzt, wie MS dieses Verfahren wohl implementiert haben mag: Ich kann mir vorstellen, dass in die Datei geschrieben wird, dass sie gerade bearbeitet wird und eine weitere Word-Instanz dieses ausliest.

Ich könnte mir vorstellen, dass einfach die open() Funktion prüft, ob schon ein anderer Prozess die Datei geöffnet hat (ähnlich wie lsof das unter Linux anzeigen kann)

Locking ist kompilzierter und braucht man nur, wenn man ansich parallele Zugriffe erlaubt und nur in speziellen Fällen solche unterbinden will.

Bei Windows wird meiner Erinnerung nach immer nur der einfache Zugriff erlaub, auch wenn beide Prozesse ansich nur lesen wollen (oder vielleicht öffnen Windows Programme Dateien immer im ReadWrite Modus)

Ciao,
_

THEReapMan
31-05-2004, 18:46
ich glaube mich zu erinnern, das in dem verzeichniss wo die word-datei liegt einfach ne 0-byte datei mit dem namen der word-datei und paar sonderzeichen davor/dahinter im Arbeitsverzeichniss angelegt wird. wenn das andre word diese welche findet speckert es rum.