Консольный WinRAR и Multimedia Builder
|
|
sk | Дата: Среда, 27 Июня 2007, 01:05 | Сообщение # 1 |
Новый участник
Группа: Проверенные
Сообщений: 12
Репутация: 0
Награды: 0
Статус: Offline
| Для создания некого патча мне пришлось воспользоваться помимо MMB консольной версией WinRAR, т.к. имелось в наличие большое количество файлов, которые необходимо было установить в определённые каталоги. Использование архиватора подошло кстати, ибо размер уменьшался в несколько раз... Да, в общем есть ли смысл рассказывать преимущество и удобство архиватора? Но везде есть подводные камни. Меня беспокоит один нюанс. Чтобы извлечь файлы я использовал такую команду: Run("<Embedded>\unrar.exe","x -o+ с:\archive.rar c:\Папка назначения\") В данном случае всё работает отлично! Но меня это не устраивает. Дело в том, что в моём патче изначально пользователем выбирается каталог назначения и, по идее, в него должна последовать распаковка. Каким образом составить скрипт, чтобы вместо "с:\Папка назначения\" была некая константа, вроде CBK_OpenDir или Path$. И возможно ли это вообще? Я, к сожалению, не смог додуматься, как это сделать. Всё, что я перепробовал - неверное решение. Может средства MMB уже позволяют использовать какие-то команды по распаковке архивов?
|
|
| |
toizy | Дата: Среда, 27 Июня 2007, 02:26 | Сообщение # 2 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Quote (sk) Для создания некого патча мне пришлось воспользоваться помимо MMB Что, на ММВ уже патчи пишут? Quote (sk) Каким образом составить скрипт Code s$='x -o+ с:\archive.rar '+OpenFile$ Run("<Embedded>\unrar.exe","s$") не пойдёт?
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
as-master | Дата: Среда, 27 Июня 2007, 09:05 | Сообщение # 3 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| При чём тут OpenFile$ ? Вот что ему надо: BrowseForFolder("Укажите каталог назначения:","") folder$=CBK_OpenDir If (folder$ <> '') Then param$='x -o+ с:\archive.rar '+folder$ Run("<Embedded>\unrar.exe","param$") Else Return() End =========================== А вообще, гораздо проще захерачить всё это на каком-нибудь хотя бы Setup Generator Pro. Правда, на ММВ можно сделать красивее и оригинально :)
Да пребудет с вами ММВ!
|
|
| |
toizy | Дата: Среда, 27 Июня 2007, 10:13 | Сообщение # 4 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Quote (as-master) При чём тут OpenFile$ ? как это при чём? OpenFile$ в моём мозгу - просто переменная, не более. Эх, это всё пережитки ММВ с её скриптами... Я думал, принцип понятен, а оказывается, разжевать надо было
Жизнь оказалась не такой уж и забавной, как поначалу...
Сообщение отредактировал toizy - Среда, 27 Июня 2007, 10:15 |
|
| |
as-master | Дата: Среда, 27 Июня 2007, 12:39 | Сообщение # 5 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Quote (toizy) как это при чём? А так, что ни при чем. Переменная OpenFile$ образуется при выборе пользователем файла. В его же патче никакой файл пользователем не выбирается - им только указывается директория, в которую нужно патч установить. А при выборе директории образуется константа CBK_OpenDir. Именно по такому сценарию я и написал свой пример, и он РАБОЧИЙ!!! Quote (toizy) Эх, это всё пережитки ММВ с её скриптами... Просто ты, Дима, давненько на ММВ ничего не лепил, а потому подзабыл... Quote (sk) ...была некая константа, вроде CBK_OpenDir Так и есть такая константа :) Quote (sk) Может средства MMB уже позволяют использовать какие-то команды по распаковке архивов? Нет, Серёга. Список ВСЕХ команд есть в справке, и чего там нет, того и нет.
Да пребудет с вами ММВ!
|
|
| |
toizy | Дата: Среда, 27 Июня 2007, 13:28 | Сообщение # 6 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Quote (as-master) Переменная OpenFile$ образуется при выборе пользователем файла. Не только. Это самая обычная переменная. Ты волен использовать её как тебе захочется, не обязательно с диалогом открытия файла. Смотри пример, что я прикрепил. Просто ты привык, что если OpenFile$, то это обязательно переменная для имени файла, но никак не для чего-то ещё Quote (as-master) при выборе директории образуется константа CBK_OpenDir Между прочим, и при выборе файла также образуется своя константа CBK_OpenFile, к которой можно приравнять любую переменную, поскольку CBK_OpenFile - тоже переменная (которую, правда, нельзя изменять, потому и константа). Работает это так. Сперва ты выполняешь команду OpenFile, сразу после которой переменная OpenFile$ принимает новое значение и теперь содержит полный путь к файлу. Одновременно меняются и константы CBK_OpenFile и CBK_OpenDir, только они, в отличие от OpenFile$, содержат отдельно имя файла и путь к нему. Так что можно использовать либо переменную OpenFile$, либо константы CBK_OpenFile или CBK_OpenDir. Как будет удобнее. Таким образом, основа команды OpenFile всё-таки CBK_OpenFile и CBK_OpenDir, а не OpenFile$. То что OpenFile$ изменяется при OpenFile, это факт, но кто мешает мне поменять её значение? Например, так: Code BrowseForFolder("Укажите каталог назначения:","") OpenFile$=CBK_OpenDir If (OpenFile$<> '') Then param$='x -o+ с:\archive.rar '+OpenFile$ Run("<Embedded>\unrar.exe","param$") Else Return() End Кстати говоря, вот здесь Code param$='x -o+ с:\archive.rar '+OpenFile$ можно запросто обойтись без этой лишней переменной. Достаточно просто написать Code OpenFile$='x -o+ с:\archive.rar '+OpenFile$ Можно вообще укоротить твой скрипт на две строчки: Code BrowseForFolder("Укажите каталог назначения:","") If (CBK_OpenDir=FALSE) Then Return() End param$='x -o+ с:\archive.rar '+CBK_OpenDir Run("<Embedded>\unrar.exe","param$") И ещё на одну: Code BrowseForFolder("Укажите каталог назначения:","") If (CBK_OpenDir=FALSE) Then Return() End Run("<Embedded>\unrar.exe","'x -o+ с:\archive.rar '+CBK_OpenDir") Хотя это уже изврат, но мне нравится - я извращенец Так что зря ты так про то, что я ММВ забыл - такое не забывается , тем более, что мне чуть ли не каждый день приходится ваять демки для моих плагинов. Некоторые из них вы не видели - они на продажу, а один скоро опубикую, Андрей в курсе.
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
toizy | Дата: Среда, 27 Июня 2007, 13:43 | Сообщение # 7 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Блин, ребята, я сегодня спохмелья конкретно поэтому не удивляйтесь - я забыл самое главное Дарю вам мбд.
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
as-master | Дата: Среда, 27 Июня 2007, 15:20 | Сообщение # 8 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Всё это я знаю. Мы как будто на разных языках говорим. Я только сказал, что пользователь выбирает директорию, а не открывает файл. Поэтому OpenFile$ тут и ни при чем, так как он не образуется после команды BrowseForFolder("Укажите каталог назначения:","")
Да пребудет с вами ММВ!
|
|
| |
as-master | Дата: Среда, 27 Июня 2007, 16:26 | Сообщение # 9 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Посмотрел твой пример. Quote OpenFile$ - Переменная. Просто переменная. И где же тут имя файла? МЛЯ-Я-Я!!! На хрена нам ИМЯ ФАЙЛА??? Нам нужна ТОЛЬКО ПАПКА, куда устанавливать патч!
Да пребудет с вами ММВ!
|
|
| |
toizy | Дата: Среда, 27 Июня 2007, 17:06 | Сообщение # 10 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Quote (as-master) Поэтому OpenFile$ тут и ни при чем, так как он не образуется после команды BrowseForFolder("Укажите каталог назначения:","") Причём. Я могу использовать после BrowseForFolder("Укажите каталог назначения:","") любую переменную, в т.ч. и эту. Quote (as-master) МЛЯ-Я-Я!!! На хрена нам ИМЯ ФАЙЛА??? Нам нужна ТОЛЬКО ПАПКА, А я и не говорю, что вам нужно. Я просто рассказал, почему я использовал OpenFile$ в качестве имени переменной, а не другое что-то. Я сделал так, потому что мне ТАК удобнее, в голову первое пришло. А ты говоришь, типа, нельзя использовать OpenFile$. А я говорю - можно В конце концов, с самого начала я описал принцип, и этот принцип верный (б** буду ) Почему ты зациклился на имени файла, непонятно. OpenFile$ - всего лишь ПЕРЕМЕННАЯ. Ты это... заканчивай ММВ, начинай Делфи
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
as-master | Дата: Среда, 27 Июня 2007, 17:43 | Сообщение # 11 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| после команды BrowseForFolder переменая OpenFile$ не образуется, а то народ в заблуждение войдет.
Да пребудет с вами ММВ!
|
|
| |
sk | Дата: Четверг, 28 Июня 2007, 04:46 | Сообщение # 12 |
Новый участник
Группа: Проверенные
Сообщений: 12
Репутация: 0
Награды: 0
Статус: Offline
| Вот уж не думал, что смогу вызвать такое бурное обсуждение вопроса На самом деле вы предлагали, фактически, одно и тоже, правда, уважаемый товарищ, as-master, надо признать, более глубоко прочувствовал всю досадную сторону моей проблемы. ОДНАКО... Прочитав и внимательно изучив ваши предложения, я парадоксально ничего нового не почерпнул, ибо всё, что вы мне предлагали, я уже пробовал. Сейчас вы наверное думаеете про меня: "Ламо коматозное!" Так вот, я продолжу. После того, как я попробовал ваши скрипты и получил всё тот же результат, я откинулся на спинку стула со словом: "*ля!" и сильно призадумался. От отчаяния я решил, проверить как бы всё с нуля. Написал и запустил такой скрипт, который должен был кровь с носу без проблем работать. Run("<Embedded>\unrar.exe","x -o+ c:\archive.rar c:\extract here\") Когда даже в этом случае архив распаковываться наотрез отказался, я начал подумывать: осталось ли у меня ещё мыло, и где лежит верёвка. Казалось бы, что за хрень? А хрень-то оказалась вон какая. Пробелы-то ставиь в пути нельзя... Недаром все серьёзные люди пробелы заменяют "_"! Конечно, вы, наверное, сейчас думаеете, что мол: "Это каждый школьник знает! А ты, идиот, только сейчас "допетрил!". Но вот, как это не печально, в жизни бывает такое... Пока сам не столкнёшься - не поймешь. Потом уже у меня не стало проблем возникать со скриптами. Всё пошло как по маслу. Для своего патча я использовал примерно такой скрипт: BrowseForFolder("Укажите каталог назначения:","") folder$=CBK_OpenDir source$=<SrcDir>+'\archive.rar ' param$='x -o+ '+source$+folder$ Run("<Embedded>\unrar.exe","param$") Удобно, если патч с архивом приходится записать на диск или флэшку. Короче, с любой ЭВМ патч будет устанавливаться в нужную пользователем директорию. Кстати, если изменить расширение "rar" у архива на какой-нибудь "sys", например, то неопытный пользователь уже не сможет так просто вскрыть архив и поковыряться в нём. По-крайней мере, большинство вообще не знают что такое архивирование и для них это будет равносильно супер военному шифрованию Короче говоря, понимаю, что хватит тут, наверно, детский сад разводить. Всем спасибо за помощь. Рад, что есть умные люди на земле! З.Ы. Quote (toizy) Что, на ММВ уже патчи пишут? А получается-то неплохо. Можно и оформить красиво и музычку фоново подложить... Да и возможностей MMB очень даже хватает, чтоб написать полноценный патч.
|
|
| |
as-master | Дата: Четверг, 28 Июня 2007, 07:51 | Сообщение # 13 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Quote (sk) Пробелы-то ставить в пути нельзя... Как это ни странно, в наше время, когда все вроде бы уже забыли про систему имен файлов 8+3, про строгие запреты на русские и длинные имена, и прочую хрень, тем не менее всё это еще актуально. Недаром старые программеры и просто старые юзеры ДО СИХ ПОР придерживаются этих долбаных правил времен Windows3.11. Так, например, если положить в интернет файл с русским именем, то он СКАЧИВАТЬСЯ НЕ БУДЕТ. Также в интернете нежелательно использовать пробелы в именах файлов, хотя они автоматически и заменяются редактором на символы %20. Вот теперь выясняется, что и ММВ также "руководствуется" этими же устаревшими принципами. Кстати, я уже с этим сталкивался и потому данную проблему знаю. Quote (sk) Кстати, если изменить расширение "rar" у архива на какой-нибудь "sys" Постоянно использую это "супершифрование" :) На дурака прокатывает прекрасно. Quote (sk) А получается-то неплохо. Да, и я об этом написал в самом начале темы.
Да пребудет с вами ММВ!
|
|
| |
toizy | Дата: Четверг, 28 Июня 2007, 11:12 | Сообщение # 14 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Quote (sk) Пробелы-то ставиь в пути нельзя... И что? Как всегда, я говорю - можно Тут есть фишка: когда нужно использовать пробелы в пути, нужно просто заключить путь в двойные кавычки, например: Quote path$='"C:\Program files\Folder"' Я уже где-то здесь говорил, что в случае использования командной строки лучше ЛЮБОЙ путь заключать в кавычки. Так надёжнее. Так что используй кавычки, и всё получится Добавлено (28 Июня 2007, 11:12) --------------------------------------------- Ага, вот где я про это говорил: зыбать
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
sk | Дата: Четверг, 28 Июня 2007, 17:31 | Сообщение # 15 |
Новый участник
Группа: Проверенные
Сообщений: 12
Репутация: 0
Награды: 0
Статус: Offline
| Quote (toizy) Тут есть фишка: когда нужно использовать пробелы в пути, нужно просто заключить путь в двойные кавычки. Мда, а ведь действительно так оно и есть... BrowseForFolder("Укажите каталог назначения:","") folder$='"'+CBK_OpenDir+'"' source$=<SrcDir>+'archive.rar' param$='x -o+ "'+source$+' " '+folder$ Run("<Embedded>\unrar.exe","param$") Я немного подкоррекировал скрипт и всё пошло на ура. Без этого, кстати я не смог бы обойтись. Если патч пришлось бы устанавливать с чужой ЭВМ, то был риск, что он не прокатит из-за того, что у большинства в путях пробелов до ***! Надо признать, что и у меня самого их хватает. Quote (toizy) В случае использования командной строки лучше ЛЮБОЙ путь заключать в кавычки. Так надёжнее. Теперь не согласиться с этим трудно, да и не за чем. toizy, спасибо за весьма ценный совет.
|
|
| |