Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Автоматическая установка Windows 2000/XP/2003 (http://forum.oszone.net/forumdisplay.php?f=32)
-   -   [решено] Expand. makecab, modifype с графическим интерфейсом (http://forum.oszone.net/showthread.php?t=189301)

tehnik_srs 25-10-2010 09:13 1526717

Expand. makecab, modifype с графическим интерфейсом
 
Вложений: 1
Софтинка позволяет распаковывать, запаковывать и сбрасывать контрольную сумму файлов. Все тоже самое что и expand, makecab и modifype, но прикрутил графический интерфейс. Файлы копируются в @HomeDrive\Results. Можно сразу копировать в дистрибутив. Писал для себя, но может кому пригодится.

Nun-Nun 25-10-2010 11:28 1526800

tehnik_srs,

Прошу прощения за возможную чайниковость, крутил-вертел, но только с трудом понял как оно работает. "Вручную" с помощью Makecab и Expand всё распаковывается и запаковывается, но как это делается с помощью Вашей утилиты? ... тут ещё нужно поразбираться, т.к. исполнение каких-либо процедур (распаковка, запаковка и т.д.) в ExMakeMod происходит не по нажатию на кнопку с соответствующей надписью, а при выборе обрабатываемого файла, что для простого пользователя не очень-то очевидно.
По логике обычного юзера должно бы быть так: например, я хочу заменить картинку дефолтных виндовских обоев на свою. Как известно, дефолтная картинка в дистрибе находится в папке I386 в файле bliss.jp_ Тогда делаем следующим образом: обзываем свою картинку как bliss.jpg, запускаем ExMakeMod, указываем место расположения дистриба и дистрибутивный bliss.jp_, в котором находится файл, подлежащий замене, т.е. дефолтная дистрибутивная картинка. Затем указываем свой неупакованный файл и жмём на кнопку "запаковать". При необходимости получить контрольную сумму (что лучше было бы сделать одновременно с запаковкой файла), жмём на соответствующую кнопку и получаем контрольную сумму. Далее, жмём на "Скопировать упакованный файл в дистрибутив" и полученный файл переносится в дистриб, заменяя исходный bliss.jp_, а не просто копируется в корневую папку дистриба (хотя его место в в папке I386), как это сейчас реализовано в ExMakeMod.
Таким образом, если описанное реализовать в ExMakeMod - это было бы действительно и удобно и наглядно.
Надеюсь, мой взгляд не будет воспринят, как безосновательные нападки; это всего лишь моё видение данного дела.

tehnik_srs 25-10-2010 13:52 1526882

Возможно я Вас неправильно понял, но на данный момент, если Вы хотите поменять картинку, то создаете ее с именем bliss.jpg; в ExMakeMod выпираете ее пунктом Контрольная сумма и Запаковать (он открывает сразу папку с файлом), после этого жмем F8, указав путь к дистрибу. Вот, собственно и всею

Nun-Nun 25-10-2010 15:50 1526980

Цитата:

Цитата tehnik_srs
Возможно я Вас неправильно понял, но на данный момент, если Вы хотите поменять картинку, то создаете ее с именем bliss.jpg; в ExMakeMod выпираете ее пунктом Контрольная сумма и Запаковать (он открывает сразу папку с файлом), после этого жмем F8, указав путь к дистрибу. Вот, собственно и всею »

Да, это я тоже в конце концов нашёл. Просто, как я уже говорил, такая последовательность манипуляций не совсем очевидна для простого пользователя. Сбивают с толку кнопки, по нажатию на которые происходит выбор файла, а не выполнение команды (если исходить из надписи на кнопках). Было бы логично, если бы для выбора файла была отдельная кнопка, что-нибудь типа "Выбор файла", а нажатие на кнопки с другими надписями - приводило не к открытию файла, а выполнению команды (распаковать, запаковать, найти контрольную сумму и т.д.), согласно надписям на этих кнопках. ИМХО, разумеется.

tehnik_srs 25-10-2010 17:14 1527045

ОК, сделаю

tehnik_srs 26-10-2010 08:28 1527540

Nun-Nun, переделал с учетом Ваших требований. Если можно, проверьте работоспособность сброса контрольной суммы, т.к. переделывал под вайном.

Nun-Nun 26-10-2010 16:26 1527889

tehnik_srs,

Посмотрел, есть пара пожеланий в части кометики:
1) на мой взгляд, название пункта меню "Путь к дистрибутиву" (сбивает с толку) стОило бы назвать "Путь к папке в составе дистрибутива", т.к. папок в дистрибутиве много и какая из них пользователю потребуется заранее не ясно;
2) папку \Results было бы удобнее расположить в папке, из которой запущен ExMakeMod или выдать запрос пользователю о том, где её стОит расположить - пусть он сам укажет нужное ему место.

