Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t使用FileIOPermission以适当的权限复制文件_C#_File_Permissions_Copy - Fatal编程技术网

C# Can';t使用FileIOPermission以适当的权限复制文件

C# Can';t使用FileIOPermission以适当的权限复制文件,c#,file,permissions,copy,C#,File,Permissions,Copy,如果我尝试在用户目录中写入,那么这个代码段工作得很好,但只要我尝试在程序文件中写入,它就会以静默方式执行,并且文件没有被复制(没有例外)。如果我尝试在C:\或C:\ Windows中复制文件,我会捕获一个UnauthorizedAccessException 您知道另一种获得在该目录中写入权限或使其以另一种方式工作的方法吗 非常感谢您的帮助!谢谢 using(FileStream fs=File.Open(source, FileMode.Open)){ } try { Fi

如果我尝试在用户目录中写入,那么这个代码段工作得很好,但只要我尝试在程序文件中写入,它就会以静默方式执行,并且文件没有被复制(没有例外)。如果我尝试在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;
}
使用(FileStream fs=File.Open(source,FileMode.Open)){
尝试
{  
FileIOPermission fp=新建FileIOPermission(FileIOPermissionAccess.Write,
AccessControlActions.Change,“C:\\ProgramFiles\\MyPath”);

fp.Demand();//不要写入程序文件文件夹。


这是一个大禁忌,尤其是当您的代码在Vista中运行或在用户仅获得标准安全性而非管理员权限的公司的计算机上运行时,这会导致问题。请改用“应用程序数据”文件夹。

代码访问安全性授予或拒绝您的代码权限。
它不能用于覆盖授予/拒绝给当前用户的权限。

是否在Vista上运行?如果是这样,则可能正在运行文件系统虚拟化。这是32位版本的Vista中的一项功能,允许普通用户写入文件系统的受保护部分。它是一个垫片,用于减少用户的痛苦Vista的LUA功能

简短的版本是,操作系统将为某些受保护的根(如程序文件)创建虚拟文件系统。当非管理员尝试写入时,将创建一个已编辑的副本,而不是原始副本。当您的用户帐户尝试查看该文件时,它将看到该编辑。其他用户帐户将只看到原始文件


更长的版本:

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

您所要做的就是向您的程序添加一个清单,指定所需的访问级别,然后系统假定您的程序支持Vista,并关闭所有这些兼容性修补程序

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


(本文的重点是获取正确版本的常用控件,但Vista安全声明也在其中)

当重新引发异常时,只需使用throw;-throw s;即可删除堆栈跟踪。