Один из способов распространения нашего приложения (в Windows) - это ZIP-архив. Внутри этого архива находится командный файл, используемый для запуска приложения. Предполагается, что пользователь должен распаковать архив перед запуском нашего приложения, но часто пользователи игнорируют наши инструкции и пытаются запустить приложение, не распаковывая архив. Когда пользователи делают это, приложение не запускается, но для пользователя неясно, что именно послужило причиной сбоя. Мы хотели бы определить из пакетного файла, запускается ли он из архива ZIP, и, если это так, показать пользователю сообщение, напоминающее ему о необходимости сначала распаковать архив.
Однако мне совершенно не ясно, как обнаружить это состояние. Хотя пакетная переменная %cmdcmdline%
содержит команду, которая запустила пакетный файл, похоже, нет способа использовать путь, чтобы надежно определить, указывает ли путь в ZIP-архив. Например, я поместил следующий пакетный файл с именем test.bat в ZIP-архив:
echo %cmdcmdline%
pause
Вывод при запуске из архива был:
cmd /c ""C:\Users\liana\AppData\Local\Temp\Temp1_test.zip\test.bat" "
Теперь кажется, вероятно , что Temp1_test.zip - это ZIP-архив, а не настоящий каталог, но нет никакой гарантии, что это так. Очевидно, что Windows знает, как определить разницу, поэтому должен быть какой-то более надежный способ, чем простая проверка того, что .zip где-то отображается в пути. Но как?