Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Консольный WinRAR и Multimedia Builder
skДата: Среда, 27 Июня 2007, 01:05 | Сообщение # 1
Новый участник
Группа: Проверенные
Сообщений: 12
Репутация: 0
Награды: 0
Статус: Offline
Для создания некого патча мне пришлось воспользоваться помимо MMB
консольной версией WinRAR, т.к. имелось в наличие большое количество
файлов, которые необходимо было установить в определённые каталоги.
Использование архиватора подошло кстати, ибо размер уменьшался в несколько раз...
Да, в общем есть ли смысл рассказывать преимущество и удобство архиватора? smile
Но везде есть подводные камни. Меня беспокоит один нюанс.

Чтобы извлечь файлы я использовал такую команду:

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

Что, на ММВ уже патчи пишут? smile
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$ в моём мозгу - просто переменная, не более. Эх, это всё пережитки ММВ с её скриптами...
Я думал, принцип понятен, а оказывается, разжевать надо было smile


Жизнь оказалась не такой уж и забавной, как поначалу...

Сообщение отредактировал 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$, то это обязательно переменная для имени файла, но никак не для чего-то ещё smile

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")

Хотя это уже изврат, но мне нравится - я извращенец biggrin

Так что зря ты так про то, что я ММВ забыл - такое не забывается smile , тем более, что мне чуть ли не каждый день приходится ваять демки для моих плагинов. Некоторые из них вы не видели - они на продажу, а один скоро опубикую, Андрей в курсе.


Жизнь оказалась не такой уж и забавной, как поначалу...
 
toizyДата: Среда, 27 Июня 2007, 13:43 | Сообщение # 7
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Блин, ребята, я сегодня спохмелья конкретно wacko поэтому не удивляйтесь - я забыл самое главное smile Дарю вам мбд.
Прикрепления: 84370832.zip (0.7 Kb)


Жизнь оказалась не такой уж и забавной, как поначалу...
 
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$ - Переменная. Просто переменная. И где же тут имя файла?

МЛЯ-Я-Я!!! На хрена нам ИМЯ ФАЙЛА??? Нам нужна ТОЛЬКО ПАПКА,
куда устанавливать патч!

Прикрепления: 98166892.zip (0.5 Kb)


Да пребудет с вами ММВ!
 
toizyДата: Среда, 27 Июня 2007, 17:06 | Сообщение # 10
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Quote (as-master)
Поэтому OpenFile$ тут и ни при чем, так как он не образуется после команды
BrowseForFolder("Укажите каталог назначения:","")

Причём. Я могу использовать после BrowseForFolder("Укажите каталог назначения:","") любую переменную, в т.ч. и эту.

Quote (as-master)
МЛЯ-Я-Я!!! На хрена нам ИМЯ ФАЙЛА??? Нам нужна ТОЛЬКО ПАПКА,

А я и не говорю, что вам нужно. Я просто рассказал, почему я использовал OpenFile$ в качестве имени переменной, а не другое что-то. Я сделал так, потому что мне ТАК удобнее, в голову первое пришло. А ты говоришь, типа, нельзя использовать OpenFile$. А я говорю - можно smile

В конце концов, с самого начала я описал принцип, и этот принцип верный (б** буду biggrin ) Почему ты зациклился на имени файла, непонятно. OpenFile$ - всего лишь ПЕРЕМЕННАЯ. Ты это... заканчивай ММВ, начинай Делфи smile


Жизнь оказалась не такой уж и забавной, как поначалу...
 
as-masterДата: Среда, 27 Июня 2007, 17:43 | Сообщение # 11
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
после команды BrowseForFolder
переменая OpenFile$ не образуется,
а то народ в заблуждение войдет.


Да пребудет с вами ММВ!
 
skДата: Четверг, 28 Июня 2007, 04:46 | Сообщение # 12
Новый участник
Группа: Проверенные
Сообщений: 12
Репутация: 0
Награды: 0
Статус: Offline
Вот уж не думал, что смогу вызвать такое бурное обсуждение вопроса smile
На самом деле вы предлагали, фактически, одно и тоже, правда, уважаемый товарищ,
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", например, то неопытный пользователь
уже не сможет так просто вскрыть архив и поковыряться в нём. По-крайней мере, большинство вообще не знают
что такое архивирование и для них это будет равносильно супер военному шифрованию smile
Короче говоря, понимаю, что хватит тут, наверно, детский сад разводить.

Всем спасибо за помощь. Рад, что есть умные люди на земле!

З.Ы.

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)
Пробелы-то ставиь в пути нельзя...

И что? Как всегда, я говорю - можно smile Тут есть фишка: когда нужно использовать пробелы в пути, нужно просто заключить путь в двойные кавычки, например:
Quote
path$='"C:\Program files\Folder"'

Я уже где-то здесь говорил, что в случае использования командной строки лучше ЛЮБОЙ путь заключать в кавычки. Так надёжнее.

Так что используй кавычки, и всё получится smile

Добавлено (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, спасибо за весьма ценный совет.

 
  • Страница 1 из 1
  • 1
Поиск: