如何使用特定应用程序包打开文件?

问题描述 投票:0回答:1

我用 Qt 为 macOS 和 Windows 编写了一个应用程序。现在我们希望使用自定义协议从浏览器与该应用程序进行通信。由于似乎不可能将其添加到 Qt 中,因此我尝试构建一个 Cocoa 辅助应用程序,该应用程序仅使用自定义协议从 macOS 接收浏览器中创建的消息。到目前为止,这很有效,而且很简单。

但是我无法让它在我的(单独的 Qt)应用程序中打开文档。

试用1:

void launchApplicationBundleWithArguments(NSString *bundleIdentifier, NSString *executablePath, NSArray<NSString *> *arguments) 
{
    NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
    NSURL *url = [workspace URLForApplicationWithBundleIdentifier:bundleIdentifier];
    
    if (url) {
        NSError *error = nil;
        
        NSDictionary *configuration = @{NSWorkspaceLaunchConfigurationArguments: launchArguments};
      
        if (![workspace launchApplicationAtURL:url options:NSWorkspaceLaunchDefault configuration:configuration error:&error]) {
            NSLog(@"Error launching application: %@", error);
        }   
    } else {
        NSLog(@"Application bundle with identifier %@ not found", bundleIdentifier);
    }
}

这将启动我的应用程序,但不会将文件的路径(存储在参数中)发送到我的主应用程序的命令行。没有报错。

试用2:

NSWorkspaceOpenConfiguration* configuration = [NSWorkspaceOpenConfiguration new];
[configuration setArguments: launchArguments];
 [configuration setPromptsUserIfNeeded: YES];
 [workspace openApplicationAtURL: [NSURL fileURLWithPath: executablePath] configuration: configuration completionHandler:^(NSRunningApplication* app, NSError* error) {
   if (error) {
     NSLog(@"Failed to run the app: %@", error.localizedDescription);
   }
 }];

此操作失败,并显示一个消息框,提示我的帮助应用程序没有足够的访问权限来启动其他应用程序。

这怎么办?

objective-c macos qt cocoa
1个回答
0
投票

根据

arguments
类的
NSWorkspaceOpenConfiguration
属性的文档,沙盒应用程序无法将参数传递给它正在启动的另一个应用程序。因此,请确保您的帮助应用程序没有被沙箱化。

© www.soinside.com 2019 - 2024. All rights reserved.