Windows 7 变通方法,用于将 DLL 拖放到 GAC






3.07/5 (7投票s)
拖放库文件以在 Windows 7 上安装和删除 DLL。
引言
我使用 Visual Studio 进行开发,现在要从工作站上的 XP 切换到 Window 7 x64。令我恼火的一件事是,我不能像在 Windows XP 上那样,简单地将 .NET 库 DLL 拖到程序集文件夹中以将其安装到 GAC 中,或者从程序集文件夹中选择并删除它们以从 GAC 中删除它们。当我尝试这样做时,我收到“访问被拒绝”错误,即使我的域登录名在 Administrators 组中,并且即使我以“以管理员身份运行”启动 Windows 资源管理器。
显然,Microsoft 确实希望您创建安装小程序来安装或删除 GAC 中的库。另一种方法是以实际的机器管理员身份登录,在这种情况下,拖放到 GAC 将起作用。
我喜欢能够在开发工作站上轻松地添加或删除 GAC 中的库,因此我想出了一个解决方法来让我能够这样做。
背景
该方法是创建.bat命令文件,该文件使用gacutil.exe添加或删除库,在库文件被拖到命令文件时捕获库的名称,并使命令文件以管理员身份运行。Windows 7 不允许您将.bat命令文件设置为以管理员身份运行,因此为每个命令文件创建一个快捷方式,并将该快捷方式设置为以管理员身份运行。
Using the Code
此方法需要gacutil.exe。 如果您已安装 Visual Studio,它应该在您的 PC 上的某个位置。 在 Windows 7 x64 上安装 Visual Studio 2008 后,我在以下位置找到了它:C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin。 我还在具有 XP 和 Visual Studio 2005 的机器上的C:\Windows\Microsoft.NET\Framework\v1.1.4322中找到了它。 为了方便起见,我将gacutil复制到我放置命令文件的同一文件夹中(我使用c:\bin)。
这是安装库的AddToGAC.bat命令文件的代码
c:\bin\gacutil.exe /i %1
pause
这是删除库的DeleteFromGAC.bat命令文件的代码
c:\bin\gacutil.exe /u %~n1
pause
请注意,pause语句是可选的。 AddToGAC.bat使用在%1变量中找到的拖放库文件的完整路径\名称(路径\名称成为第一个命令参数)。 DeleteFromGAC使用%~n1从路径\名称中解析文件名(不带文件扩展名),这是 gacutil 删除库所需的内容。
我在此处找到了有关解析路径\名称命令参数的信息:http://windowsitpro.com/article/articleid/71819/jsi-tip-0494---how-to-parse-a-batch-parameter.html。
最后一步是在桌面上为每个命令文件创建一个快捷方式。 打开每个快捷方式的属性,单击“高级”,然后选择“以管理员身份运行”。
当您将 .NET 强命名库拖放到“添加到 GAC”快捷方式时,将出现“用户帐户控制”对话框(它可能会最小化)。 单击“是”,该库将被添加到 GAC。 同样,当您将库拖放到“从 GAC 删除”快捷方式时,也会发生同样的事情,并且该库将从 GAC 中删除。 遗憾的是,您无法从程序集文件夹中拖动库以删除它,您必须从其他地方拖动它 - Windows 不允许从 GAC 拖放。
关注点
我是 Window 7 的新手,所以可能有更好的方法来做到这一点。我要研究的一件事是,是否可以在某个地方设置策略,授予我的域用户登录名直接执行此操作的权限,就像我以机器的管理员身份登录一样。
如果有人有更好的方法,请反馈。