我有一个小托盘应用程序,它想要写入到Program Files目录下自己的文件夹中。我知道这不是一个终极设计,我会修复它,但首先我想了解它是如何工作的。
在32位的Vista机器上运行它,它会将文件写入VirtualStore,并且它会正常工作。
但是当我在Vista64位机器上安装它时,当我试图写入Program Files (和Program Files (x86))中的目录时,我马上就会遇到一个UnauthorizedAccessException。
VirtualStore重定向似乎在Vista64位上不起作用。有什么想法吗?
这是一个用Visual Studio2008编写的C#应用程序,我使用FileStream对象将流持久化到磁盘。
发布于 2009-02-06 13:27:14
因此,我实际上是通过将所有项目编译到目标平台x86来实现这一点的。因此,x64不能在Vista64上与VirtualStore一起工作,也不能编译成“任何CPU”。我必须为整个解决方案设置它(在Configuration Manager中),仅为每个单独的项目设置它是行不通的。
是时候使用AppData文件夹或IsolatedStorage重写它了。谢谢你的帮助!
发布于 2009-02-06 10:56:31
有更多关于错误的信息吗?
您是否使用sysinternals工具来监控执行/访问错误?
也可以查看事件查看器中的错误。
发布于 2009-02-06 11:03:59
我现在就把它修好。无论如何,你都不应该把你的东西写到那个目录中,这违反了指导方针。当多个用户同时登录到服务器时,您的产品将无法工作,即使是VISTA之前的版本也是如此。
Vista64位会检测到你是一个32位的应用程序,并会自动将你修改“程序文件”的尝试重定向到“程序文件x86”。事实上,它让你完全相信你是在32位系统上运行的(参见here)。
我怀疑在这个模拟层中有额外的保护,防止程序试图改变Program Files下的东西。或者,在Vista 64位(或更可能的模拟层)下,ACL设置得更好。
结论:不要做你正在做的事情,微软已经告诉我们不要这么做很长一段时间了。
https://stackoverflow.com/questions/519828
复制相似问题