我想在用户独立的哺乳期为我的应用程序创建日志文件。 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));
此方法存在的问题是创建的字段在Authenticated Users
中没有Everyone
或Properties->Security->Group or user names
。
这导致其他用户无法修改创建的文件。
但是我怎样才能实现这一点,其他用户也可以修改创建的文件。
我认为必须有可能拥有此权限的文件。某些文件具有此权限,例如C:\ProgramData\Microsoft\Windows\Ringtones\Ringtone *.wav
也许在
中 1。)以某种方式创建了一个“MyApp' C:\ProgramData
中具有Authenticated Users
或Everyone
权限的文件夹会导致TFileStream
自动创建具有相同权限的文件或
2.)以某种方式告诉TFileStream
创建具有所需权限的文件或
3。)以某种方式在创建后使用某些API函数更改文件权限或
4.)其他一些方法??
答案 0 :(得分:2)
C:\ProgramData
中的默认权限,即FOLDERID_ProgramData
,允许任何用户创建新文件和文件夹。但是,只有创建文件或文件夹的用户才有权写入该文件或文件夹。
因此,如果您希望允许任何用户修改FOLDERID_ProgramData
下的对象,则需要添加许可ACL以授予这些权限。安装程序时通常会这样做。在FOLDERID_ProgramData
下创建一个文件夹,并添加一个ACL,以便为您希望允许完全访问权限的任何类别的用户授予权限。
顺便说一下,显然你不应该硬编码C:\ProgramData
,而应该使用已知文件夹API的FOLDERID_ProgramData
。我想问题中的代码仅用于测试,而您的真实程序代码是正确的。