1

我有一个小托盘应用程序,它想要写入 Program Files 目录下自己的文件夹。我知道这不是终极设计,我会修复它,但首先我想了解它是如何工作的。

在 32 位 Vista 机器上运行它会将文件写入 VirtualStore,它的工作方式与它应有的一样。

但是当在 Vista 64 位机器上安装它时,我立即遇到 UnauthorizedAccessException 尝试写入 Program Files(和 Program Files (x86))中的目录。

VirtualStore 重定向似乎不适用于 Vista 64 位。有任何想法吗?

这是一个用 Visual Studio 2008 编写的 C# 应用程序,我使用 FileStream obj 将流保存到磁盘。

4

3 回答 3

1

有更多关于错误的信息?
您是否使用 sysinternals 工具来监控执行/访问错误?
看看事件查看器是否有错误。

于 2009-02-06T10:56:30.890 回答
1

我现在就修。无论如何,您永远都不应该将您的东西写入该目录,这违反了准则。当有多个用户同时登录到服务器时,您的产品将无法工作,即使是在 VISTA 之前。

Vista 64 位将检测到您是 32 位应用程序,并会自动将您修改“Program Files”的尝试重定向到“Program Files x86”。事实上,它完全让您相信您在 32 位系统上运行(请参阅此处)。

我怀疑这个仿真层有额外的保护,可以防止程序试图改变 Program Files 下的东西。或者,ACL 可能在 Vista 64 位(或者更可能的仿真层)下设置得更好。

底线:不要做你正在做的事情,微软已经告诉我们不要这样做很长时间了。

于 2009-02-06T11:03:59.393 回答
1

所以我实际上是通过将所有项目编译到目标平台 x86 来完成这项工作的。所以 x64 不适用于 Vista 64 上的 VirtualStore,也不能编译到“任何 CPU”。而且我必须为整个解决方案设置它(在配置管理器中),只是为每个单独的项目设置它是行不通的。

是时候使用 AppData 文件夹或 IsolatedStorage 重写它了。感谢所有的帮助!

于 2009-02-06T13:27:13.613 回答