我有一个非常简单的 exe,它可以与其他一些东西一起下载到一个 zip 文件中。我想要做的是将这些文件之一移动到程序文件中的某个位置。但是,当我这样做时,它说我没有权限,除非我以管理员身份运行它。我并不总是有这个选项。我对此表示怀疑,但是如果没有管理员权限,有没有办法做到这一点?这就是它所做的一切:
File.Copy(@"c:/file.txt", @"C:/Program Files (x86)/Folder/file.txt");
我有一个非常简单的 exe,它可以与其他一些东西一起下载到一个 zip 文件中。我想要做的是将这些文件之一移动到程序文件中的某个位置。但是,当我这样做时,它说我没有权限,除非我以管理员身份运行它。我并不总是有这个选项。我对此表示怀疑,但是如果没有管理员权限,有没有办法做到这一点?这就是它所做的一切:
File.Copy(@"c:/file.txt", @"C:/Program Files (x86)/Folder/file.txt");
不,除非您(作为管理员)已经为您的用户设置了写入该目录的访问权限,否则无法做到这一点。Program Files 的正常访问权限不会让普通用户写入该位置,并且没有覆盖。
这样做的一个原因是为了防止病毒感染您的系统。由于Program Files
是所有用户共享的,因此放置在那里的文件可能会被所有登录系统的用户执行。
此外,它还可以防止写得不好的程序将设置保存在程序文件中,这可能会影响/覆盖其他用户的设置。
using System.Security.AccessControl;
using System.Security.Principal;
var dir = System.Environment.ExpandEnvironmentVariables("%systemdrive%\\Program Files");
if (!Directory.Exists(dir))
{
//System.IO.Directory.CreateDirectory(dir);
string fileName = "file.txt";
string sourcePath = @"C:/"; //@AppDomain.CurrentDomain.BaseDirectory;
string targetPath = dir;
string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
string destFile = System.IO.Path.Combine(targetPath, fileName);
System.IO.File.Copy(sourceFile, destFile, true);
}