В остальном - то, что надо!

stalinit078 26-10-2010 17:04 1527924

tehnik_srs,
У меня одно пожелание: можно убрать значок программы из области уведомлений?

tehnik_srs 27-10-2010 09:02 1528385

Вы про Tray?

Nun-Nun, изначально делал папку Results именно рядом с программой, но я новичок в программировании, а modifype не хочет обрабатывать файлы, содержащие русские имена. Не знаю как это побороть. А надпись переделаю.

Nun-Nun 27-10-2010 09:37 1528402

Цитата:

Цитата tehnik_srs
изначально делал папку Results именно рядом с программой, но я новичок в программировании, а modifype не хочет обрабатывать файлы, содержащие русские имена. Не знаю как это побороть. А надпись переделаю. »

Всё делается просто: при использовании ModifyPE, т.е. при выборе файла для получения контрольной суммы, выдать сообщение (предупреждение) пользователю о недопустимости использования кириллицы в названиях файлов и папок. Так что, использование кириллицы вопреки этому предупреждению - проблема самого пользователя.
А за исправление надписи - отдельное спасибо!

stalinit078 27-10-2010 11:31 1528489

Цитата:

Цитата tehnik_srs
Вы про Tray? »

Да.

tehnik_srs 27-10-2010 12:36 1528537

Nun-Nun, да я так и делал изначально, но надоедает при постоянном использовании, подумаю как бы выдавать это сообщение только если в пути кириллица.

stalinit078, ок, исправлю!

tehnik_srs 28-10-2010 08:29 1529172

Это версия с переделаной надписью и отсутствием значка в Tray. Насчет Results пока ничего не придумал, но я работаю над этим.

Nun-Nun 28-10-2010 09:38 1529194

tehnik_srs,

Может попробовать так: при первом запуске программа предлагает указать место расположения папки Results для размещения результатов и при этом же выдаётся предупреждение, что она работает только с короткими именами файлов и папок, а также не поддерживает работу с названиями, содержащими спецсимволы, пробелы и кириллицу. Как только пользователь указал место расположения папки Results и нажал "ОК", программа создаёт какой-нибудь файл конфигурации (например, config.ini), в котором прописывается место размещения папки Results (в дальнейшем можно туда же записывать и место расположения папки в составе дистрибутива Windows). При последующем запуске программа смотрит наличие файла конфигурации и если он есть - считывает из него ранее записанные данные. При отсутствии файла конфигурации программа работает, как при первом запуске.

tehnik_srs 28-10-2010 10:04 1529213

Nun-Nun, да это не сложно, а вот как бы сделать проверку на кириллицу, думаю рыть в торону RegEX-пов или указать запрещенные символы

Nun-Nun 28-10-2010 10:23 1529221

tehnik_srs,

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

P.S. Возможно предложенная выше идея не совсем подойдёт, и нужно разбираться с кодировками, но тут я мало что подскажу.

tehnik_srs 28-10-2010 10:34 1529232

Nun-Nun, ок, подумаю над всеми вариантами, доложу в трехдневный срок.

Nun-Nun 28-10-2010 11:25 1529268

tehnik_srs,

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

tehnik_srs 28-10-2010 12:28 1529348

Nun-Nun, спасибо

tehnik_srs 29-10-2010 08:31 1529934

