gpt4 book ai didi

delphi - 从 Windows\System32 文件夹中读取 INI 文件

转载 作者:行者123 更新时间:2023-12-01 20:07:41 25 4
gpt4 key购买 nike

为什么我们无法从 Windows\System32 文件夹中读取 .ini 文件?

使用这个例子:

ReadIniFile := TIniFile.Create(Format('%s\System32\%s', [GetEnvironmentVariable('WINDIR'), 'File.ini']));
Result := ReadIniFile.ReadString('HWID', 'A', '');
ReadIniFile .Free;

返回一个空字符串,现在如果删除“System32”并尝试从 Windows 文件夹中读取,则可以正常读取。

最佳答案

如果您将应用程序编译为 32 位,但在 64 位版本的 Windows 上运行它,那么您的代码实际上是尝试从 C:\Windows\SysWOW64\ 读取 INI 文件。文件夹而不是 C:\Windows\System32\文件夹。请参阅File System Redirector更多细节。您可以使用 sysnative别名访问真实System32在WOW64下运行时的文件夹:

function GetWindowsFolder: string
var
Folder: array[0..MAX_PATH-1] of Char;
Len: UINT;
begin
Len := GetWindowsDirectory(Folder, MAX_PATH);
if (Len > 0) and (Len < MAX_PATH) then
Result := IncludeTrailingPathDelimiter(Folder)
else;
Result := '';
end;

function GetSystemFolder: string;
var
Folder: array[0..MAX_PATH-1] of Char;
Len: UINT;
begin
Len := GetSystemDirectory(Folder, MAX_PATH);
if (Len > 0) and (Len < MAX_PATH) then
Result := IncludeTrailingPathDelimiter(Folder)
else
Result := '';
end;

function GetRealSystem32Folder: string
var
IsWow64: BOOL;
begin
if IsWow64Process(GetCurrentProcess(), @IsWow64) and IsWow64 then
begin
Result := GetWindowsFolder;
if Result <> '' then
Result := Result + 'sysnative' + PathDelim;
end else
Result := GetSystemFolder;
end;

...

var
ReadIniFile: TIniFile;
begin
ReadIniFile := TIniFile.Create(GetRealSystem32Folder + 'File.ini');
...
end;

请注意 sysnative别名仅在 WOW64 下工作,因此如果您不想根据是否使用 WOW64 来动态格式化文件路径,那么您可以暂时禁用重定向器:

var
ReadIniFile: TIniFile;
SysFolder: array[0..MAX_PATH-1] of Char;
Len: UINT;
Value: Pointer;
begin
Result := '';
if not Wow64DisableWow64FsRedirection(@Value) then Exit;
try
Len := GetSystemDirectory(SysFolder, MAX_PATH);
if (Len > 0) and (Len < MAX_PATH) then
begin
ReadIniFile := TIniFile.Create(IncludeTrailingPathDelimiter(SysFolder) + 'File.ini');
...
end;
finally
Wow64RevertWow64FsRedirection(Value);
end;
end;

关于delphi - 从 Windows\System32 文件夹中读取 INI 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53384202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com