您的“清洁”似乎充其量只是一种人为的构造。如果您告诉用户在启动文件夹中创建快捷方式,那么您已经留下了足迹(老实说,“myprog.exe”和“myprog.exe -m”之间几乎没有区别) .在这种情况下,有一些比自动尝试检测您从哪里奔跑更简单的方法。
我只需在您的程序中提供一个菜单选项(“安装”),然后将软件安装到固定磁盘位置(而不是闪存驱动器),包括必要的程序条目(开始、所有程序、 CintaNotes)。
作为该过程的一部分(甚至在安装之后),您可以让他们指定“从 Windows 启动”,然后您为用户创建启动文件夹快捷方式使用命令行选项所以你的程序可以判断它是否以这种方式运行。除非程序可用(即在固定磁盘上,而不是闪存驱动器上),否则允许“从 Windows 启动”是没有意义的。
您的用户根本不必担心创建快捷方式,更不用说带有参数的快捷方式了。这使您的程序可以控制它的运行方式 - 两种模式,“已安装”(并开始最小化)或“运行而不先安装”(并正常启动)。
诸如查找可执行文件的目录之类的操作不会起作用,因为启动程序的启动文件夹项很可能是它的快捷方式,因此您将没有该路径。
我认为这是一个典型的问错问题的案例。在回答您的具体问题时,我说:不,如果没有一些命令行参数,就无法判断您是从启动文件夹条目启动的。但是,我以前错了,请问我的妻子 :-)。其他人可能知道方法。
添加一个编辑,因为 cmets 不允许足够的空间:
你问:
当程序检测到它正在从闪存驱动器运行时,您如何看待仅禁用“Windows 启动时启动”选项?我想有办法检测到这一点。
这是个好主意,因为在安装之前允许自动运行是没有意义的(因为闪存驱动器可能不存在)。一种可能:
1/ 从 Flash 运行,您从“myprog.exe”开始,因为您只需双击可执行文件并在普通窗口中运行。这提供了“安装到固定磁盘”选项,但没有“从 Windows 启动”选项。作为安装过程的一部分,您可以允许他们将安装的副本设置为“从 Windows 开始”,而不是当前运行的副本。
2/ 您已安装的程序可以设置为以“myprog.exe -i”运行,因为您在 Start/AllPrograms 中创建了该项目。这将禁用“安装到固定磁盘”,但允许您切换“从 Windows 启动”。您可以选择是否希望显式运行(由用户)正常启动或最小化(参见 (3))。
3/ StartUp 中的快捷方式可以是“myprog.exe -s”(同样,您可以控制它,因为它是您创建的)。这与 (2) 相同,但开始最小化(如果 (2) 无论如何都开始最小化,则 (2) 和 (3) 之间没有区别,也没有理由使用不同的命令行选项)。
这样,每个选项都可以有你认为合适的不同行为。