Обновил шапку, в ней последняя версия. Добавил выбор папки Results (при использовании киррилицы, выдаст предупреждение), данные о Results и дистрибутиве хранятся в инишнике (system32\ExMakeMod.ini) и подгружаются при запуске. Путь к Results программа спрашивает при первом запуске, потом можно изменить в меню.

Nun-Nun 29-10-2010 14:55 1530186

tehnik_srs,

Попробовал в действии, есть несколько замечаний:

1) При использовании команды "Очистить всё" необходимо очищать только рабочие папки ExMakeMod-а, т.е. папки Expand, Makecab и CHECK_SUMM, а не всю пользовательскую папку! А то я по обыкновению для эксперимента выбрал системную папку Temp, где находилось несколько рабочих файлов и подпапок и никак не ожидал, что ExMakeMod при использовании команды "Очистить всё" попытается очистить всю системную папку Temp ! :o Я чуть со стула не упал! На мой взгляд, нужно иметь в виду, что пользователь для работы мог выбрать какую-то существующую папку, в которой уже могло что-то лежать, поэтому целесообразно чистить только папки Expand, Makecab и CHECK_SUMM. Вроде мелочь, а сколько инфарктов предотвратит! :)
2) Думаю, файл ExMakeMod.ini лучше распологать возле ExMakeMod.exe, а не в System32. Не каждому понравится присутствие временных файлов (пусть и кофигурационных) в системной папке, тем более, что автоматом этот файл оттуда не удаляется. Тут можно остановиться на компромиссном варианте: ExMakeMod.ini пусть лежит возле ExMakeMod.exe и копируется в System32 (если это необходимо) только на время работы ExMakeMod, а по завершении - снова оттуда удаляется.
3) Есть смысл немного опимизировать программу: а что если команды "Скопировать упакованный файл в дистрибутив" и "Путь к папке в составе дистрибутива Windows" объединить? Если при выборе команды "Скопировать упакованный файл в дистрибутив" будет автоматически производиться поиск и замена одноимённого файла в дистрибутиве, то и необходимость в команде "Путь к папке в составе дистрибутива Windows" отпадёт.
4) Косметика: при сохранении файла в папку дистрибутива выдаётся сообщение "Файлы скопированы...". Почему файлы, ведь скопирован всего один файл?

В остальном всё прекрасно.

tehnik_srs 29-10-2010 16:22 1530255

1) Упс! Извините, переделаю
2) Ну вот я запускаю с рабочего стола и видеть рядом инишник не хочется. Да и программе его нужно откуда-то считывать, так что рандомное имя не получится.
3) Ок, попробую
4) Хм, тут посложнее, но посмотрю.

Nun-Nun 29-10-2010 16:35 1530274

Цитата:

Цитата tehnik_srs
2) Ну вот я запускаю с рабочего стола и видеть рядом инишник не хочется. Да и программе его нужно откуда-то считывать, так что рандомное имя не получится. »

Тогда пусть создаётся в системной папке Temp. Там всегда какой-нибудь мусор скапливается (логи всякие, tmp-файлы и прочее) и искать и чистить проще.

tehnik_srs 30-10-2010 09:39 1530735

Nun-Nun, По-поводу пункта 3. А зачем? Вы один раз указали дистрибутив и потом копируете по горячей клавише, а так придется указывать постоянно

Nun-Nun 30-10-2010 20:49 1531207

Цитата:

Цитата tehnik_srs
По-поводу пункта 3. А зачем? Вы один раз указали дистрибутив и потом копируете по горячей клавише, а так придется указывать постоянно »

