从app重启Dock

时间:2015-07-14 20:49:36

标签: macos swift applescript nstask

我有一个需要重启Dock应用程序的应用程序。我用Apple Script试过这个:

var errorDict: NSDictionary? = nil
let appleScript = NSAppleScript(source: "tell application \"Dock\" to quit")
var error = appleScript?.executeAndReturnError(&errorDict)

if let errorDict = errorDict {
    println("An error occured: \(errorDict)")
}

...和NSTask

let task = NSTask()
task.launchPath = "/usr/bin/killall"
task.arguments = ["Dock"]
task.launch()

...和另一个NSTask

func restartFinder () {
    let task = NSTask()
    task.launchPath = "/bin/bash"
    task.arguments = ["killall Dock"]
    task.launch()
}

但是,似乎我的应用程序不允许重新启动它。我想将我的应用程序发布到AppStore,但是如何重新启动Dock?

使用Apple Script时出错:

An error occured: {
    NSAppleScriptErrorAppName = Dock;
    NSAppleScriptErrorBriefMessage = "Application isn\U2019t running.";
    NSAppleScriptErrorMessage = "Dock got an error: Application isn\U2019t running.";
    NSAppleScriptErrorNumber = "-600";
    NSAppleScriptErrorRange = "NSRange: {27, 4}";
}

使用NSTask时出错:

killall: warning: kill -TERM 255: Operation not permitted

更新
我也用STPrivilegedTask试了一下,这对我也没用。我也没有得到验证窗口。

1 个答案:

答案 0 :(得分:1)

我会尝试使用Applescript,但是喜欢这样:

var errorDict: NSDictionary? = nil
let appleScript = NSAppleScript(source: "do shell script \"killall Dock\" with administrator " +
"privileges")
var error = appleScript?.executeAndReturnError(&errorDict)

if let errorDict = errorDict {
    println("An error occured: \(errorDict)")
}

这样,它以管理员权限执行shell脚本(就像通过终端一样)。问题是因为这是一项通常只由系统或用户完成的任务,它要求您输入管理员密码。