gpt4 book ai didi

windows - 在 C :\ProgramData 中创建用户独立的日志文件

转载 作者:可可西里 更新时间:2023-11-01 10:19:11 24 4
gpt4 key购买 nike

我想在用户独立的哺乳期为我的应用程序创建日志文件。据我所知C:\ProgramData是个好地方。

我试过这种方法:

if not DirectoryExists('C:\ProgramData\MyApp') then
CreateDirectory('C:\ProgramData\MyApp', nil);

LogFileStream := TFileStream.Create('C:\ProgramData\MyApp\LogFile01.txt', fmCreate, (fmOpenRead or fmShareDenyNone));

这种方法的问题是创建的文件没有Authenticated Users也不EveryoneProperties->Security->Group or user names .

这会导致其他用户无法修改创建的文件。

但是我怎样才能做到这一点,其他用户也愿意修改创建的文件。

我认为那里一定有可能拥有具有此权限的文件。有些文件确实具有此权限,例如C:\ProgramData\Microsoft\Windows\Ringtones\Ringtone *.wav

也许在

1.) 以某种方式在 C:\ProgramData 中创建“MyApp”文件夹与 Authenticated UsersEveryone会导致 TFileStream 的权限自动创建具有相同权限的文件或

2.) 以某种方式告诉 TFileStream创建具有所需权限的文件或

3.) 以某种方式在文件创建后使用某些 API 函数更改文件权限,或者

4.) 其他方式??

最佳答案

C:\ProgramData 中的默认权限,又名 FOLDERID_ProgramData 允许任何用户创建新文件和文件夹。但是,只有创建文件或文件夹的用户才有权写入。

因此,如果您希望允许任何用户修改 FOLDERID_ProgramData 下的对象,那么您需要添加一个许可 ACL 来授予这些权限。您通常会在安装程序时这样做。在 FOLDERID_ProgramData 下创建一个文件夹并添加一个 ACL 以向您希望允许完全访问的任何类别的用户授予权限。

顺便说一句,显然您不应该对 C:\ProgramData 进行硬编码,而应该使用具有已知文件夹 API 的 FOLDERID_ProgramData。我想问题中的代码只是为了测试,你的真实程序代码是正确的。

关于windows - 在 C :\ProgramData 中创建用户独立的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34016784/

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