По F8 файл копируется в корневую папку дистрибутива, а если этот файл должен лежать в подпапке i386 или ещё какой-то, то понадобится вручную указывать куда копировать. Сейчас программа сама не ищет нужное место в составе дистриба. Именно по этой причине и существует команда "Путь к папке в составе дистрибутива Windows". А если я много файлов начну обрабатывать, а лежать они должны не в одном, а в разных местах дистрибутива, то для каждого придётся каждый раз указывать путь к нужной папке (подпапке), что не очень-то удобно. Я предлагаю сделать несколько иначе: нужно только один раз указать путь к дистрибутиву, о чём программа может попросить во время запуска, например, что-нибудь типа "Если предполагаете работать с дистрибутивом Windows, укажите путь к папке, в которой он расположен". Программа запоминает путь к дистрибу (например, пишет в ini-файл), а затем, после обработки каждого файла, можно жамкать F8, и ExMakeMod сама должна найти нужное место в составе дистриба (разумеется, по одноимённому названию файла) и закинуть туда наш файл, заменяя им дистрибовский. Иными словами, пользователю не нужно каждый раз ползать по дистрибу, отыскивая нужную папку, достаточно жамкать на F8. Если же пользователь при запуске ExMakeMod по какой-то причине не указал, где раположен дистрибутив, но жамкает на F8, программа предложит для начала указать путь к нему. Таким, образом, место расположения дистриба будет указано всего один раз. Кстати, при завершении сеанса ExMakeMod может предложить запомнить настройки, сделанные в процессе работы, тогда при следующем запуске программе вообще ничего спрашивать не потребуется.
Вот, в принципе, я так вижу это дело.

tehnik_srs 03-11-2010 10:58 1533722

Nun-Nun, Делаю поиск, нашел странный баг - в версии, которая в шапке, не работает modifype. Исправил, выложу сразу с рабочим поиском

Nun-Nun 03-11-2010 15:16 1533918

Цитата:

Цитата tehnik_srs
Делаю поиск, нашел странный баг - в версии, которая в шапке, не работает modifype. Исправил, выложу сразу с рабочим поиском »

Думаю, им стОит присваивать версию или билд - проще отличить.

tehnik_srs 03-11-2010 15:40 1533938

Nun-Nun, уже присваиваю

tehnik_srs 05-11-2010 10:03 1535157

Nun-Nun, Сделал поиск в дистрибутиве, инишник положил рядом с exe. Обновлено в шапке

Nun-Nun 05-11-2010 18:28 1535577

tehnik_srs,

Потестировал. Программа близка к завершению, но вот что думаю:
1) при первом запуске программа просит указать папку в составе дистрибутива, но логичнее было бы попросить "Укажите папку, в которой расположен дистрибутив Windows"; аналогичную команду в меню стОит убрать вообще, т.к. теперь программа сама может искать нужное место (папку) в дистрибутиве для сохранения обработанного файла.
2) когда начал пробовать, по ошибке указал не папку с дистрибом, а другую, в итоге при попытке сохранения обработанного файла в дистриб программа сообщила, что файл благополучно скопирован, хотя никакого дистриба, разумеется, не нашла.
3) сохранение обработанного файла в дистриб происходит только при использовании команды в меню, но при нажатии кнопки F8 эта функция не работает.

tehnik_srs 06-11-2010 09:35 1535974

Nun-Nun, 1) Оставил такую возможность, чтобы сменить дистриб не убивая инишник
2) Хм, проверю
3) Посмотрел - извиняюсь, забыл раскомментарить

Nun-Nun 07-11-2010 14:22 1536859

Цитата:

Цитата tehnik_srs
1) Оставил такую возможность, чтобы сменить дистриб не убивая инишник »

Может в меню программы такая команда и уместна, но при первом запуске - сбивает с толку. Лучше при первом запуске спросить "Укажите папку, в которой расположен дистрибутив Windows", тем более, что теперь программа нужный для замены файл в составе дистрибутива по F8 сама может отыскать. Если уж пользователю понадобится конкретная папка в составе дистриба, то он её вручную с помощью команды меню найдёт.

tehnik_srs 09-11-2010 08:43 1538213

Nun-Nun, исправил F8 и копирование, вроде работает, проверяйте. В шапке обновлено

Nun-Nun 09-11-2010 16:34 1538566

