【问题标题】:Access denied when copying files to Visual Studio's installation folder将文件复制到 Visual Studio 的安装文件夹时访问被拒绝
【发布时间】:2015-06-15 20:17:40
【问题描述】:

我正在为Visual Studio 2013 写一个VSPackage。这个包应该下载一些 XML Schema 文件,然后将它们复制到 Visual Studio 的%installation folder%\Xml\Schemas

我使用WebClient 下载文件。当我将目标文件夹设置为 C:\Test 之类的文件夹时,它可以完美运行。这是执行此操作的代码:

webclient.DownloadFileAsync(url, "% Destination Folder Here %");

问题:

当我将目标 foder 设置为 "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Xml\Schemas" 时,我收到以下错误:

拒绝访问路径“C:\Program Files (x86)\Microsoft Visual Studio 12.0\Xml\Schemas”。

我试过了:

1 - 在 Windows 中手动更改文件夹权限。

2 - (我更喜欢这样做) 用 C# 更改代码中的访问权限:

ApplicationVariables.SCHEMA_PATH = @"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Xml\Schemas";

//  Set access to the schema directory.
DirectoryInfo schemaDirectoryInfo = new DirectoryInfo(ApplicationVariables.SCHEMA_PATH);
DirectorySecurity schemadirectorySecurity = schemaDirectoryInfo.GetAccessControl();
schemadirectorySecurity.AddAccessRule(
     new FileSystemAccessRule(
            new SecurityIdentifier(WellKnownSidType.WorldSid, null),
            FileSystemRights.FullControl,
            AccessControlType.Allow)
            );

// I also have tried this
        FileIOPermission filePermission = new FileIOPermission(FileIOPermissionAccess.AllAccess, ApplicationVariables.SCHEMA_PATH);
        try
        {
            filePermission.Demand();
        }
        catch (Exception ex)
        {
            Debug.WriteLine("Security Error = " + ex.Message);
        }

问题

我的应用程序如何将一些文件复制到 Visual Studio 安装文件夹中?

【问题讨论】:

  • 您是否尝试过在您的应用程序上使用Run as administrator
  • 您需要将您的进程提升到管理员组(如 sstan 所说)才能写入 Program Files(或 Program File x86)目录。更改文件夹的权限也没关系。
  • 我正在调试模式下运行代码。我如何以管理员身份调试/编译代码?谢谢
  • 如果你在调试模式下运行,那么我相信你需要在Run as administrator模式下运行Visual Studio本身。
  • 在管理员模式下运行 VS 不会将您的进程提升为管理员。为了提升您的流程,您需要在 app.config 文件中添加一些信息。见stackoverflow.com/questions/2818179/…

标签: c# visual-studio security vspackage


【解决方案1】:

需要管理员权限,并且默认情况下 VS 2008 或更高版本不会运行提升(具有管理员权限),用户应使用“以管理员身份运行”上下文菜单条目启动 VS。包不应强制用户执行此操作,这意味着包无法将文件复制到 C:\Program Files (x86)(或写入注册表配置单元 HKEY_LOCAL_MACHINE)。

你的包的设置可以做到这一点(如果这样设计,设置可以默认以管理员权限运行),但你的包不能。

【讨论】:

  • 我以 Admin 运行 Visual Studio,VSPackage 能够复制文件。现在,如果用户没有以管理员身份运行 Visual Studio,我的 VSPackage 如何向用户询问管理员权限或以某种方式复制文件?
猜你喜欢
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多