【问题标题】:my system refuses to shut down/restart with NSAppleScript class我的系统拒绝使用 NSAppleScript 类关闭/重新启动
【发布时间】:2012-02-07 15:46:22
【问题描述】:

我在 10.5 上使用 CFPlugin 进行上下文菜单和图标覆盖(与 scplugin 相同)。对于我的应用程序和 finder 之间的通信,我使用的是distributed object。在Contextual menu items 文件夹中安装我的插件后,我的系统拒绝重新启动/关闭/注销。在活动监视器中,我无法退出 finder,只有强制退出才能为 finder 工作。 在控制台上,我正在使用 10.5.8

ERROR | -[ApplicationManager(AppleEventHandling) _tryQuitAllForRequestor:replyEvent:] | _tryQuitAllForRequestor - _vproc_set_global_on_demand returned error -1805620379  

Finder 和我的应用程序之间没有通信,系统重新启动/关闭/注销工作正常。
10.5.4

loginwindow[41]: ERROR | WSActivateApp | SetFrontProcess({0, 7980956}) returned error -600. Unable to activate process.

loginwindow[41]: ERROR | -[ApplicationManager(AppleEventHandling) _tryQuitAllForRequestor:replyEvent:] | _tryQuitAllForRequestor - _vproc_set_global_on_demand returned error -1780878507

谁能帮帮我?

编辑

我的问题解决了。我使用NSAppleScript 来执行苹果脚本。现在我正在使用 NSTask 并且我的系统重新启动/关闭/注销工作正常。谁能解释一下这个原因?

【问题讨论】:

  • 我注意到,当您从 Finder 以外的应用程序调用时,您返回“noErr”。当你被 Finder 调用时,你会返回什么?
  • 如果应用程序是 finder ,我正在执行我的代码。
  • 然后返回什么?
  • 它将返回 OSStatus、error 或 noErr。
  • 没有通讯模块,我的插件工作正常。

标签: objective-c applescript macos-carbon core-foundation finder


【解决方案1】:

NSAppleScript 只能从主线程运行,所以主线程在运行时会被阻塞。

不太确定该消息的根本原因是什么,但我假设找不到脚本或无法正常运行,然后主线程被阻塞或超时,并且您的所有关闭序列都卡住了。

另一方面,NSTask 是正确的多线程,因此不会阻塞序列,并且您的计算机将正确关闭。

以下是一些相关的链接:

【讨论】:

  • 我从辅助线程运行 Apple 脚本。并且一次只有一个线程。
  • From (NSAppleScript 不在主线程中)[cocoabuilder.com/archive/cocoa/… '所有 NSAppleScript 实例似乎都使用相同的 ComponentInstance 并且 ComponentInstance 也可能被主线程使用,以将应用程序设置为AppleScriptable 也许。每个线程都必须有自己的 AppleScript ComponentInstance,理论上你可以有多个线程,每个线程都在那里运行自己的 AppleScript' 我假设 finder 没有使用 NSApplescript 类。
【解决方案2】:

我的问题解决了。我使用NSAppleScript 执行苹果脚本。现在我正在使用NSTask 并且我的系统重新启动/关闭/注销工作正常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多