| 
| 
 | Вопрос # 5 125/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!
 Вопрос заключается вот в чем.
 Нужно скопировать файл в  каталог System32  на  ОС - Windows 7(64-битная).
 С помощью функции GetSystemDirectory находим каталог и вызываем функцию CopyFile для копирования файла.
 Вот вроде бы и все, запускаем программу от имени Администратора, все проходит успешно, но файл копируется не в папку  по адресу C:\Windows\System32\  , а в папку по адресу C:\Windows\SysWOW64\ .
 Можно как-нибудь это исправить ???
 К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса) Приложение:Переключить в обычный режим {{code}}var  Form1: TForm1;   SysPath : String;implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject);varSysDir:PAnsiChar; Res:Integer;begin             SysPath := SysDir;        end; procedure TForm1.Button1Click(Sender: TObject); const   f : String = 'test.exe'; var   s: String;begin     s := SysPath+'\'+f;       if CopyFile(PChar(f),PChar(s), True) then        else    end; end. {{/code}}
|  |   Вопрос задал: Kyran29 (статус: Посетитель)Вопрос отправлен: 25 марта 2011, 21:55
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 15; последнее сообщение — 3 апреля 2011, 00:40; участников в обсуждении: 5. 
|   | DNK (статус: Студент), 25 марта 2011, 22:33 [#1]:Kyran29: Забуть в W7 скопировать что-либо в системные папки. Там мелкомягкие что-то сильно намудрили. "Digital Networked Knight" |  
|   | Kyran29 (статус: Посетитель), 25 марта 2011, 22:56 [#2]:DNK: Что, все так тяжело ??? Ни уж-то вообще доступ закрыт. Может есть какой вариант ! Если все ручками делать без программы все проходит и файл копируется нормально.
 |  
|   | Kyran29 (статус: Посетитель), 26 марта 2011, 11:54 [#3]:Уважаемые эксперты! Я так думаю, ответов больше не будит??? Можно вопрос закрывать ?
 |  
|   | Мережников Андрей (статус: Абитуриент), 26 марта 2011, 15:08 [#4]:а с чего Вы решили, что GetSystemDirectory должна вернуть обязательно "C:\Windows\System32" ? |  
|   | Вадим К (статус: Академик), 26 марта 2011, 15:51 [#5]:поддерживаю. Для 64 битной винды каталог с именем system42 - скорее всего рудимент. Поэтому берите функцию, которая возвратит Вам C:\Windows и добавьте просто system32. Либо расскажите, зачем туда копируете файлы.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | bugmenot (статус: 3-ий класс), 26 марта 2011, 19:13 [#6]:Поддерживаю, какать в /bin - некошерно. А не туда может из-за а) виртуализации UAC б) исполнения в 32битной подсистеме. виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | Мережников Андрей (статус: Абитуриент), 31 марта 2011, 21:07 [#7]: Цитата (Вадим К): поддерживаю. Для 64 битной винды каталог с именем system42 - скорее всего рудимент и не только в 64-битной. Мало ли как можно обозвать каталог, в который установлена операционка?
 |  
|   | Вадим К (статус: Академик), 31 марта 2011, 22:43 [#8]: Цитата (Мережников Андрей): Мало ли как можно обозвать каталог, в который установлена операционка? Не совсем. Этот каталог (system32) жестко прописан во многих местах.
 А в Висте, из за некоторых ошибок, пришлось даже делать, что бы системных диском всегда был диск С.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Kyran29 (статус: Посетитель), 1 апреля 2011, 16:03 [#9]:Ну ладно пусть каталог \System32\ рудимент но адрес то у этого каталога должен быть. Вопрос в том что копируем файл сюда - C:\Windows\System32\ , а  оказывается он здесь - C:\Windows\SysWOW64\  Почему ??? В чем проблема ??? |  
|   | Вадим К (статус: Академик), 1 апреля 2011, 16:12 [#10]:Проблема в следующем - у Вас 64битная система, а делфи делает 32 битные приложения.
 - Вы не до конца понимает, как работают 32битные приложения в 64битной среде.
 - туда лучше ничего не копировать. В свой паспорт человек же сам не вписывает ничего.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Kyran29 (статус: Посетитель), 1 апреля 2011, 20:03 [#11]:Вадим К: Я с Вами согласен туда луче ни чего не копировать для этого существуют специальные каталоги. Вопрос возник  случайно, как-то попробовал скопировать файл в каталог System32  и получил выше изложенный результат. И теперь этот вопрос не дает мне покоя. Вроде каталог есть, найти его мы можем, а файл туда не копируется.
 Выше Вы предлагали воспользоваться функцией, которая возвратит C:\Windows и просто добавить system32 – пробовал ситуация та же. Даже если просто указать путь ‘C:\Windows\System32\’ через строковую переменную результат не меняется.
 Вот функция GetSpecialPath  возвращает путь до каталога  System32  и путь до каталога SysWOW64  но после копирования файла по первому адресу файл оказывается во втором каталоге.
 
 
 uses ShlObj;
 
function GetSpecialPath(CSIDL: word): string;
var s:  string;
begin
SetLength(s, MAX_PATH);
if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, true)
then s := '';
result := PChar(s);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := GetSpecialPath($25); // C:\Windows\System32
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
 Label2.Caption := GetSpecialPath($29); // C:\Windows\SysWOW64
end; Вы говорите – что я не до конца понимаю, как работают 32битные приложения в 64битной среде. Может быть. Я для этого и обратился за помощью на форум. Я не прошу  писать мне код я прошу объяснить мне, почему так происходит или хотя бы дайте ссылку для «самопонимания»  «энтого не дающему мне покоя» вопроса. За ранние большое спасибо.
 |  
|   | DNK (статус: Студент), 1 апреля 2011, 21:57 [#12]:Kyran29: Цитата: Вопрос в том что копируем файл сюда - C:\Windows\System32\ , а оказывается он здесь - C:\Windows\SysWOW64\Суть копирования: Мы создаём файл в новом месте, но с тем же именем. Затем в новый файл записывается точная копия данных из исходного файла. Для создания файла, мы в конечном счете обращаемся к некоей функции ядра, одним из параметров которой является путь к файлу. Так неужели этой функции так сложно заменить в пути к файлу (строке то бишь) System32 на SysWOW64. На вопрос как это может быть, я думаю был убедительным. Цитата:  Почему ???А вот это отдельный вопрос. Думаю, на это были какаие-то свои причины у разработчиков семёрки. "Digital Networked Knight" |  
|   | Мережников Андрей (статус: Абитуриент), 2 апреля 2011, 15:11 [#14]: Цитата (Вадим К): Не совсем. Этот каталог (system32) жестко прописан во многих местах я имел в виду, что каталог Windows может называться и Windows и Win и еще много различных способов его назвать. Висту не использую принципиально
 |  
|   | Kyran29 (статус: Посетитель), 3 апреля 2011, 00:40 [#15]:Вадим К: Проблема решена. Я считаю,  на свой вопрос получил полный ответ.
 Готов поставить оценку за Ваш ответ. Большое спасибо.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |