Search code examples
javamacosdmg

Detecting whether an application was launched from a read-only file system on OS X


I want to know whether the user launched our Java-based application from a read-only file system like from a .dmg, so functions like auto-update will be able to show meaningful information instead of aborting with an error. I first thought checking the .app's path would be sufficient (when launched from a .dmg it is something like /Volumes/MyApp 1.2.3/MyApp.app, but this won't work, because the user might have installed the application on a different partition. What other things may I check?


Solution

  • You can also check directly from Java whether a certain path points to something within a read-only directory by querying the FileStore associated with your path:

     File classpathRoot = new File(MyClass.class.getClassLoader().getResource("").getPath());
     /* getPath() actually returns a String instead of a Path object, 
      * so we need to take this little detour */
     Path yourAppPath = classpathRoot.toPath();
     boolean isReadOnly = Files.getFileStore(yourAppPath).isReadOnly();