|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
[ Исходник ] Работа с WIM-файлами в Delphi
Что это такое?
WIM - формат образов Windows. Как установочных, так и "снятых" с других компьютеров. Зачем с ними нужно работать? В данный конкретный момент я пишу оболочку для загрузочного диска, которая умеет, в частности, устанавливать операционную систему из таких образов. Установка, на самом деле, разделена на 3 этапа:
У нас есть Windows Imaging API, на котором, по сути, основана вся работа утилиты imagex, и треть работы setup.exe с любого установочного диска Windows (Vista и выше). Можно распаковывать архивы, создавать новые, изменять существующие, получать и записывать обратно информацию об образе системы... Исходник Собственно, программы для нормального редактирования информации об образе я и не нашёл. Хотя небольшое гугление показало, что спрос на такую есть. Недолго думая, я набросал это: Минималистичный интерфейс, небольшая защита от Что можно доработать:
mega.co.nz, 7z, 320Kb Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 04.11.2013 в 20:03. |
Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение: | ||
golem (18.02.2014)
|
#2
|
||||
|
||||
http://code.google.com/p/superobject/
Компонент отображающий XML в виде дерева (см. папку superobjectv1.2.4.zip\demos\VirtualTreeView). ИМХО, редактировать XML ручками - это есть извращение. З.Ы. Кинь пример wim файла. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию Последний раз редактировалось M.A.D.M.A.N., 04.11.2013 в 20:06. |
#3
|
||||
|
||||
Пару гигов сюда заливать? Скачай любую сборку винды (хоть MSDN
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 04.11.2013 в 20:36. |
#4
|
||||
|
||||
У меня под XP не сработала, тупо написав, что не может открыть файл. Подозрение пало на wimgapi.dll, посмотрел ее tdump-ом, она требует Windows 7. Выдавал бы уж более информативное сообщение об ошибке, раз такое дело. Ну, или в своей программе тоже Windows 6.1 требовал бы.
Не стоит путать форумы с богадельнями. © Bargest |
#5
|
||||
|
||||
Хм, программа пытается открыть файл в read/write, так что если пытаешься открыть файл прямо с диска/образа, то возможно падение с ошибкой.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#6
|
||||
|
||||
PhoeniX классная прога у тебя получилась, все работает если образ-wim копировать на жесткий диск, твою программу я бы назвал как правка xml-файла вручную. Хотел попросить, а можеш переделать так программу чтобы в выпадающем списке не выбирать просто номер образа (которые просто перечисленны подряд) а например параметр NAME, так будет более понятно, а то приходится запоминать под каким номером находится редакция
|
#7
|
||||
|
||||
Сейчас немного занят, на выходных допилю.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#8
|
||||
|
||||
Уважаемый PhoeniX, меня очень заинтерисовала работа с WIM-файлами с использованием Delphi, сейчас работаю над программой редактирования WIM-образов.
Не знаю правильно я делаю или нет, но я экспортирую образы из одного в другой используя примерно такой набор функций: Код:
wim:= WIMCreateFile(PWideChar(WideString(odObrazPash.FileName)), WIM_GENERIC_READ, WIM_OPEN_EXISTING, 0, 0, nil); SetLength(itmp,MAX_PATH); GetTempPath(MAX_PATH,PChar(itmp)); if (WIMSetTemporaryPath(wim,PWideChar(WideString(itmp)))) then ShowMessage('Первый образ загружен!') else ShowMessage('Первый образ незагружен!'); dir:=ePachNewObr.Text; dir:=StringReplace(dir,'\\','\',[rfReplaceAll]); neww:=WIMCreateFile(PWideChar(WideString(dir)), WIM_GENERIC_WRITE or WIM_GENERIC_READ, WIM_OPEN_ALWAYS, 0, 1, nil); SetLength(ptmp,MAX_PATH); GetTempPath(MAX_PATH,PChar(ptmp)); if (WIMSetTemporaryPath(neww,PWideChar(WideString(ptmp)))) then ShowMessage('Второй образ загружен!') else ShowMessage('Второй образ незагружен!'); img:=WIMLoadImage(wim,cbObrazVibor.ItemIndex); //Экспортируем образ в новый wim-файл if WIMExportImage(img,neww,0) then ShowMessage('Все работает!') else ShowMessage('Неработает!'); Хотя второй образ открывается как новый. Подскажите что я делаю нетак и как из этого положения выйти? |
#9
|
||||
|
||||
В MSDN, по ссылке предоставленной Фениксом в примерах кода такая ситуация приведена, смотрите про Export a .wim File to Another .wim File и Capture a Directory into a New .wim File т.е. при отсутствии файла-реципиента, его нужно создать предварительно
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#10
|
||||
|
||||
Цитата:
Последний раз редактировалось golem, 02.03.2014 в 14:18. |
#11
|
||||
|
||||
Всем привет, во всем разобрался сам, всем спасибо!
|