(MACOSX) - 了解安装的设备是否是从DMG安装的

时间:2010-04-12 10:50:33

标签: cocoa macos macos-carbon

使用DiskArbitration或FSGetVolumeInfo / GetVolumeParms找不到该信息......

我知道hdiutil使用一个名为DiskImages框架的私有框架,但是每次我想要这个信息时我都不想运行外部实用工具...那为什么API?

1 个答案:

答案 0 :(得分:1)

2015年7月更新

此更新由Stan James'new question提示。

您可以使用DiskArbitration框架获取此信息。要使用下面的示例,您必须链接到#import

#import <DiskArbitration/DiskArbitration.h>

...

- (BOOL)isDMGVolumeAtURL:(NSURL *)url
{

  BOOL isDMG = NO;

  if (url.isFileURL) {

    DASessionRef session = DASessionCreate(kCFAllocatorDefault);
    if (session != nil) {

      DADiskRef disk = DADiskCreateFromVolumePath(kCFAllocatorDefault, session, (__bridge CFURLRef)url);
      if (disk != nil) {

        NSDictionary * desc = CFBridgingRelease(DADiskCopyDescription(disk));
        NSString * model = desc[(NSString *)kDADiskDescriptionDeviceModelKey];
        isDMG = ([model isEqualToString:@"Disk Image"]);

        CFRelease(disk);

      }

      CFRelease(session);

    }

  }

  return isDMG;

}

用法:

BOOL isDMG = [someObject isDMGVolumeAtURL:[NSURL fileURLWithPath:@"/Volumes/Some Volume"]];

我希望这会有所帮助。