Что нового

Как скопировать файл который обычными средствами скопировать не удаётся

assch

Новичок
Сообщения
166
Репутация
4
Как можно скопировать файл который обычными средствами скопировать не удаётся и система или
проигнорирует это или выдаст сообщение что файл занят другим процессом. Как пример если попробывать
скопировать файл реестра << C:\WINDOWS\system32\config\software >> то сделать это не удастся.
Я не задавал бы этого вопроса но к примеру программа Acronis спокойно создаёт образ системного раздела, с которого он же и запущен.
Я даже попробывал с помощью Acronis скачать этот файл << C:\WINDOWS\system32\config\software >> и сделал это без проблем при
работающей системе. Может быть Acronis сначала останавливает процесс и освобождает файл и только потом его копирует. И потом снова восстанавливает работу процесса.
Короче тёмный лес. Если кто в курсе этой проблемы не поделитесь советом?
 

Sp01LeR

Знающий
Сообщения
45
Репутация
12
Может быть Acronis сначала останавливает процесс и освобождает файл и только потом его копирует
Нет, она копирует напрямую с диска по секторам...
имхо, лучше не заморачивайся с этим на автоите и поищи в гугле консольную прогу, правда большинство из них копируют только файл "C:\WINDOWS\system32\config\SAM" - может именно он тебе и нужен ;D
 
Автор
A

assch

Новичок
Сообщения
166
Репутация
4
Спасибо за совет
Я понимаю иронию но файл "C:\WINDOWS\system32\config\SAM" мне не впринцыпи не нужен
и проги такие тоже не нужны поскольку как я писал я могу это спокойно сделать с помощью Акрониса
Мне интересен сам алгоритм этого действия
И судя по первому отклику Атоиту это не по силам?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
assch сказал(а):
И судя по первому отклику Атоиту это не по силам?
Это никому не по силам, используя стандартные функции для открытия файлов. Сама система не дает доступ к этим файлам. А Acronis работает напрямую с секторами диска через его контроллер.
 
Автор
A

assch

Новичок
Сообщения
166
Репутация
4
Yashied спасибо за ответ.
Тогда чуть подправлю вопрос, можно это чудо действие проделать с помощью Аутоит?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Можно.

Функция - DeviceIoControl()
Код - IOCTL_ATA_PASS_THROUGH или что-то еще...
Документация - ATA8-ACS

:smile:

P.S

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

P.S.S

Может проще через загрузочный CD?
 

Sp01LeR

Знающий
Сообщения
45
Репутация
12
assch сказал(а):
И судя по первому отклику Автоиту это не по силам?
На чистом ВинАпи можно такое провернутьи и без DeviceIoControl, но сомневаюсь, что этот вариант будет одинаково работать как для NTFS, так и для FAT32(типа для флешки)

assch сказал(а):
Мне интересен сам алгоритм этого действия
Извини, лично я для тебя исходник сишки в автоит перегонять не буду, так что без обид ;)

Yashied сказал(а):
Может проще через загрузочный CD?
Да зачем? Вот спецом полез в гугл и нашел http://www.codeproject.com/KB/files/FDump.aspx
Качнул(там правда регацца надо) - запускаешь "fdump.exe /V C:\WINDOWS\system32\config\SAM C:\sam_copy" и никакого CD уже нинада ;D
 
Автор
A

assch

Новичок
Сообщения
166
Репутация
4
А исходник сишки не можешь дать?


Добавлено:
Сообщение автоматически объединено:

Извини не разобрался
Там два файла один экзешник другой исходник
Попробую посмотреть
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Sp01LeR сказал(а):
Вот спецом полез в гугл и нашел http://www.codeproject.com/KB/files/FDump.aspx
Да, думаю, что это лучший выход в данном случае. Остается вопрос - зачем все это нужно (касаемо системных файлов)?
 
Автор
A

assch

Новичок
Сообщения
166
Репутация
4
Yashied
Перегнать этот код на Атоит не слишком сложно?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
assch сказал(а):
Перегнать этот код на Атоит не слишком сложно?
Те, кто хорошо знает и то, и другое, думаю за несколько часов справятся. Но это не ко мне. А зачем? Там ведь есть готовая утилита, просто используй ее в своем коде. Зачем лишняя головная боль?
 
Автор
A

assch

Новичок
Сообщения
166
Репутация
4
Использовать эту утилиту в своём коде это интересно честно говоря не догодался бы
Спасибо форумчанам
Вот вроде бы получилось

Код:
Run("fdump.exe /V C:\WINDOWS\system32\config\software C:\software_copy", "", @SW_HIDE)

:IL_AutoIt_1:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Автор
A

assch

Новичок
Сообщения
166
Репутация
4
Yashied
Я помню ты где то писал что у тебя на компе стоят 2 системы и ты с помощью своей утилиты переключаешся между ними
Поэтому я и хотел снять снимок системы (именно всех файлов) и сделать ещё одну систему такую же (но с некоторыми дополнениями)


Добавлено:
Сообщение автоматически объединено:

