Ermitteln, ob eine Anwendung von einem schreibgeschützten Dateisystem unter OS X gestartet wurde

8

Ich möchte wissen, ob der Benutzer unsere Java-basierte Anwendung von einem schreibgeschützten Dateisystem wie einem .dmg gestartet hat, so dass Funktionen wie automatische Aktualisierung sinnvolle Informationen anzeigen können, anstatt mit einem Fehler abzubrechen. Ich dachte zuerst, es wäre ausreichend, den Pfad von .app zu prüfen (wenn er von einer .dmg gestartet wird, ist das etwas wie /Volumes/MyApp 1.2.3/MyApp.app , aber das funktioniert nicht, weil der Benutzer die Anwendung auf einer anderen Partition installiert hat Ich überprüfe?

    
Thomas S. 25.12.2014, 10:04
quelle

3 Antworten

1

Sie können auch direkt von Java aus überprüfen, ob ein bestimmter Pfad auf etwas in einem schreibgeschützten Verzeichnis verweist, indem Sie die mit Ihrem Pfad verknüpfte FileStore abfragen:

%Vor%     
Jan Gassen 23.01.2015, 12:26
quelle
5

Sie können -[NSURL getResourceValue:forKey:error:] mit dem Schlüssel NSURLVolumeIsReadOnlyKey verwenden. Sie würden dies auf die App-Paket-URL anwenden, die von [[NSBundle mainBundle] bundleURL] zurückgegeben wird. Also:

%Vor%     
Ken Thomases 25.12.2014 12:07
quelle
3

Wenn OSX POSIX-kompatibel ist, können Sie statvfs() oder fstatvfs() verwenden, um festzustellen, ob das Dateisystem R / O eingehängt ist. struct statvfs field f_flag sollte ST_RDONLY für R / O-Dateisystem gesetzt haben .

Wie in den Kommentaren darauf hingewiesen wurde, prüfen Sie, ob diese Informationen vom Betriebssystem korrekt bereitgestellt werden.

JNA und diese Frage kann für Java nützlich sein.

Einige weitere Ideen, die hier nützlich sein könnten hier ( access() , open() , utime() ) .

OS X spezifische statfs() können ebenfalls verwendet werden, aber diese Funktion ist nicht portierbar (Linux und * BSD haben etwas anders statfs() Funktionen).

    
kestasx 25.12.2014 10:32
quelle

Tags und Links