使用NetFSMountURLSync更改Finder显示的共享名称

时间:2016-04-01 19:33:53

标签: objective-c cocoa netfs

我正在尝试编写一个命令行应用程序来连接到另一台Mac上的共享驱动器。下面的代码连接了共享,但我似乎无法找到一种方法来操作Finder左侧面板的“共享”部分中显示的主机名。假设远程计算机的主机名是computer,我希望它使用此代码显示computer而不是computer.local。需要使用MDNS主机名进行连接。我已尝试设置密钥kNetFSServerDisplayNameKeykNetFSDisplayNameKey,但它们似乎不会影响Finder中显示的内容。

代码:

NSString *target = @"smb://computer.local/share";
NSString *mountPath = @"/Volumes/share";
CFStringRef servername = (CFStringRef) @"computer";

CFMutableDictionaryRef mount_options = CFDictionaryCreateMutable( NULL, 0, NULL, NULL);
CFDictionarySetValue(mount_options, kNetFSSoftMountKey, kCFBooleanTrue);
CFDictionarySetValue(mount_options, kNetFSMountAtMountDirKey, kCFBooleanTrue);
CFDictionarySetValue(mount_options, kNetFSServerDisplayNameKey, servername);
CFDictionarySetValue(mount_options, kNetFSDisplayNameKey, servername);
CFArrayRef mountpoints = NULL;

CFStringRef login = (__bridge CFStringRef) @"login";
CFStringRef pass = (__bridge CFStringRef) @"pass";

OSStatus err = NetFSMountURLSync(
                                 (__bridge CFURLRef) [NSURL URLWithString: target], // URL to mount, e.g. nfs://server/path
                                 (__bridge CFURLRef) [NSURL URLWithString: mountPath],  // Path for the mountpoint
                                 login,                                             // Auth user name (overrides URL)
                                 pass,                                             // Auth password (overrides URL)
                                 NULL,                                             // Options for session open (see below)
                                 mount_options,                                    // Options for mounting (see below)
                                 &mountpoints);                                    // Array of mountpoints

1 个答案:

答案 0 :(得分:0)

我通过使用Finder安装后检查卷上的信息来解决这个问题。通过Finder挂载共享时,卷的“获取信息”中的“服务器”字段为smb://computer._smb._tcp.local/share。在上面的代码中使用此网址而不是smb://computer.local/share会导致computer显示在查找程序的左侧“共享”面板中,而不是computer.local