Только подскажи пожалуйста что нужно (или не нужно) прописать где нибудь чтобы скажем твоя утилита увидела вторую систему
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
После того, как я перешел на Windows 7, я перестал использовать Boot Manager, т.к. в семерке вместо boot.ini используется двоичный файл, а разбираться с этим мне просто лень. А в XP я только ей и пользовался, и она меня ни разу не подводила.

Но здесь есть одна особенность - переключение ОС происходит на уровне именно boot.ini. Другими словами, загрузчик (NTLDR) для обоих ОС один и тот же, и должен располагаться на каком-либо одном из дисков, прописанный в BIOS как загрузочный. Там же должен находиться и boot.ini. А из этого следует, что для той ОС, которая находится непосредственно на загрузочном диске ("C:"), папки "Windows", "Program Files" и т.д. должны располагаться на этом же диске. Для резервной ОС, которая естественно должна находиться физически на другом диске, все системные папки тоже должны располагаться на своем диске. Т.е. в случае проблем с одни из дисков, у нас остается полностью рабочая одна система, за исключением быть может самого загрузчика (если "полетел" загрузочный диск), но это не так страшно.

Так вот, проблема собственно заключается в том, что при одном загрузчике, для обоих ОС загрузочный диск будет значиться один и тот же, а именно тот, где находится boot.ini. Он же диск "C:". Таким образом ты не сможешь клонировать основную систему на другой диск, т.к. после перезагрузки и переключения на резервную ОС, загрузочный диск останется прежним (тот, на котором установлена основная ОС) и будет числиться все так же диском "C:". Диск с резервной ОС будет иметь теперь букву "D:" или другую. Но ведь все ссылки в реестре, да и вообще везде, где не попадя, на клонированной ОС остались на "C:"... В лучшем случае, ты получишь насквозь глючную систему, а в худшем - испоганишь вдобавок и основную ОС.

Для того, чтобы пользоваться Boot Manager'ом, тебе придется еще раз полностью установить Windows, но теперь уже на диск "D:". Мой тебе совет, установи Acronis True Image и сделай клонирование своего диска на другой (физически) диск при помощи загрузочного CD (делается в том же Acronis'е). А переключение между ОС, точнее, здесь уже нужно говорить выбор загрузочного диска, делай через BIOS. Скорее всего, у тебя там даже есть горячая клавиша для этого (типа F8 или что-то в этом роде), чтобы постоянно не залезать в сам BIOS. В этом случае, с какого бы ты диска не загрузился, он всегда будет значиться как диск "C:" и все будет OK. У меня так.

Кстати, у меня сейчас стоят вообще 3 ОС: Windows XP и две Windows 7. Все прекрасно работает!

:whistle:
 
Автор
A

assch

Новичок
Сообщения
166
Репутация
4
Yashied
С помощью Акрона сделал снимок (С) и установил его на диск D (этот раздел находится на этом же винчестере) только при установке
я поставил галочку что этот диск будет АКТИВНЫМ После перезагруза без проблем загрузился этот диск D
(Только он уже стал под буквой C что в впринцыпи лучше не бывает) а мой старый диск С стал под другой буквой
Посмотрев в Акроне я увидел что новый С (старый D) значится как активный диск а старый С (уже под другой буквой) значится
как основной диск То есть как я понял какой диск активный такой и загружается и становится диском С
Только как без Акрона сделать другой диск активным чтобы после перезагруза загрузилась другая система (напомню диски находятся
на одном винчестере а в биосе видятся только винчестеры а не их разделы)
То есть что можно сделать чтобы после перезагрузки другой диск стал активным и соответственно загрузилась бы другая система
Даже в Акроне я не нашёл этого и приходится ставить другой снимок и отмечать его как активный что очень и очень не удобно
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
*click*

P.S

Я все же советую поставить вторую систему на отдельный диск.

P.S.S

А еще советую в каждой ОС сделать второй диск (который является неактивным для данной ОС) невидимым, т.е. удалить метку диска для него. Если у тебя появится какой-нибудь вирус, то это будет дополнительной гарантией... Меня это не раз выручало.

:smile:
 
Автор
A

assch

Новичок
Сообщения
166
Репутация
4
Конечно на другом диске было бы наверно лучше но к сожелению он у меня один (пока)
Прочитал твою ссылку и понял что в принцыпи можно наверное сделать небольшой скриптик для смены ОС после перезагрузки
или я ошибаюсь? и придётся делать также по шагово как написано в статье?


Добавлено:
Сообщение автоматически объединено:

Идея чтобы ОС которая не активна сделать не видимой просто гениальная (лишняя страховка)
Осталось как то это сделать Придётся покумекать
Спасибо за новые идеи
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Запускаешь diskpart так:

Код:
diskpart.exe /s ChangeOS.txt
где

ChangeOS.txt

Код:
select disk 0
select partition 1
active
exit
Здесь меняешь только "select partition #", # - номер раздела, который нужно сделать активным.

Ну а дальше в AutoIt через Run...
 
Автор
A

assch

Новичок
Сообщения
166
Репутация
4
Спасибо огромное Yashied
Попробую по тестить
Это как я понял для смены активного состояния
а для того чтобы не активную ОС сделать не видимой?
 
Верх