如果我尝试在用户目录中写入,这个代码段效果很好,但是当我尝试在Program Files中编写时,它只是静默执行并且文件没有被复制(也不例外)。如果我尝试在C:\或C:\ Windows中复制文件,我会捕获一个UnauthorizedAccessException。

您是否知道另一种获取在该目录中写入权限或以其他方式工作的方法?

任何帮助非常感谢!感谢

using(FileStream fs=File.Open(source, FileMode.Open)){ }  
try  
{  
    FileIOPermission fp = new FileIOPermission(FileIOPermissionAccess.Write,   
                          AccessControlActions.Change, "C:\\Program Files\\MyPath");  
    fp.Demand();  //<-- no exception but file is not copied
    File.Copy("C:\\Users\\teebot\\Documents\\File.xml","C:\\Program Files\\MyPath\\File.xml",true);  
}  
catch(SecurityExceptions)  
{  
    throw(s);  
} 
catch(UnauthorizedAccessException unauthroizedException)
{
    throw unauthroizedException;
}
有帮助吗?

解决方案

如果您在Vista下运行,那么系统只是将写入重定向到程序文件文件夹,这样做是因为当用户不是管理员(或UAC是)时,将其配置保留在程序目录中的旧程序将继续工作启用)。

您只需在程序中添加一个清单,指定所需的访问级别,然后系统会假设您的程序支持Vista,并关闭所有这些兼容性补丁。

您可以在我的博客上看到清单文件的示例:

http://www.nbdtech.com/blog/archive/2008/06/16/The-Application-Manifest-Needed-for-XP-and-Vista-Style-File.aspx

(帖子的重点是获取正确版本的常用控件,但Vista安全声明也在那里)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top