【问题标题】:vista programdata command line accessvista programdata 命令行访问
【发布时间】:2011-03-05 03:35:03
【问题描述】:

我有一个应用程序将数据(original.dat)存储到文件夹 C:\ProgramData (我使用带有 CSIDL_COMMON_APPDATA 的 CSIDL 的 SHGetFolderPath() 来访问文件夹)

还需要调用带参数的命令行执行文件(myexecute.exe) c:\program files\myname\appname\myexecute.exe original.dat outputfile.dat(outputfile.dat 将在 C:\ProgramData 中) 它在 xp 上工作,但它在 vista 上报告错误“访问被拒绝”。 看起来预示着在文件夹中创建 outputfile.dat。

欢迎评论

谢谢

马克

【问题讨论】:

  • 如果您需要具体的指导,生成错误的代码的 sn-p 将非常有帮助。另外,什么版本的Delphi?
  • 这里不需要代码,只需要停止写入您没有写入权限的文件夹,正如 Ken 所说
  • vista中是否有一个文件夹在任何情况下都没有关于“访问被拒绝”的问题?

标签: delphi windows-vista


【解决方案1】:

CSIDL_COMMON_APPDATA 适用于所有用户,由于 UAC,非管理员用户不可写。它在安装期间对管理员是可写的,但以后不应该使用。

您应该对当前用户的数据使用 CSIDL_APPDATA。

【讨论】:

  • +1。 Some Microsoft guidelines for use of CSIDL_COMMON_APPDATA。我查了一下,因为它对我来说并不直观。链接说:By default, this location is read-only for normal (non-admin, non-power) Users. If an application requires normal Users to have write access to an application specific subdirectory of CSIDL_COMMON_APPDATA, then the application must explicitly modify the security on that sub-directory during application setup..
  • CSIDL_APPDATA,结果相同,我估计大多数 vista 兼容问题都与此有关
  • 我只是想知道在安装我的应用程序时是否需要做一些事情(我使用 Inno Setup,也许我需要在 Inno 脚本中做一些事情)
  • 我不希望将 UAC 权限升级为管理员。这不是我喜欢的方式。
  • @monsabre,刚刚发现在 InnoSetup 脚本中可以使用 {commonappdata} 来引用 CSIDL_COMMON_APPDATA
猜你喜欢
  • 2010-09-12
  • 2011-01-22
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 2012-09-09
相关资源
最近更新 更多