【发布时间】: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