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

我想在独立于用户的哺乳期中为我的应用程序创build日志文件。 AFAIK 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)); 

这种方法的问题是创build的Authenticated Users没有Authenticated Users也没有Properties->Security->Group or user names

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

但是我怎样才能做到这一点,也有其他用户正在修改创build的文件。

我认为在这里必须有这个权限的文件。 有些文件具有此权限,例如C:\ProgramData\Microsoft\Windows\Ringtones\Ringtone *.wav

也许是在

1.)以某种方式在C:\ProgramData创build一个“MyApp”文件夹,使用Authenticated UsersEveryone权限,这会导致TFileStream自动创build具有相同权限的文件,或者

2.)不知何故告诉TFileStream创build具有所需的权限或文件

3)不知何故,在创build或更改后,使用某个API函数更改文件权限

4.)另外一些方法?

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

因此,如果您希望允许任何用户修改FOLDERID_ProgramData下的对象,则需要添加一个允许的ACL来授予这些权限。 您通常会在安装程序时执行此操作。 在FOLDERID_ProgramData下创建一个文件夹,并添加一个ACL,授予您希望允许完全访问权限的用户。

FOLDERID_ProgramData一下,显然你不应该硬编码C:\ProgramData ,而是使用FOLDERID_ProgramData与已知的文件夹API。 我猜这个问题的代码只是为了测试,而你的真正的程序代码是正确的。