Перейти к содержанию
Fire Monkey от А до Я
  • 0

TZipFile на MACOS - программный unzip, чтобы приложение запускалось


notricky

Вопрос

Собственно зазипованый файл качается, разархивируется и все файлы помещаются в папку.

Ну а дальше приложение не запускается, хотя:

 - Настройки безопасности настроены на установку из любых мест
 - Встроенный архиватор разархивирует в папку и "из-под" него приложение запускается (до настроек безопасности просто выдавало ошибку "неизвестный автор" и "у вас настроено только на аппстор или известных авторов").
 - Разумеется при деплое приложения работают. Если их просто скопировать на флешку и потом закопировать обратно - тоже работают.

Следовательно проблема при разархивировании программно. Что-то нужно добавить. Есть понимание что именно? 

Сам нетривиальный код:

var z: TZipFile;
begin
  try
    {$IFDEF MSWINDOWS}
     RenameFile(ParamStr(0),ExtractFileName(ParamStr(0)) + '.old');
     Application.ProcessMessages;
    {$ENDIF}
    SetLength(Result, 1);
    Result[0] := '';
    z := TZipFile.Create;
    z.Open(ZipFile, zmRead);
    z.ExtractAll(ExtractTo);
    Result := z.FileNames;
  finally
    z.Close;
    z.Free;
  end;
end;

В архив кладу:

 - .app взятый с мака (а по другому никак)
 - .entitlements
 - .DS_Store 

В надобности последнего я сильно сомневаюсь.

 

Изменено пользователем notricky
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Update: в терминале Мака

unzip -uo zipfile -d wantedDirectory

Дает такой же эффект, что программное разархирирование. То есть не запускается приложение. Вообще без никаких уведомлений.

Изменено пользователем notricky
Ссылка на комментарий
  • 0
3 часа назад, notricky сказал:

Собственно зазипованый файл качается, разархивируется и все файлы помещаются в папку.

Ну а дальше приложение не запускается, хотя:

 - Настройки безопасности настроены на установку из любых мест
 - Встроенный архиватор разархивирует в папку и "из-под" него приложение запускается (до настроек безопасности просто выдавало ошибку "неизвестный автор" и "у вас настроено только на аппстор или известных авторов").
 - Разумеется при деплое приложения работают. Если их просто скопировать на флешку и потом закопировать обратно - тоже работают.

Следовательно проблема при разархивировании программно. Что-то нужно добавить. Есть понимание что именно? 

Сам нетривиальный код:


var z: TZipFile;
begin
  try
    {$IFDEF MSWINDOWS}
     RenameFile(ParamStr(0),ExtractFileName(ParamStr(0)) + '.old');
     Application.ProcessMessages;
    {$ENDIF}
    SetLength(Result, 1);
    Result[0] := '';
    z := TZipFile.Create;
    z.Open(ZipFile, zmRead);
    z.ExtractAll(ExtractTo);
    Result := z.FileNames;
  finally
    z.Close;
    z.Free;
  end;
end;

В архив кладу:

 - .app взятый с мака (а по другому никак)
 - .entitlements
 - .DS_Store 

В надобности последнего я сильно сомневаюсь.

 

Ты пытаешься свою же созданную программу для мак ос, заархивировать, а своей же созданной разархивировать и запустить? Или я что то не понял? Если как я написал, то ничего не получится.

Ссылка на комментарий
  • 0
1 час назад, Vitaldj сказал:

Ты пытаешься свою же созданную программу для мак ос, заархивировать, а своей же созданной разархивировать и запустить? Или я что то не понял? Если как я написал, то ничего не получится.

Спасибо, Кэп. Я это наблюдаю в опыте. Описал ты все верно. Лучше расскажи, почему "не получится"?

Ссылка на комментарий
  • 0

В принципе можно и консольную команду выполнить. По сути мне без разницы, хотя конечно было бы круто, если бы это работало через апп. Но вот только консольный unzip не работает тоже. 

Ссылка на комментарий
  • 0
7 часов назад, notricky сказал:

Спасибо, Кэп. Я это наблюдаю в опыте. Описал ты все верно. Лучше расскажи, почему "не получится"?

Все очень просто. Приложение мак представляет из себя директорию с расширением .app. Мак ее воспринимает как файл. А внутри находятся еще куча директорий и естественно, запускной файл. Нажми на фоне приложения правую кнопку мыши с кликни по 'показать содержимое пакета'. И мак тебе покажет содержимое этой директории. Вот как пример моя программа:

Screenshot at дек. 26 07-49-48.png

