Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Разное > Исходники и статьи
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.11.2013, 19:51
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию [ Исходник ] Работа с WIM-файлами в Delphi

Что это такое?
WIM - формат образов Windows. Как установочных, так и "снятых" с других компьютеров.
Зачем с ними нужно работать?
В данный конкретный момент я пишу оболочку для загрузочного диска, которая умеет, в частности, устанавливать операционную систему из таких образов. Установка, на самом деле, разделена на 3 этапа:
  1. Разбиение диска на разделы
  2. Распаковка образа системы из install.wim
  3. Установка загрузчика и копирование загрузочных файлов
Что можно сделать?
У нас есть Windows Imaging API, на котором, по сути, основана вся работа утилиты imagex, и треть работы setup.exe с любого установочного диска Windows (Vista и выше).
Можно распаковывать архивы, создавать новые, изменять существующие, получать и записывать обратно информацию об образе системы...
Исходник
Собственно, программы для нормального редактирования информации об образе я и не нашёл. Хотя небольшое гугление показало, что спрос на такую есть.
Недолго думая, я набросал это:


Минималистичный интерфейс, небольшая защита от дурака неправильных нажатий в виде заблокированных кнопок...
Что можно доработать:
  • Заменить memo на SynEdit с целью подсветки синтаксиса
  • Кинуть на форму XPManifest (ради красивостей винды - мне, как видно по скрину, не до этого)
  • Добавить функционал по желанию
Исходник + .exe
mega.co.nz, 7z, 320Kb
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 04.11.2013 в 20:03.
Ответить с цитированием
Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение:
golem (18.02.2014)
  #2  
Старый 04.11.2013, 19:58
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

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  
Старый 04.11.2013, 20:13
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Пару гигов сюда заливать? Скачай любую сборку винды (хоть MSDN с рутрекера), и глянь файл \sources\install.wim
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 04.11.2013 в 20:36.
Ответить с цитированием
  #4  
Старый 05.11.2013, 01:11
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

У меня под XP не сработала, тупо написав, что не может открыть файл. Подозрение пало на wimgapi.dll, посмотрел ее tdump-ом, она требует Windows 7. Выдавал бы уж более информативное сообщение об ошибке, раз такое дело. Ну, или в своей программе тоже Windows 6.1 требовал бы.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #5  
Старый 05.11.2013, 12:39
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Хм, программа пытается открыть файл в read/write, так что если пытаешься открыть файл прямо с диска/образа, то возможно падение с ошибкой.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #6  
Старый 18.02.2014, 10:54
Аватар для golem
golem golem вне форума
Прохожий
 
Регистрация: 18.02.2014
Сообщения: 4
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

PhoeniX классная прога у тебя получилась, все работает если образ-wim копировать на жесткий диск, твою программу я бы назвал как правка xml-файла вручную. Хотел попросить, а можеш переделать так программу чтобы в выпадающем списке не выбирать просто номер образа (которые просто перечисленны подряд) а например параметр NAME, так будет более понятно, а то приходится запоминать под каким номером находится редакция
Ответить с цитированием
  #7  
Старый 18.02.2014, 22:15
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Сейчас немного занят, на выходных допилю.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #8  
Старый 27.02.2014, 23:46
Аватар для golem
golem golem вне форума
Прохожий
 
Регистрация: 18.02.2014
Сообщения: 4
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

Уважаемый 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('Неработает!');
Такой код работает если экспортировать в существующий WIM-файл имеющий хоть один образ, но если мне нужно экспортировать образ в несуществующий WIM-файл то выскакивает ошибка.
Хотя второй образ открывается как новый. Подскажите что я делаю нетак и как из этого положения выйти?
Ответить с цитированием
  #9  
Старый 01.03.2014, 13:32
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

В MSDN, по ссылке предоставленной Фениксом в примерах кода такая ситуация приведена, смотрите про Export a .wim File to Another .wim File и Capture a Directory into a New .wim File т.е. при отсутствии файла-реципиента, его нужно создать предварительно
Ответить с цитированием
  #10  
Старый 02.03.2014, 13:44
Аватар для golem
golem golem вне форума
Прохожий
 
Регистрация: 18.02.2014
Сообщения: 4
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
В MSDN, по ссылке предоставленной Фениксом в примерах кода такая ситуация приведена
Неправда, не в одной из приведенных страниц нет примера создания нового wim-файла, или эти примеры недают возможность создать этот файл. Получилось создать новый файл через WIMExportImage, при этом нужно открывать (WIMCreateFile) для записи второй образ (временный) с флагом WIM_CREATE_NEW

Последний раз редактировалось golem, 02.03.2014 в 14:18.
Ответить с цитированием
  #11  
Старый 05.03.2014, 19:26
Аватар для golem
golem golem вне форума
Прохожий
 
Регистрация: 18.02.2014
Сообщения: 4
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

Всем привет, во всем разобрался сам, всем спасибо!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter