objective-c - 是否可以设置 NSTask 拥有的窗口前面和按键?

标签 objective-c cocoa nstask

我正在开发一款 Mac 应用程序,该应用程序可以选择提供安装一些 Apple 软件包格式的额外软件的功能。此软件包需要提升的(root)权限才能安装,而不是使用帮助工具或 AuthorizationExecuteWithPrivileges() ,我想使用 NSTask 来调用 /usr/bin/open 会更容易甚至/System/Library/CoreServices/Installer.app/Contents/MacOS/Installer与包的路径并让它处理用户授权。

所以,它工作得很好,但安装程序窗口不会出现在堆栈的前面,也不是关键。我可以orderOut启动任务之前的调用窗口,这有助于排序,但关键实际上是使其成为关键。

我应该继续实现 Apple 的 BetterAuthorizationSample 因为我可能在将来的某个时候必须使用它,并且因为尝试过它会让我成为一个更好的人?

最佳答案

有两个变量决定哪个窗口是关键。其中之一是应用程序内的设置,用于确定哪个窗口处于焦点状态,另一个是哪个应用程序处于事件状态。在我们自己的应用程序中隐藏窗口将使安装程序可见,但除非您激活安装程序应用程序,否则它不会成为关键。您有几种选择来执行此操作。

首先,您可以使用以下方法停用您的应用程序:

[[NSApplication sharedApplication] deactivate];

接下来,您可以找到安装程序的NSRunningApplication并激活它:

NSArray *apps = [[NSWorkspace sharedWorkspace] runningApplications];
NSRunningApplication *app = // find installer
[app activateWithOptions:0];

但就你而言,我建议使用 NSWorkspace为您打开安装程序,而不是通过 NSTask 启动它。 NSWorkspace 将自动停用您的应用程序,因此您不必这样做,您会收到有关文件是否成功打开的反馈,并且会自动选择用于打开该文件的应用程序。

BOOL success = [[NSWorkspace sharedWorkspace] openFile:@"path/to/file.pkg"];

关于objective-c - 是否可以设置 NSTask 拥有的窗口前面和按键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9026500/

相关文章:

iphone - 我如何从两个图像 : picture and border 创建一个 UIImage

objective-c - 解读 Mac OS X 崩溃报告

ios - 使用iOS中的AFNetworking,确定故障响应是服务器错误还是连接错误的最佳方法是什么?

cocoa - 为什么 Swift 中的这段代码会在 NSTableView 上产生一个空行?

windows - 是否可以在 C++ 应用程序中嵌入 TTF 或 OTF 字体文件?

python - 从进程的标准输出读取时,NSTask 需要刷新,终端不需要

objective-c - 使用 NSTask 运行用户定义的命令

objective-c - 无法将对象添加到 NSMutableArray 数组

iphone - KVO 和 NSNotifications 的性能速度?

iphone - NSTask实时监控输出