Страница 2 из 2
Re: UNrar
Добавлено: 19 фев 2015, 13:45
Sergey Ivanov
dadreamer писал(а):2015-02-19_14-20-53.jpg
И не нужно никаких батников городить.
Поместил UnRAR.exe в папку system32
Зачем вы это делаете?
На клиентских ПК тоже так собираетесь поступить?
Спасибо, работает !
Нет, я просто разные варианты пробовал )
Vitekkz88 писал(а):Поменяйте путь на Program Files (x86)
Так то я знаю где у меня лежит UnRAR.exe:)
Пробела, вроде, не хватает перед (х86) "Program Files (x86)"
Re: UNrar
Добавлено: 19 фев 2015, 13:49
Super Star
dadreamer писал(а):Super Star,
Vitekkz88, а почему у меня тогда работает на Windows 7 x64?
У меня WinRAR 64-разрядный стоит. У вас, видимо, нет.
не работает
Re: UNrar
Добавлено: 19 фев 2015, 13:54
Vitekkz88
Пробела, вроде, не хватает перед (х86) "Program Files (x86)"
\
Ага, поставил пробел.
Консоль выскакивает и скрывается. Но результата нет почему-то...
Re: UNrar
Добавлено: 19 фев 2015, 14:05
Vitekkz88
Ну и ладно! Не особо то и хотелось
Главное - автору помогло)
Re: UNrar
Добавлено: 19 фев 2015, 15:06
dadreamer
Vitekkz88 писал(а):Ага, поставил пробел.
Консоль выскакивает и скрывается. Но результата нет почему-то...
Попробуйте вот в этом только что состряпанном
:
Re: UNrar
Добавлено: 19 фев 2015, 15:14
Vitekkz88
Попробуйте вот в этом только что состряпанном
UNRAR 3.30 freeware Copyright (c) 1993-2004 Eugene Roshal
C:\Users\Lemz-T\Desktop\q\qw.rar
is not RAR archive
No files to extract
Re: UNrar
Добавлено: 19 фев 2015, 15:15
dadreamer
Vitekkz88 писал(а):C:\Users\Lemz-T\Desktop\q\qw.rar is not RAR archive
Старая версия архиватора? Или самого UnRAR'а? А может некорректно поставился?.. Я могу только гадать )
Re: UNrar
Добавлено: 19 фев 2015, 15:19
Vitekkz88
Старая версия архиватора? Или самого UnRAR'а? А может некорректно поставился?.. Я могу только гадать )Я могу только гадать )
Вот уж извините, доколь проблем не знали)
Думаю архиватор по-свежее всё исправит. Может еще кто проверит?
Re: UNrar
Добавлено: 19 фев 2015, 15:25
dadreamer
У меня сейчас версия 5.21 бета 1. UnRAR в консоли ту же версию выдаёт.
Буду дома, там еще проверю, на более старой версии.
Re: UNrar
Добавлено: 19 фев 2015, 15:46
Super Star
5.21 заработало, из-за того что каждый параметр в кавычках передавался
Re: UNrar
Добавлено: 19 фев 2015, 18:01
dadreamer
Re: UNrar
Добавлено: 20 фев 2015, 22:03
Sergey Ivanov
dadreamer писал(а):А вообще по хорошему путь к WinRAR'у нужно получать через реестр (HKLM\Software\WinRAR\exe64)
Сделал получение пути через реестр, но он отличается от указанного вами. Почему ?
Re: UNrar
Добавлено: 20 фев 2015, 22:22
dadreamer
Sergey Ivanov писал(а):Почему ?
Этот путь не берите, это для наличия пункта "WinRAR -> Добавить в архив / Извлечь в ..." в контекстном меню файлов и папок, когда на них жмёшь ПКМ. Используйте тот путь, что я привёл выше. Или просто проверяйте в папках Program Files и Program Files (x86) наличие файла unrar.exe. Правда, этот вариант может не сработать, если юзер поставил WinRAR в какую-то другую папку.
Так-то, конечно, можно было бы взять unrar.dll и распаковать что угодно, распространяя её вместе с вашей программой. Тем более что либа
свободная, да ещё с нормальной документацией и кучей примеров. Но право что-то так возиться лень, извините.
Может, как-нибудь позже посмотрю.
Re: UNrar
Добавлено: 21 фев 2015, 21:40
dadreamer
На основе примеров из UnRARDLL.exe сделал несколько
и тестовую программку, выполняющую распаковку архива с помощью unrar.dll. Реализован только самый базовый функционал, тестирование и листинг архива делать не стал. Пример использования инструментов:
При использовании этих
нужно указать путь к Callback-библиотеке, она лежит рядом с
, при работе в RTE должна находиться в папке data (при желании можно поменять в RAROpenArchiveEx.vi). Если потребуется структура RAROpenArchiveDataEx, её можно вытащить из того же
. Прерывание (останов) распаковки тоже не стал делать, это на будущее, если кому-то понадобится. Это же относится и к прогрессу распаковки.
Для RARProcessFile.vi можно не задавать входы Dest Folder (папка, куда производится распаковка) и Dest FileName (full) (полный путь для извлекаемого файла: если указан, то файл извлекается по этому пути и с этим именем вместо имеющегося). В этом случае архив распаковывается туда же, где он находится. Подробное описание всех функций и структур см. в
мануале.
VI:
Исходник Callback (D7):
Код: Выделить всё
library Callback;
uses
SysUtils, Classes, Windows;
{$R *.res}
function CallbackProc(msg: UINT; UserData, P1, P2: Integer): Integer; stdcall;
var C: PChar;
begin
Result := 0;
case msg of
0: //UCM_CHANGEVOLUME
if (P2 = 0) then begin //RAR_VOL_ASK
{
Write(CR, 'Insert disk with ', PChar(P1), ' and press ''Enter'' or enter ''Q'' to exit ');
Readln(Ch);
if (UpCase (Ch) = 'Q') then
Result := -1;
}
Result := -1; //terminate operation
end;
2: //UCM_NEEDPASSWORD
begin
//Write(CR, 'Please enter the password for this archive: ');
//Readln(S);
C := PChar(UserData); //password is placed into UserData
Move(Pointer(C)^, Pointer(P1)^, StrLen(C) + 1);
//+1 to copy the zero
end;
1: //UCM_PROCESSDATA
begin
{
if (UserData <> 0) and (PINT (UserData)^ = PRINT) then begin
Flush (Output);
// Windows.WriteFile fails on big data
for I := 0 to P2 - 1 do
Write(PChar(P1 + I)^);
Flush (Output);
end;
}
end;
end;
end;
exports
CallbackProc name 'CallbackProc';
begin
end.