如何从 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/Cyberduck.app/Contents/Info.plist) 中没有正常的键。它已以某种方式损坏。代码存储库中的那个乍一看还可以。有关结构的信息,我会查看 Apple 开发 document。
最简单的解决方法是重新下载并安装应用程序。
【讨论】:
感谢您花时间查看代码,尽管这根本不是我的问题的意图。我正在寻找的答案确实是查看Info.plist
文件。我找到了我需要的东西;这与提出的问题无关,所以我会mark it here,以防有人偶然发现此页面。以上是关于如何从 Dock 中的程序快捷方式中检索命令行参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何避免重定向输出符号“>”被当作命令行参数(可能在快捷方式中)