【发布时间】:2016-03-05 03:53:26
【问题描述】:
我想在用户独立的哺乳期为我的应用程序创建日志文件。 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));
这种方法的问题是创建的文件在Properties->Security->Group or user names中既没有Authenticated Users也没有Everyone。
这会导致其他用户无法修改创建的文件。
但是我怎样才能做到这一点,其他用户也可以修改创建的文件。
我认为那里必须有具有此权限的文件。某些文件确实具有此权限,例如C:\ProgramData\Microsoft\Windows\Ringtones\Ringtone *.wav
也许在
1.) 以某种方式在C:\ProgramData 中创建一个具有Authenticated Users 或Everyone 权限的“MyApp”文件夹,这将导致TFileStream 自动创建具有相同权限的文件或
2.) 以某种方式告诉TFileStream 创建具有所需权限的文件或
3.) 在创建后使用某些 API 函数以某种方式更改文件权限或
4.) 其他方式??
【问题讨论】:
-
不要使用硬编码的
'C:\ProgramData'。使用 Windows API 检索此路径 (FOLDERID_ProgramData/CSIDL_COMMON_APPDATA)
标签: windows delphi winapi permissions