将文件复制到 Visual Studio 的安装文件夹时访问被拒绝
Access denied when copying files to Visual Studio's installation folder
我正在为 Visual Studio 2013
写一个 VSPackage
。这个包应该下载一些 XML 架构文件,然后将它们复制到 Visual Studio 的 %installation folder%\Xml\Schemas
.
我使用WebClient
下载文件。当我将目标文件夹设置为像 C:\Test
这样的文件夹时,它工作得很好。这是执行此操作的代码:
webclient.DownloadFileAsync(url, "% Destination Folder Here %");
问题:
当我将目标文件夹设置为 "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Xml\Schemas"
时,出现以下错误:
Access to the path 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\Xml\Schemas' is denied.
我试过了:
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 安装文件夹中?
这需要管理员权限,默认情况下 VS 2008 或更高版本不会 运行 提升(具有管理员权限),用户应使用 "Run as administrator" 上下文菜单条目启动 VS。包不应强制用户执行此操作,这意味着包无法将文件复制到 C:\Program Files (x86)(或写入注册表配置单元 HKEY_LOCAL_MACHINE)。
您的软件包的设置可以做到这一点(如果这样设计,默认情况下设置可以 运行 具有管理员权限),但您的软件包不能。
我正在为 Visual Studio 2013
写一个 VSPackage
。这个包应该下载一些 XML 架构文件,然后将它们复制到 Visual Studio 的 %installation folder%\Xml\Schemas
.
我使用WebClient
下载文件。当我将目标文件夹设置为像 C:\Test
这样的文件夹时,它工作得很好。这是执行此操作的代码:
webclient.DownloadFileAsync(url, "% Destination Folder Here %");
问题:
当我将目标文件夹设置为 "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Xml\Schemas"
时,出现以下错误:
Access to the path 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\Xml\Schemas' is denied.
我试过了:
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 安装文件夹中?
这需要管理员权限,默认情况下 VS 2008 或更高版本不会 运行 提升(具有管理员权限),用户应使用 "Run as administrator" 上下文菜单条目启动 VS。包不应强制用户执行此操作,这意味着包无法将文件复制到 C:\Program Files (x86)(或写入注册表配置单元 HKEY_LOCAL_MACHINE)。
您的软件包的设置可以做到这一点(如果这样设计,默认情况下设置可以 运行 具有管理员权限),但您的软件包不能。