如何执行mount_smbfs terminal命令来挂载

时间:2012-12-26 14:02:17

标签: objective-c macos cocoa terminal mount

我在Mac上使用GUI安装了硬盘。

但是,我想使用终端命令安装硬盘。

如何从Objective-C Cocoa应用程序执行终端命令mount_smbfs

NSTask* task = [[NSTask alloc] init];
[task setLaunchPath:@"/sbin/mount_smbfs"];
[task setArguments:[NSArray arrayWithObjects:@"//user:50000@smb://192.168.2.1/Share",@"Volumes/C$/upload", nil]];
[task launch];

这是我用我的代码编辑的,你能帮助我吗?

2 个答案:

答案 0 :(得分:3)

您可以将调用包裹在NSTask中的mount_smbfs,以便从您的Obj-C程序中执行它:

NSTask* task = [NSTask new];
[task setLaunchPath:@"/sbin/mount_smbfs"];
[task setArguments:[NSArray arrayWithObjects:@"//myUser:myPassword@SERVER/share", @"mountPath", nil]];

在setArguments中,您提供了一个至少包含2个元素的数组:共享的路径和挂载点。

同时检查man mount_smbfs以获取更多参数选项。

答案 1 :(得分:0)

使用AppleScript执行此操作更简单:

- (BOOL) mount {
    NSAppleScript *script = [[NSAppleScript alloc] initWithSource:
                             @"tell application \"Finder\"\n"
                             "  mount volume \"smb://server.domain/SomeMountPoint\"\n"
                             "end tell"];
    if (!script) {
        NSLog(@"Error creating AppleScript object");
        return NO;
    }

    NSDictionary *errorMessage = nil;
    NSAppleEventDescriptor *result = [script executeAndReturnError:&errorMessage];
    return (BOOL)result;
}

有一些限制:

  1. 您必须在主线程上使用NSAppleScript
  2. 当Finder尝试装入卷时,您的应用程序不会响应任何事件。
  3. 如果安装失败,您无法控制Finder如何显示错误消息。