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