Win32 - 获取将文件保存到C盘的权限

时间:2012-10-10 13:36:21

标签: file winapi permissions uac privileges

我有一个程序,用户可以将输出会话保存到文本文件中。这很好用,但是当我尝试将文件保存到C:\这样的位置时,它会显示一个错误对话框:

You don't have permission to save to this location. Contact the administrator to obtain permission. Would you like to save to the Documents folder instead?

当我点击“否”,认为它只是取消操作时,我的应用程序崩溃了。 我不希望我的应用程序需要管理权限,但是在尝试保存文件时,我是否要求用户提供权限(例如打开UAC对话框,如果需要提供身份验证) )。如果用户无法提供权限,我希望保留在“保存文件”对话框中,直到用户选择他们有权保存的位置,或者按取消。我真的不希望在程序启动时询问权限,只是当用户将文件保存到他们需要权限的位置时。

顺便提一下,我在运行应用程序时以管理员身份登录,这是我运行Windows Vista的计算机上唯一的帐户。

2 个答案:

答案 0 :(得分:4)

应用程序仅在启动时提升。要模拟“在运行时获取UAC权限并且仅在需要时”,您实际上需要对应用程序进行分区,以便启动第二个进程(例如,写入文件),并且此进程可能会被提升。你可以做到这一点,但这很多工作很少或没有任何好处。

UAC的重点是改变用户和应用程序处理硬盘的方式。 C的根不是写东西的聪明之处。使用AppData或Documents,或创建自己的文件夹,如C:\ MySpecialApp(添加配置文件的路径)并在那里写。如果你坚持写C的根,那么你需要管理员权限,这没有多大意义。

答案 1 :(得分:0)

请按照以下步骤操作:

  1. 右键单击云端硬盘并选择“属性”,然后转到“安全”选项卡,再单击“编辑”。

  2. 将打开一个新窗口,现在在“组和用户名”下,从列表中选择您要拒绝/允许访问特定文件夹的用户,现在在“用户权限”下选中“拒绝”修改旁边的/允许复选框(所有其他复选框将自动勾选)。

  3. 单击“确定”,然后在弹出“Windows安全性”窗口时单击“是”。

  4. 现在再次点击“确定”即可完成