Ваша "чистота" в лучшем случае кажется искусственной конструкцией. Если вы говорите пользователю создать ярлык в папке запуска, вы уже оставляете след (и, если честно, между «myprog.exe» и «myprog.exe -m» есть небольшая разница) , В этом случае есть несколько более простых подходов, чем автоматическое определение того, откуда вы бежите.
Я бы просто предоставил пункт меню в вашей программе («Установить»), который затем установил бы программное обеспечение в папку с фиксированным диском (в отличие от флэш-диска), включая необходимую запись «Программы» («Пуск», «Все программы», CintaNotes).
В рамках этого процесса (или даже после установки) вы можете разрешить им указать «Начать с Windows», а затем создать ярлык папки запуска для пользователя с параметром командной строки , чтобы ваша программа может сказать, работает ли она таким образом. Нет смысла разрешать «Пуск с Windows», если программа не доступна (то есть на фиксированном диске, а не на флэш-диске).
Вашему пользователю никогда не нужно беспокоиться о создании ярлыков, не говоря уже о параметрах. И это дает вашей программе контроль над тем, как она запускается - в двух режимах: «установлен» (и запуск свернут) или «работает без предварительной установки» (и запуск в обычном режиме).
Что-то вроде поиска каталога исполняемого файла не будет работать просто потому, что элемент папки запуска, запускающий вашу программу, скорее всего, будет ярлыком к нему, поэтому у вас не будет этого пути.
Я думаю, что это классический случай неправильного вопроса. Отвечая на ваш конкретный вопрос, я говорю: нет, невозможно сказать, что вы были запущены из записи папки запуска без каких-либо параметров командной строки. Но раньше я ошибался, просто спросите мою жену :-). Кто-то другой может хорошо знать способ.
Добавление этого и правки, поскольку в комментариях недостаточно места:
Вы спрашиваете:
Что вы думаете о том, чтобы просто отключить опцию «Запуск при запуске Windows», когда программа обнаружит, что она запускается с флэш-накопителя? Я думаю, что есть способ обнаружить это.
Это хорошая идея, поскольку не имеет смысла разрешать автоматический запуск до тех пор, пока она не будет установлена (поскольку флэш-накопитель может отсутствовать). Одна возможность:
1 / При запуске с флэш-памяти вы начинаете с «myprog.exe», поскольку вы просто дважды щелкнули исполняемый файл и запустились в обычном окне. Это дает возможность «Установить на фиксированный диск», но не «Начать с Windows». В рамках процесса установки вы можете разрешить им устанавливать установленную копию на «Пуск с Windows», но не текущую рабочую копию.
2 / Ваша установленная программа может быть настроена для запуска под именем «myprog.exe -i», так как вы создаете элемент в Start / AllPrograms. Это отключит «Установить на фиксированный диск», но позволит вам включить «Начать с Windows». Вы можете выбрать, хотите ли вы, чтобы явный запуск (пользователем) начинался нормально или был свернут (см. (3)).
3 / Ярлык в StartUp может быть «myprog.exe -s» (опять же, вы управляете этим, потому что создали его). Это идентично (2), но начинает сворачиваться (если (2) все равно было свернуто, различий между (2) и (3) нет, и нет причин для разных параметров командной строки).
Таким образом, каждый параметр может иметь различное поведение по вашему усмотрению.