Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.09.2016, 20:35
udman udman вне форума
Прохожий
 
Регистрация: 27.09.2016
Сообщения: 3
Версия Delphi: xe8
Репутация: 10
По умолчанию пути сохранения

собственно вопрос, при сохранении
ts.SaveToFile('C:\Windows\System32\GroupPolicy\hel lo.txt');
сохраняет этот файл сюда
"C:\Windows\SysWOW64\GroupPolicy"

при попытке сохранить через СейвДиалог1 показывает то что находится в каталоге "C:\Windows\SysWOW64\GroupPolicy" хотя пусть в диалоговом окне указан как "C:\Windows\System32\GroupPolicy\"

смотрите скрин



программа запущенна от имени администратора

через блокнот если сохранить просто файл то сохраняет куда надо, тотал командер также видит все как есть


собственно что это такое и как все же сохранить в нужную папку?
Ответить с цитированием
  #2  
Старый 27.09.2016, 21:53
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
Сообщение от Википедия
WoW64 (Windows-on-Windows 64-bit) — это подсистема операционной системы Windows, позволяющая запускать 32-битные приложения на всех 64-битных версиях Windows (https://ru.wikipedia.org/wiki/WOW64)
Пока приложение собрано как x32 и запускается на x64, винда будет всеми силами транслировать пути, чтоб нигде ничего не попортилось.
По идее для 64-битного приложения такого не будет. Есть ли способ "обмануть" винду и заставить-таки записать в папку system32 из 32-битного приложения на 64-битной системе - не знаю.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 27.09.2016 в 21:55.
Ответить с цитированием
  #3  
Старый 28.09.2016, 13:55
udman udman вне форума
Прохожий
 
Регистрация: 27.09.2016
Сообщения: 3
Версия Delphi: xe8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
Пока приложение собрано как x32 и запускается на x64, винда будет всеми силами транслировать пути, чтоб нигде ничего не попортилось.
По идее для 64-битного приложения такого не будет. Есть ли способ "обмануть" винду и заставить-таки записать в папку system32 из 32-битного приложения на 64-битной системе - не знаю.

проблема ровно в том что с блокнота и тотал коммандерах32 ты можешь как создать так и записать туда файл, похоже все же дело в самом делфи, а именно баг, даже СейвДиалог при открытии папки показывает другую папку

UPD да все такие косяк делфи, собрал прилу х64 все равно тот же косяк

Последний раз редактировалось udman, 28.09.2016 в 13:59.
Ответить с цитированием
  #4  
Старый 28.09.2016, 15:53
udman udman вне форума
Прохожий
 
Регистрация: 27.09.2016
Сообщения: 3
Версия Delphi: xe8
Репутация: 10
По умолчанию

Цитата:
Сообщение от udman
проблема ровно в том что с блокнота и тотал коммандерах32 ты можешь как создать так и записать туда файл, похоже все же дело в самом делфи, а именно баг, даже СейвДиалог при открытии папки показывает другую папку

UPD да все такие косяк делфи, собрал прилу х64 все равно тот же косяк

UPD
может кому пригодится

This is because the WOW64 file system redirection, if your 32-bit app that want to gain access to the native system32 directory, you must use the Wow64DisableWow64FsRedirectionfunction or the Sysnative Alias.

Wow64DisableWow64FsRedirection

Try this sample

Код:
{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows;

Function Wow64DisableWow64FsRedirection(Var Wow64FsEnableRedirection: LongBool): LongBool; StdCall;
  External 'Kernel32.dll' Name 'Wow64DisableWow64FsRedirection';
Function Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection: LongBool): LongBool; StdCall;
  External 'Kernel32.dll' Name 'Wow64EnableWow64FsRedirection';

Var
  Wow64FsEnableRedirection: LongBool;
begin
 try
    if Wow64DisableWow64FsRedirection(Wow64FsEnableRedirection) then
    begin
      if FileExists('c:\windows\system32\alg.exe') then
       Writeln('fe')
      else
       Writeln('fne');

      if not Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection) then
       RaiseLastOSError;
    end
    else
    RaiseLastOSError;
 except
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Writeln('Press Enter to exit');
 Readln;

end.
end.

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter