将.net 2 winforms更新为.net 4现在它受到了UAC的影响

AZ.*_*AZ. 0 .net uac winforms

我的winforms .net 2程序在Windows 7中运行正常,UAC打开.程序读/写c:/program files文件夹.
将程序更新为目标.net 4后,同一程序受UAC影响,无法读取/写入c:/program files.我得到UnauthorizedAccessException.

知道读/写是一种不好的做法,c:/program files但我想知道导致这种行为的原因是什么?

Han*_*ant 5

不,这是不可能的,Winforms或.NET Framework一般没有任何变化,这使得写入c:\ program文件突然被禁止.或者就此而言.

我能想到的唯一可能的解释是您之前使用的是Visual Studio 2005.没有Vista Service Pack的原始RTM版本.这是 Vista 之前发布的,所以还没有将清单添加到EXE中,这需要让Windows知道您的程序与UAC兼容.您可以使用Project + Add New Item,General,Application Manifest File查看该清单的样子.必要条目是:

   <requestedExecutionLevel level="asInvoker" uiAccess="false" />
Run Code Online (Sandbox Code Playgroud)

为了能够写入c:\ program files,您必须将level属性更改为"requireAdministrator".

如果没有该清单条目,Windows会将您的程序视为尚未了解UAC的遗留程序.所以看起来你可以写入c:\ program files.但事实并非如此,Windows将文件访问重定向到隔离存储.

更改清单将起作用,但如果您的用户经常运行您的程序,可能不会很好地收到清单.使代码与UAC兼容是更好的解决方案,而是将文件写入AppData.

  • 好吧,为精神调试得分.Linker + Manifest文件选项,VS版本很重要.在你去那里之前,请考虑修复真正的问题. (2认同)