Наверху программа Pharmsuitepro.app, а что в ней видно. Сама программа, которую компилит дельфи (бинарник) в директории contens -> MacOs -> pharmsuitepro

Поэтому, когда ты разархивируешь другой файл, он ложится не в директорию программ, а в директорию из которой ты пытаешься разархирировать. То есть внутри другой директории. А мак такие не запускает.

Изменено пользователем Vitaldj
Ссылка на комментарий
  • 0
18 часов назад, Vitaldj сказал:

Поэтому, когда ты разархивируешь другой файл, он ложится не в директорию программ, а в директорию из которой ты пытаешься разархирировать. То есть внутри другой директории. А мак такие не запускает.

А какая именно разница между разархивацией внутри своей проги и разархивацией встроенными осью средствами? И как это повторить?

Ссылка на комментарий
  • 0
6 часов назад, notricky сказал:

А какая именно разница между разархивацией внутри своей проги и разархивацией встроенными осью средствами? И как это повторить?

Да никакой. Просто при разархивации внутри проги, нельзя указывать место запуска самой программы. 

Ссылка на комментарий
  • 0
17 часов назад, Vitaldj сказал:

Да никакой. Просто при разархивации внутри проги, нельзя указывать место запуска самой программы. 

Я же писал, что даже при использовании консольного unzip РУКАМИ ПРЯМО В МАКЕ, ситуация такая же. 

Дело вообще рядом не лежит про "место запуска самой программы".

Ссылка на комментарий
  • 0

Тогда три вопроса:

1) приложение твое? 

2) если оно твое, то запускается ли оно до архивирования?

3) чем архивируешь?

Изменено пользователем Vitaldj
Ссылка на комментарий
  • 0
В 28.12.2016 в 05:47, Vitaldj сказал:

Тогда три вопроса:

1) приложение твое? 

2) если оно твое, то запускается ли оно до архивирования?

3) чем архивируешь?

Ооох.... Ну что за вопросы...

1) да
2) да
3) какая разница. формат zip.

Ссылка на комментарий
  • 0
4 минуты назад, notricky сказал:

Ооох.... Ну что за вопросы...

1) да
2) да
3) какая разница. формат zip.

Если бы ты внимательно читал, то в первом посте писал особенность мак оси. Почему то, если программы заархивировать не средствами самой мак оси, то потом не открываются из архива. Попробуй свою программу заархивировать по правой кнопке:

Screenshot at дек. 29 20-09-08.png

То есть выбери сжать, а потом, снова достань из архива. Все будет работать. А если из винды, допустим, то ничего не получится. Я не знаю почему так. Возможно он что то добавляет в архив или как то специально помечает, маркирует его. Я не знаю почему так...

Ссылка на комментарий
  • 0

Ладно, я явно этого не указал, а ты мысли читать не умеешь, потому вопрос справедлив. :) Сорри.

Я архив создаю в Винде. 7Zip.

Если разархивирую в маке дважды кликнув - запускается.

Если разархивирую в маке unzip в консоли - не запускается.

Если разархивирую своим приложением - не запускается.

Ссылка на комментарий
  • 0
14 часов назад, notricky сказал:

Ладно, я явно этого не указал, а ты мысли читать не умеешь, потому вопрос справедлив. :) Сорри.

Я архив создаю в Винде. 7Zip.

Если разархивирую в маке дважды кликнув - запускается.

Если разархивирую в маке unzip в консоли - не запускается.

Если разархивирую своим приложением - не запускается.

Не знаю. Мыслей нет. А что пытаешься то сделать?

Ссылка на комментарий
  • 0
7 часов назад, Vitaldj сказал:

Не знаю. Мыслей нет. А что пытаешься то сделать?

Обновление :) он-лайн.

 

На винде и андроиде (не через стор) работает. На маке вот пока нет. 

Нужно скачать и обновить. Ну или если не получается, то может как то пользователю открыть файндер и указать на файл. Не понятно совсем почему штатный unzip через консоль не справляется.

Ссылка на комментарий
  • 0
2 часа назад, notricky сказал:

Обновление :) он-лайн.

 

На винде и андроиде (не через стор) работает. На маке вот пока нет. 

Нужно скачать и обновить. Ну или если не получается, то может как то пользователю открыть файндер и указать на файл. Не понятно совсем почему штатный unzip через консоль не справляется.

То есть ты пишешь модуль обновления программы на маке?

Ссылка на комментарий
  • 0
39 минут назад, Vitaldj сказал:

То есть ты пишешь модуль обновления программы на маке?

Модуль? Какой модуль? О чем речь?

Функцию и пару строк кода в программе если можно назвать модулем то да, это он.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...