正如 Roddy 所建议的,我认为参数切换是唯一可靠的解决方案。但是请注意,如果用户创建自己的快捷方式,这可能不适合您的需求。
即,如果用户在命令行中创建了一个包含一些“文档”的快捷方式,您是否希望将其视为命令行调用或“双击”。我的猜测是后者。
如果是前者,那么您可以在此处停止阅读。:)
但如果是后者,那么您可能需要做更多的工作才能(更)可靠地获得您想要的行为......
这将涉及使用命令行开关来指示命令行启动,而不是双击启动,因为有多种“有效”双击的方法,但只有一种方法可以从命令行运行某些东西 - 即使用命令行!(顺便说一下,我认为 Start Menu -> Run... 是命令行启动。ymmv)
所以,如果是我,我会为应用程序创建一个命令行特定的启动器。命令行启动器实际上是一段非常简单的代码,它采用给出的命令行并简单地附加一个附加参数,然后调用实际的应用程序可执行文件:
例如
myapp 参数 1 参数 2
它只是有效地调用 ShellExecute:
myappgui 参数 1 参数 2 / cmd
我自己不会太关心有两个可执行文件,因为用户在通过 GUI 调用它时不太关心代表你的“真实”应用程序的 exe 的实际名称,因为当然 GUI 调用不涉及知道,或需要知道名称。您的文件类型关联和快捷方式等都直接指向“真实” myappgui.exe,而不是myapp.exe
您的命令行参考只是指示用户使用myapp.exe从命令行调用您的应用程序。
在应用程序中,如果它找到命令行开关,则它知道它是通过命令行启动器应用程序启动的,否则它必须是双击/GUI启动。
就您的大多数用户而言,他们甚至可能永远不需要知道其中涉及两个 exe。无论如何,您必须接受如果/当用户发现您的技术(无论您选择哪种方式)时,他们可以通过制造命令行来实现他们想要的任何目的来欺骗它。
如果这对您很重要,那么命令行启动器方法可能会降低他们发现该机制的可能性 - 知道有两个可执行文件是不够的 - 他们还需要知道您的命令行的命令行开关启动器添加 - 如果他们只是直接从命令行使用myappgui.exe,而不使用命令行启动器myapp.exe,那么它仍然会像从 GUI 启动一样响应!
另一方面,使用开关来指示GUI 启动需要将所需的开关置于“公共视图”上。