Честно говоря, я бы посоветовал вам НЕ создавать свой собственный установщик. Есть много проблем с созданием установщиков. Даже крупные производители инсталляторов больше не создают своих собственных инсталляторов, они просто создают собственные пакеты MSI.
Используйте Mirosoft Installer (MSI). Это правильно. Сделайте для него свой собственный пользовательский интерфейс, но не воссоздайте и без того очень сложное колесо, которое существует.
ОБНОВЛЕНИЕ: Если вы просто делаете это для обучения, я бы не стал думать об этом как об "установщике". У вас может возникнуть соблазн взять свое «исследование» и использовать его когда-нибудь, и, честно говоря, вот как мы сталкиваемся с таким количеством проблем, когда выходят новые версии Windows. Люди создают свои собственные колеса с ошибочными предположениями.
То, что вы на самом деле пытаетесь сделать, называется «упаковкой», и вам действительно нужно хорошо ознакомиться с форматом исполняемого PE, потому что вы говорите об изменении структуры образа PE на диске.
Вы можете смоделировать это, поместив файлы в ресурсы, но это не совсем то, что делают установщики или самораспаковщики.
Вот ссылка на Самораспаковывающийся учебник , но его нет в C #.
Я не знаю достаточно о требованиях .NET PE, чтобы знать, можно ли сделать это с помощью исполняемого кода управляемого кода.
ОБНОВЛЕНИЕ 2: Это, вероятно, больше того, что вы ищете, он встраивает файлы в ресурс, но, как я уже сказал, это не совсем так, как это делают профессиональные установщики или самораспаковщики. Я думаю, что существуют разные ограничения на то, что вы можете встраивать в качестве ресурсов. Но это похоже на демонстрационную версию Self-Extractor , написанную на C #.