|
Вопрос # 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);
- var
- SysDir: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]:
Вадим К:
Проблема решена. Я считаю, на свой вопрос получил полный ответ.
Готов поставить оценку за Ваш ответ. Большое спасибо.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|