【问题标题】:Using GAC assemblies needs permissions使用 GAC 程序集需要权限
【发布时间】:2013-06-03 13:41:10
【问题描述】:

我刚刚在 GAC 上安装了两个库,我试图在一个简单的应用程序中使用它们,我只调用我的方法的构造函数:

  MyMethod m = new MyMethod();

当我尝试运行我的应用程序的.exe 时,我可以在任务管理器进程中看到它,但它没有加载。

如果我提升了可执行文件的权限,那么简单的应用程序会出现在任务管理器中,并且还会加载。但是,为什么我需要为使用 GAC 程序集的应用程序授予管理员权限?这是我第一次遇到这种情况。

如何在不请求管理员权限的情况下使用 GAC 程序集?

我认为我有 GAC 阅读权限,因为我可以阅读旧版本,但不能阅读新版本...

编辑: *我意识到,如果我停留几分钟,.dll 就会被消耗,应用程序就会运行。但是每次我需要在 GAC 上安装的程序集时,都会有很大的延迟。* 知道为什么吗?

编辑: 抱歉,我没说是哪个库,因为它叫UserControlLibrary.dll,我自己开发的。我的一些旧项目中使用了我的库的旧版本。

为了使用新版本,我发布了从旧版本程序集重定向到新版本的策略。

注意:使用旧版本可以正常工作。使用新的,不起作用(重定向后)。

【问题讨论】:

  • 为什么投反对票而不解释原因?我有一个非常重要的问题,至少我会非常感谢人们解释反对票,所以我可以改进我的问题,幸运的是,有人可以帮助我......

标签: c# assemblies .net-assembly gac gacutil


【解决方案1】:

您能否更具体地了解哪些程序集以及您的代码试图做什么?...

授予管理员权限有点笼统......更有可能需要您没有提供的某些权限......

例如这里是关于SharePoint SSRSSvcAccount 帐户没有 GAC 读取权限的相同问题的一点小插曲,使用解决了这个问题

cacls.exe %windir%/assembly /e /t /p DOMAIN\SSRSSvcAccount:R

【讨论】:

  • 这不是问题。我可以从 GAC 读取,但如果我的应用程序未以管理员身份运行但未加载,我的应用程序仍处于 TaskManager 的后台。
  • 您是如何将它安装到 GAC 中的?你看过ACL吗? systemroot 目录通常使用访问控制列表 (ACL) 进行保护,以控制写入和执行访问。因为全局程序集缓存安装在 systemroot 目录的子目录中,所以它继承了该目录的 ACL。
  • 我使用 WiX 安装它,并将其发布为 Assembly=".net"
  • hmmm... dll 驻留在哪里?它在受信任的区域吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多