Посмотрел. К сожалению проблема осталась.
Как я и говорил, запрос "Укажите путь к папке в составе дистрибутива Windows", который программа делает при первом запуске путает всё дело. Если пользователю требуется обработать несколько файлов, которые должны будут после обработки располагаться в разных папках дистриба, то программа автоматически делает поиск только в той папке, которую пользователь указал при первом запуске ExMAkeMod и, вероятно, во вложенных в неё, при этом все папки верхних уровней дистриба останутся не просканированными, в итоге программа не находит нужного для замены файла и сообщает о его отсутствии, что, разумеется, не соответствует действительности! В результате по-прежнему пользователю для каждого файла нужно вручную указывать нужную папку, а это автоматизма программе не прибавляет.
Попытаюсь более наглядно пояснить, что имеено нужно.
Допустим папка с дистрибом называется Distrib, а пользователю необходимо обработать несколько фалов, причём расположить их после обработки нужно в разных папках дистриба, например, папке Distrib\I386 , Distrib\Support\Tools и Distrib. Если при первом запуске на запрос программы пользователь укажет папку Distrib\I386, то в эту папку попадут только файлы, одноимённые с расположенными в ней, для файлов других папок (Distrib\Support\Tools и Distrib) потребуется вручную указывать нужную папку. Если же при первом запуске ExMAkeMod запросит указать папку с дистрибутивом (а не папку в составе дистрибутива!), то пользователь должен будет указать папку Distrib. В этом случае, после обработки каждого файла пользователю достаточно жамкнуть на F8, чтобы программа просканировала весь дистрибутив, т.е. папку Distrib (включая папки в неё вложенные), и автоматом закинула файл в нужное место. Таким образом, больше пользователю ничего вручную указывать не нужно! Тогда ExMAkeMod уж точно зря не скажет, что нужный файл для замены не найден!

tehnik_srs 10-11-2010 11:22 1539146

Nun-Nun, Хм, сейчас ExMakeMod запрашивает путь к папке (могу переименовать), например DISTRIB, после F8, она ищет файлы в DISTRIB и во всех вложенных папках. Если, например, в папке MAKECAB файлик 1.txt, она найдет его в DISTRIB\i386 и заменит этот файл. В чем проблема я не понял.

Nun-Nun 10-11-2010 13:24 1539244

tehnik_srs,
Цитата:

Цитата tehnik_srs
Хм, сейчас ExMakeMod запрашивает путь к папке (могу переименовать), например DISTRIB, после F8, она ищет файлы в DISTRIB и во всех вложенных папках. Если, например, в папке MAKECAB файлик 1.txt, она найдет его в DISTRIB\i386 и заменит этот файл. В чем проблема я не понял. »

Дело не в названии папки дистрибутива. Будет ли он называться Distrib или как-то ещё - не важно! Название пользователь может дать любое (разумеется, не кириллическое).
Чтобы стало понятнее, сделайте так: например, пользователю нужно обработать два файла - Bliss.jpg и cskbc.dll. После обработки файл Bliss.jpg в запакованном виде должен попасть в папку \Nazvanie_Papki_v_kotoroy_nashoditsya_Distributiv\I386, а файл cskbc.dll - в папку \Nazvanie_Papki_v_kotoroy_nashoditsya_Distributiv\Cmpnents\TABLETPC\i386\. При первом запуске вместо папки, в которой расположен дистрибутив (т.е. ВМЕСТО ПАПКИ \Nazvanie_Papki_v_kotoroy_nashoditsya_Distributiv\) программа просит УКАЗАТЬ ПАПКУ В СОСТАВЕ ДИСТРИБУТИВА WINDOWS. Что в итоге происходит: пользователь для файла Bliss.jpg укажет папку \Nazvanie_Papki_v_kotoroy_nashoditsya_Distributiv\I386. После обработки этого файла при нажатии на F8 программа просканирует эту папку и папки в неё вложенные и скопирует Bliss.jp_ в \Nazvanie_Papki_v_kotoroy_nashoditsya_Distributiv\I386. Вроде всё нормально, но следующий обработанный файл, т.е. cskbc.dll должен попасть в \Nazvanie_Papki_v_kotoroy_nashoditsya_Distributiv\Cmpnents\TABLETPC\i386\, т.е. в папку, которую программа не сканировала и сканировать не могла, т.к. за папку дистрибутива воспринимает указанную при первом запуске \Nazvanie_Papki_v_kotoroy_nashoditsya_Distributiv\I386. В итоге при нажатии F8 программа нужного файла не находит и сообщает, что файл cskbc.dl_ не найден. Чтобы она его нашла нужно вручную указывать новое место, т.е. \Nazvanie_Papki_v_kotoroy_nashoditsya_Distributiv\Cmpnents\TABLETPC\i386\.
Именно, чтобы такой чехарды не происходило я и предложил, чтобы программа при первом запуске запрашивала папку, в которой расположен дистрибутив Windows (корневую папку дистрибутива), т.е. \Nazvanie_Papki_v_kotoroy_nashoditsya_Distributiv\ , а не отдельную папку в его составе. Тогда в сферу поиска программы попадут все папки дистрибутива и при нажатии F8 не будет ложных сообщений о том, что файл не найден.

