我的 winforms .net 2 程序在打开 UAC 的 Windows 7 中运行良好。程序读取/写入c:/program files
文件夹。
将程序更新到目标 .net 4 后,同一程序受 UAC 影响,无法再读取/写入c:/program files
。我明白了UnauthorizedAccessException
。
我知道读/写是一种不好的做法,c:/program files
但我想知道是什么导致了这种行为?
不,这是不可能的,Winforms 或 .NET 框架中没有任何更改导致突然禁止写入 c:\program 文件。或者就此而言可能。
我能想到的唯一可能的解释是您以前使用过 Visual Studio 2005。没有 Vista 服务包的原始 RTM 版本。它在 Vista之前发布,因此尚未将清单添加到让 Windows 知道您的程序与 UAC 兼容所需的 EXE。您可以使用 Project + Add New Item, General, Application Manifest File 查看该清单的外观。基本条目是:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
为了能够写入 c:\program 文件,您必须将level
属性更改为“requireAdministrator”。
如果没有该清单条目,Windows 会将您的程序视为尚不了解 UAC 的旧程序。所以看起来你可以写入 c:\program 文件。但并非如此,Windows 会将文件访问重定向到隔离存储。
更改清单会起作用,但如果您的用户经常运行您的程序,则可能不会收到非常好的效果。使您的代码与 UAC 兼容是更好的解决方案,而是将文件写入 AppData。