Delphi компрессор EXE? [закрытый]

Как я уже сказал в своем комментарии, трудно сказать, что вы пытаетесь сделать, но внешние ключи, которые вы пытались создать, выглядят подозрительно.
Все должно быть проще для понимания, если вы ограничите каждую таблицу, чтобы она представляла только одну вещь, то есть, соответственно:

  • Студент (без прилагаемой программы, поскольку это будет 2 вещи для одной таблицы). 115]
  • Программа / филиал (как бы вы это ни называли)
  • Связь между студентом и филиалом.

Это приводит к:

CREATE TABLE Students (
    idnr            NUMERIC(10) PRIMARY KEY,
    name            TEXT        NOT NULL,
    login           TEXT        NOT NULL
);

CREATE TABLE Branches(
    name            TEXT,
    program         TEXT,
    PRIMARY KEY(name, program)
);

CREATE TABLE StudentBranches (
    student         NUMERIC(10) REFERENCES Students(idnr),
    branch          TEXT        NOT NULL,
    program         TEXT        NOT NULL,
    FOREIGN KEY (branch, program) REFERENCES Branches(name, program)
);
  • Чтобы выбрать программу, на которую зарегистрирован студент, вы должны ПРИСОЕДИНИТЬСЯ с StudentBranches.
  • Я удалил PRIMARY KEY из StudentBranches, потому что ваш предыдущий комментарий о «получить весь столбец» звучал так, как будто студент должен иметь возможность зарегистрироваться в более чем 1 программе. Если студент может зарегистрироваться ровно в 1 программе, вам нужно добавить его обратно.
5
задан Community 23 May 2017 в 10:32
поделиться

12 ответов

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

В конечном итоге я рекомендую вам использовать программу установки, например Inno Setup . Он не только создает один EXE-файл, который будет устанавливать / удалять вашу программу, но он также сжимает, что EXE практически столько же, сколько отдельный компрессор сделал бы с вашим исполняемым файлом.

Когда программа установлена, она распаковывается, поэтому она никогда не выглядит как вирус и не увеличивает время загрузки.

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

ps Inno Setup бесплатен.

13
ответ дан 18 December 2019 в 05:23
поделиться

Советуем вам не делать этого:

  • Компрессоры EXE могут заставить ваше приложение выглядеть как вирус (самоизменяющийся)
  • gzip / zip так же эффективны при сжатии и не С вашим приложением
  • Компрессоры EXE увеличивают время загрузки вашего приложения (если только вы не говорите о программе установки, это совсем другое дело

) Этот сумасшедший сайт приводит аргумент, который я слышал в далекое прошлое (правда это или нет сегодня, я не уверен, что современные упаковщики, вероятно, сегодня имеют другую стратегию) В этой статье упоминается Win32! :)

http: //topic.csdn. net / t / 20000408/08 / 6785.html

Современные многозадачные ОС, такие как Windows 95/98 и NT используют то, что называется системой «виртуальной памяти». когда программы запускаются, весь их код не загружается в память сразу при запуске, как было в случае с DOS программы. Вместо этого только части код активно выполняется хранится в памяти. Например, скажем ваша программа имеет опцию печати на меню и код позади него, который обрабатывает печать. Этот код будет только загружен в память после печати Функция впервые выбирается пользователем. И если после того, как код загружен в память функция печати не используется какое-то время система будет «сбрасывать» код, освобождая память занято, если другое приложение отчаянно нужна память. Это часть процесса под названием "пейджинг" и является полностью прозрачен для программы.

Еще один способ подкачки под Win32 сохраняет память, это вызывает несколько экземпляры программы (или DLL) для разделить ту же память для кода. В другими словами, под нормальным обстоятельств нет реальных разница в количестве физического память, выделенная для кода между запуск 100 экземпляров программы и запуск одного экземпляра.

Если все программы Win32 вели себя как DOS-программы, загружающие все в память и держать его там до Программа прекращена, а также нет разделяя любую память между несколькими случаи, вы можете себе представить как быстро может работать физическая память в системах с ограниченным количеством, вызывая замену диска, чтобы начать.

Тем не менее, это именно то, что в настоящее время Компрессоры Win32 EXE делают для вашего EXE в / DLL файлы! Они полностью уходят против системы подкачки ОС распаковка всего кода в память и держать его там до окончания. И потому, что код не хранится в «сырой» формат в файле EXE (т.е. так же, как он хранится в памяти), ОС не может поделиться кодом между несколько экземпляров.

12
ответ дан 18 December 2019 в 05:23
поделиться

Вероятно, вы подумали о ASPack - это компрессор EXE, написанный на Delphi, но сжимающий любой EXE. Это может быть очень хорошо на Delphi EXE, хотя. Я согласен с другими ответами, что вы не должны использовать EXE-компрессор, просто чтобы сэкономить время загрузки. Могут быть конкретные ситуации, когда сжатие EXE является хорошей идеей, но обычно это не так.

Вместо этого используйте хороший компоновщик установки, особенно если вы можете найти тот, который использует сжатие 7zip. Я знаю InstallAware использует 7zip для максимального сжатия. В зависимости от того, какие версии Delphi у вас есть, у вас также может быть лицензия InstallAware.

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

4
ответ дан 18 December 2019 в 05:23
поделиться

Я не знаю ни одного, специально предназначенного для Delphi, но UPX очень популярен для такого рода вещей. Единственным недостатком является то, что исполняемый файл должен быть распакован при запуске, и это может занять некоторое время. Тем не менее, он кажется очень быстрым для исполняемых файлов разумного размера.

4
ответ дан 18 December 2019 в 05:23
поделиться

Я задал вопрос о недостатках использования UPX на исполняемых файлах Delphi здесь, на SO, некоторое время назад, и получил несколько отличных ответов.

Недостатки использования UPX для сжатия исполняемого файла Windows?

0
ответ дан 18 December 2019 в 05:23
поделиться

UPX должен работать, хотя это не специфично для Delphi.

0
ответ дан 18 December 2019 в 05:23
поделиться

Я использую PEtite: http://un4seen.com/petite/

0
ответ дан 18 December 2019 в 05:23
поделиться

You can use PECompact since people can't decrypt it easily, and as test showed (showed on main page, just scroll down a bit) it's better than ASPack or UPX, i've using it on my previous Delphi projects

-1
ответ дан 18 December 2019 в 05:23
поделиться

Используйте UPX с опцией lzma для максимального сжатия.

upx --lzma yourfile.exe
3
ответ дан 18 December 2019 в 05:23
поделиться

I believe Terminal servers (Like Citrix) will use the same memory for you're application binary if it is uncompressed. Meaning a compressed exe could smell a small disaster in a Citrix environment.

1
ответ дан 18 December 2019 в 05:23
поделиться

Основное неудобство сжатых EXE или DLL заключается в том, что ОС не может совместно использовать код между несколькими экземплярами.
Таким образом, вы тратите память, приходится распаковывать каждый раз при запуске экземпляра, проявлять вирусоподобное поведение, даже не имея преимущества при загрузке по сравнению со сжатой установкой.
Единственный положительный случай - при запуске непосредственно с сетевого диска.

2
ответ дан 18 December 2019 в 05:23
поделиться

Я бы тоже проголосовал за upx. Помимо недостатков, которые были упомянуты, он также защищает от базового реверс-инжиниринга и от этих «хакерских» инструментов. Их, кстати, много, и большинству из них не удается открыть сжатый исполняемый файл.

0
ответ дан 18 December 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: