如何使用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对话框正在做什么呢?
答案 0 :(得分:1)
正如Hans Passant曾经回答的那样,旧的GAC由shell扩展显示,它掩盖了目录结构。这是为了确保正确管理GAC中的程序集。故意不支持打开目录结构。在.NET 4中,情况已经不再如此,所以如果你可以升级,那就是最佳选择。
要以编程方式打开旧GAC,有几个选项,但同样,它通常会被掩盖是有原因的。选项:
删除shell扩展名。您可以取消注册Shfusion.dll,打开目录,然后重新注册。当然,这可能会出错并让您将Shfusion.dll永久取消注册。这将允许其他用户自由地处理GAC目录结构和文件,这会导致它变得无效并与注册表=不同步。
禁用shell扩展。 HKLM Fusion注册表项可以具有DisableCacheViewer DWORD值。设置为1时,将禁用视图。密钥可以设置为1,窗口打开,然后密钥可以设置回0.这种方法与选项1具有相同的风险。此外,作为用户(Damien)的评论似乎已被删除指出,其他进程也可能使用此全局密钥导致竞争条件=坏。
使用Total Commander(感谢Csaba Toth)或远程管理器等第三方应用程序来查看目录结构而不是资源管理器。这里的缺点是,假设他们甚至可以接受允许他们打开GAC目录的参数,那么需要在我想运行我的应用程序的任何地方安装该软件。
如果您正在考虑使用选项1或2,请注意在大多数情况下它们都是一个坏主意,除非您正在使用自己的机器,否则应该避免使用它们。此目录结构与注册表同步,不应直接编辑。使用Gacutil.exe管理GAC中的程序集。