【问题标题】:Open C:\windows\assembly\gac_msil from C#从 C# 打开 C:\windows\assembly\gac_msil
【发布时间】:2013-12-03 19:25:54
【问题描述】:

如何使用 C# 在 Windows 资源管理器窗口中打开 C:\windows\assembly\gac_msil

说明:当我在开发环境中将程序集部署到 GAC 时,我喜欢将 .pdb 符号文件部署到与位于 C:\Windows\assembly\GAC_MSIL\AssemblyName\Version__PublicKeyToken\ 的程序集相同的目录中。这样,如果我想附加 Visual Studio 调试器,它会自动找到符号文件。

我构建了一个小实用程序,可以检测我何时将我的一个程序集添加到 GAC,并且我希望它显示一个为我弹出打开目录的按钮。我有按钮和路径,但启动一个使用路径启动 explorer.exe 的进程不起作用。我知道在 Windows 中打开此目录的唯一方法是通过“运行”对话框。

您无法在资源管理器中访问它或使用命令行命令:explorer.exe "C:\Windows\assembly\GAC_MSIL..."。仅当您在“运行”对话框中键入路径时。那么我该如何做 Run 对话框正在做的事情呢?

【问题讨论】:

  • 看看 DEVPATH 环境变量,也许它对你有用,特别是如果你想调试 3rd 方 dll,或覆盖某些部分:msdn.microsoft.com/en-us/library/cskzh7h6%28v=vs.110%29.aspx
  • 太棒了!我想我可能会得到一些有用的提示。以这种方式使用时,程序集是否被授予完全信任?
  • 旧 GAC 通过 shell 扩展显示。无论你做什么来禁用它都不是你可以在你部署的机器上做的事情,你不拥有那个可以搞乱的机器。
  • 我确实拥有那个。你的回答怎么了?它消失了。
  • 作为记录,我让它工作,但最终允许将 .pdb 拖放到我的窗口中以将其复制到 GAC 文件夹。这种方式不需要任何黑客攻击。

标签: c# windows gac explorer


【解决方案1】:

正如 Hans Passant 曾经回答的那样,旧的 GAC 由一个外壳扩展名显示,该扩展名掩盖了目录结构。这是为了确保正确管理 GAC 中的程序集。故意不支持打开目录结构。在 .NET 4 中,情况不再如此,所以如果您可以升级,那就是要走的路。

要以编程方式打开旧 GAC,有几个选项,但同样,它通常被屏蔽是有原因的。选项:

  1. 删除外壳扩展。您可以取消注册 Shfusion.dll,打开目录,然后重新注册。当然,这可能会出错并让您永久未注册 Shfusion.dll。这将允许其他用户随意弄乱 GAC 目录结构和文件,这将导致它变得无效并与注册表不同步 = 坏。

  2. 禁用外壳扩展。 HKLM Fusion 注册表项可以具有 DisableCacheViewer DWORD 值。当设置为 1 时,它将禁用视图。可以将密钥设置为1,打开窗口,然后可以将密钥设置回0。这种方法与选项1具有相同的风险。此外,正如评论似乎已被删除的用户(Damien)指出的那样,其他进程也可能使用此全局键导致竞态条件 = 错误。

  3. 使用诸如 Total Commander(感谢 Csaba Toth)或 Far Manager 之类的第 3 方应用程序而不是 Explorer 来查看目录结构。这里的缺点是,假设他们甚至可以接受参数以允许他们打开 GAC 目录,则需要在我想运行我的应用程序的任何地方安装该软件。

如果您正在考虑使用选项 1 或 2,请注意,在大多数情况下,它们不是一个好主意,应该避免使用,除非您正在使用自己的机器。此目录结构与注册表同步,不应直接编辑。使用 Gacutil.exe 管理 GAC 中的程序集。

【讨论】:

  • 更正:Hans 使用Far Manager。他提到了Norton Commander,但作为对“文件指挥官”运动的参考,诺顿指挥官是为 DOS 服务的,其他指挥官是其衍生产品。
  • 相应更新。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 2015-09-27
  • 1970-01-01
相关资源
最近更新 更多