tehnik_srs 10-11-2010 15:58 1539362

Обновил в шапке. Изменены название для меню и сообщение в первом окне.

Nun-Nun 11-11-2010 10:15 1539848

tehnik_srs,

Да, название в первом окне изменено правильно. Начал экспериментировать с файлом Bliss.jpg: указываю, как положено, при первом запуске ExMakeMod папку для работы с файлами и папку дистрибутива; открываю Bliss.jpg, жму "Контрольная сумма" - всё нормально; открываю полученный файл, жму "Запаковать" - тоже всё нормально, а дальше жму F8 - программа сообщает, что файл Bliss.jp_ не найден. Судя по всему, она смотрит только корневую папку дистрибутива и не заглядывает во вложенные подпапки.
Посмотрите скрипт, видимо в команде, организующей поиск, есть ошибка.

P.S. Перетащил файл Bliss.jp_ из дистрибовской подпапки I386 в корневую папку дистрибутива и нажал F8 - программа сообщила, что всё нормально и файл скопирован. Выходит, что ExMakeMod действительно смотрит только корневую папку и не заглядывает во вложенные.

tehnik_srs 11-11-2010 12:01 1539955

Nun-Nun, Проверил, создал файл 1.txt в DISTRIB\386. В качестве папки указал DISTRIB. Находит
Проверяю на wine, вечером проверю на винде

Nun-Nun 11-11-2010 13:16 1540027

tehnik_srs,

Возьмите какую-нибудь картинку, обзовите её Bliss.jpg и попробуйте повторить вышеописанный мною вариант. Только расположите этот файл для чистоты эксперимента в какой-нибудь недистрибутивной папке.

tehnik_srs 12-11-2010 08:37 1540704

Nun-Nun, Поправил поиск, действительно работало под wine, но не работало под виндой. Обновил шапку

Nun-Nun 12-11-2010 17:07 1541050

tehnik_srs,

Посмотрел. Теперь всё действительно работает как надо! Огромнейшее спасибо! Утилита сделана вполне удобно для работы. Конечно можно и ещё посовершенствовать, но это уже по желанию автора.

tehnik_srs 13-11-2010 09:27 1541515

Nun-Nun, так Вы предложите, что улучшить

Nun-Nun 13-11-2010 17:54 1541866

Улучшить?.. Например, три кнопки "Открыть файл" - это много, достаточно и одной, т.к. если в программе открывался какой-нибудь файл и над ним производилась хотя бы одна какая-то операция (из трёх предлагаемых "Контрольная сумма", "Запаковать" и "Распаковать"), то для выполнения двух остальных программа сама может использовать нужный файл. Чтобы было более наглядно сделаем так: жамкаем кнопку "Открыть файл", указывам нужный файлик, затем жмём "Контрольная сумма", далее - сразу "Запаковать файл". Обойтись при этом без второй кнопки "Открыть файл" вполне возможно, т.к. нужный файл и путь к нему программе уже известен. Ну и т.д.

tehnik_srs 15-11-2010 09:15 1542924

Nun-Nun, Пока отметил тему решенной, а над Вашим предложением подумаю


Время: 06:10.

Время: 06:10.
© OSzone.net 2001-