【问题标题】:Can't write to application directory in Program Files无法写入 Program Files 中的应用程序目录
【发布时间】:2010-03-03 16:34:35
【问题描述】:

我需要写入安装在 Program Files 下的应用程序目录中的一些文件。我知道在 Vista 和 Windows 7 上启用 UAC 后,用户无法修改此目录中的文件。但是,我知道在 Vista 中添加的 UAC 虚拟化基本上将写入重定向到 virtualstore directory 。在 Vista 中这很好用,我的文件实际上被写入了这个 virtualstore 目录。但是,在 Windows 7 上,我收到拒绝访问错误,并且我的文件根本没有写入该目录。什么给了?

【问题讨论】:

    标签: c# windows-7


    【解决方案1】:

    我不确定您要做什么,但您不应该在程序文件目录中写入数据,除非您正在升级或修改应用程序本身。

    我会更改代码以写入正确的位置。 Vista 重定向只是防止应用程序崩溃的一个工具。

    始终使用Environment.GetFolderPath 方法获取系统路径。

    【讨论】:

    • 我意识到写入程序文件目录并不是完全正确的行为,我将在未来的版本中解决这个问题,但我只是想提出一个权宜之计。我不明白为什么 Vista 和 7 之间的行为不同。
    • @Jason - 我明白了,那么 Henk 的回答是合适的。
    【解决方案2】:

    它是完全相同的二进制文件还是重新编译(在 Win7 下)?

    如果您的应用程序清单表明它支持 Vista,那么 Vista 也会出错。

    【讨论】:

    • 这是在 Vista 和 7 上使用的相同二进制文件。
    • 啊,糟糕,我仔细检查了一下,发现我已将应用程序更改为使用默认清单设置。我只是在没有任何清单的情况下重建了它,然后虚拟商店就启动了。谢谢。
    • 嗯,我刚刚注意到另一个奇怪的事情。当我在 32 位 Win7 机器上使用二进制文件时,它工作正常(在没有清单的情况下构建时)。但是,当我将它放在 Win7 64 位机器上时,我再次收到拒绝访问错误。 Win7 64位是否有可能强制执行vista-aware行为?我刚刚在 Vista 64 位上尝试过,没有任何问题...
    • 好的,刚刚想通了。我必须将程序集构建为 x86 而不是任何 cpu。有很多条件可以控制虚拟化。以下是更多信息:social.msdn.microsoft.com/Forums/en-CA/vcgeneral/thread/…
    【解决方案3】:

    你试过用IsolatedStorageFile吗?

    【讨论】:

      猜你喜欢
      • 2014-01-29
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 2016-02-25
      相关资源
      最近更新 更多