如何从 Dock 中的程序快捷方式中检索命令行参数?

Posted

技术标签:

【中文标题】如何从 Dock 中的程序快捷方式中检索命令行参数?【英文标题】:How can I retrieve the command line arguments from a program shortcut in the dock? 【发布时间】:2013-03-07 10:18:12 【问题描述】:

我的问题与this earlier one 完全相反。我正在开发一个开源应用程序,它以 2 种形式发布,预编译的二进制文件和源代码。

我安装了预编译的二进制文件,它运行良好,在 Dock 中有一个漂亮的小图标。

我成功编译了源代码,但在启动时出现运行时错误。经过调查,我怀疑这个应用程序需要命令行选项才能正确运行。

所以我的问题是:如果我的假设是正确的并且工作版本实际上正在定义命令行参数,我如何从打包的应用程序中检索 CL 参数

如果有什么不同的话,我所说的应用程序是 Cyberduck,我运行的是 OS X 版本 10.8.2

【问题讨论】:

我假设您来自 Windows - Dock 图标 n OSK 不是快捷方式,也没有额外的命令行参数,它们就像您在 finder 中单击应用程序或使用 open 运行一样运行从命令行 你得到什么运行时错误? “[启动器错误] 字典中没有运行时键”。如果您在代码中查找此错误,您可以清楚地看到它来自给 main 函数的错误参数。 @mark:不管怎样,我来自 Linux 背景,很久没有接触过 Windows。 【参考方案1】:

问题不在于命令行。来自代码here

// Get an instance of the non-localized keys.
CFDictionaryRef bundleInfoDict = CFBundleGetInfoDictionary(mainBundleRef);  
if(NULL == bundleInfoDict) 
    fprintf(stderr, "[Launcher Error] No info dictionary.\n");
    exit(-1);

其中 mainBundleRef 指的是 .app 包。

问题是应用程序内的 Info.plist (/Applications/Cyber​​duck.app/Contents/Info.plist) 中没有正常的键。它已以某种方式损坏。代码存储库中的那个乍一看还可以。有关结构的信息,我会查看 Apple 开发 document。

最简单的解决方法是重新下载并安装应用程序。

【讨论】:

感谢您花时间查看代码,尽管这根本不是我的问题的意图。我正在寻找的答案确实是查看Info.plist 文件。我找到了我需要的东西;这与提出的问题无关,所以我会mark it here,以防有人偶然发现此页面。

以上是关于如何从 Dock 中的程序快捷方式中检索命令行参数?的主要内容,如果未能解决你的问题,请参考以下文章

mac版office。命令式打开

如何避免重定向输出符号“>”被当作命令行参数(可能在快捷方式中)

everything 如何用作快速启动工具

CAD中的“返回”和“前进”命令的快捷方式分别是“undo”和“redo”

如何从 Bash 中的文件调用多个命令行参数?

Mac OSX 快捷键&命令行