我想在独立于用户的哺乳中为我的应用程序创建日志文件。据我所知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
也不Everyone
在Properties->Security->Group or user names
.
这会导致其他用户无法修改创建的文件。
但是我怎样才能实现这一点,其他用户也可以修改创建的文件。
我认为那里一定有可能拥有具有此权限的文件。有些文件确实有此权限,例如C:\ProgramData\Microsoft\Windows\Ringtones\Ringtone *.wav
也许在
1.) 以某种方式在 C:\ProgramData
中创建一个“MyApp”文件夹与 Authenticated Users
或Everyone
权限将导致 TFileStream
自动创建具有相同权限的文件或
2.) 以某种方式告诉我们 TFileStream
创建具有所需权限的文件或
3.) 在创建文件后使用某些 API 函数以某种方式更改文件权限或
4.)其他方式?
最佳答案
C:\ProgramData
(又名FOLDERID_ProgramData
)中的默认权限允许任何用户创建新文件和文件夹。但是,只有创建该文件或文件夹的用户才有权对其进行写入。
因此,如果您希望允许任何用户修改 FOLDERID_ProgramData
下的对象,那么您需要添加宽松的 ACL 来授予这些权限。您通常会在安装程序时执行此操作。在 FOLDERID_ProgramData
下创建一个文件夹,并添加 ACL 以向您希望允许完全访问的任何类别的用户授予权限。
顺便说一句,显然您不应该对 C:\ProgramData
进行硬编码,而应将 FOLDERID_ProgramData
与已知的文件夹 API 一起使用。我猜问题中的代码只是为了测试,你的真实程序代码正确地做到了这一点。
关于windows - 在 C :\ProgramData 中创建用户独立的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34016784/