c# - 打开 C :\windows\assembly\gac_msil from C#

标签 c# windows gac explorer

如何使用 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..."。仅当您在“运行”对话框中键入路径时。那么我该如何做运行对话框正在做的事情呢?

最佳答案

正如 Hans Passant 曾经回答过的那样,旧的 GAC 由屏蔽目录结构的外壳扩展显示。这是为了确保正确管理 GAC 中的程序集。有意不支持打开目录结构。在 .NET 4 中,情况不再如此,因此如果您可以升级,那就是解决之道。

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

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

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

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

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

关于c# - 打开 C :\windows\assembly\gac_msil from C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20085166/

相关文章:

c# - 如果 List<Struct> 中的值等于给定值,则设置 bool 值

c# - 文件上传 - 返回 null

c# - SplitView.PaneClosed 事件可用但不适用于 PaneOpened

windows - "Can' t 读取文件“尝试在批处理文件中排除目录时

c - 如何检测进程是否作为服务安装

powershell - 为什么我的 .NET 4.0 程序集不能使用 Powershell 注册到 GAC?

c# - 计算驱动器上的文件数

python - 如何使用python使用存储在windows证书管理器中的证书

c# - 安装TXTextControl后编译报错

c# - 在 C# 中使用特定版本的 dll