我有一个小托盘应用程序想要写入Program Files目录下的自己的文件夹。我知道这不是一个终极设计,我会解决它,但首先我想了解它是如何工作的。
在32位Vista计算机上运行它,将文件写入VirtualStore,它就像它应该的那样工作。
但是当在Vista 64位机器上安装它时,我立即遇到UnauthorizedAccessException,试图写入Program Files(和Program Files(x86))中的目录。
VirtualStore重定向似乎不适用于Vista 64位。有什么想法吗?
这是一个用Visual Studio 2008编写的C#应用程序,我使用FileStream obj将流保存到磁盘。
答案 0 :(得分:1)
有关于错误的更多信息?
您是否使用sysinternals工具进行监视器执行/访问错误?
看看事件查看器是否也出错。
答案 1 :(得分:1)
我现在就解决它。你永远不应该把你的东西写到那个目录,它违反了指南。当多个用户同时登录服务器时,即使是在VISTA之前,您的产品也无法运行。
Vista 64位将检测到您是一个32位应用程序,并将自动重定向您将“Program Files”修改为“Program Files x86”的尝试。事实上,它完全让你相信你在32位系统上运行(见here)。
我怀疑试图在Program Files下更改内容的程序在此仿真层中有额外的保护。或者也许在Vista 64位(或者更有可能是仿真层)下更好地设置ACL。
结论:不要做你正在做的事情,微软已经告诉我们不要这么做了很长时间了。
答案 2 :(得分:1)
所以我实际上通过将所有项目编译到目标平台x86来实现这一点。所以x64在Vista 64上不能与VirtualStore一起使用,也不能编译为“任何CPU”。我必须为整个解决方案(在Configuration Manager中)设置它,只是为每个单独的项目设置它不起作用。
使用AppData文件夹或IsolatedStorage重写它的时间。谢谢你的帮助!