You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Start-Process的-ArgumentList调用gacutil.exe时触发“Invalid Argument”错误求助

解决gacutil.exe "Invalid Argument" 错误的实操方案

嘿,我看你在调用gacutil卸载程序集时碰到了无效参数的问题,大概率是参数格式不对导致的——gacutil的/u参数可不是认文件路径的,得用程序集的强名称标识才行。下面一步步帮你搞定:

1. 先搞懂gacutil /u 参数的正确打开方式

gacutil的/u是用来卸载全局程序集缓存(GAC)里的程序集,它要的是程序集的完整强名称,比如这种格式:

gacutil.exe /u "USB.CRM.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abc123def456"

你现在传的"USB\CRM\Common"更像个文件路径或者不完整的名称,gacutil完全摸不着头脑,自然报错啦。

2. 拿到目标程序集的正确标识

不知道强名称没关系,用PowerShell就能查:
找到你的DLL文件(比如USB.CRM.Common.dll),然后在PowerShell里跑这个命令,把路径换成你自己的:

[System.Reflection.AssemblyName]::GetAssemblyName("C:\你的DLL存放路径\USB.CRM.Common.dll")

执行后会输出一堆信息,比如名称、版本、文化、公钥标记,把这些完整复制下来,这就是你要传给/u的参数。

3. 修正你的PowerShell命令

把拿到的完整标识替换进去,还要注意几个细节:

  • 确认gacutil的路径是对的(你用的v8.1A的SDK路径没问题,但如果你的系统装了更高版本的SDK,也可以对应调整)
  • 给程序集标识套上双引号,避免空格或特殊字符搞砸参数解析

修正后的命令示例(把里面的标识换成你自己查出来的):

$gacutilPath = "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\gacutil.exe"
$assemblyFullName = "USB.CRM.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1234567890abcdef"
Start-Process -Wait -FilePath $gacutilPath -ArgumentList '/u', "`"$assemblyFullName`""

这里用了转义的双引号",确保gacutil能完整接收整个标识参数。

4. 额外踩坑提示

  • 如果你其实是想安装程序集到GAC,那得用/i参数,后面跟DLL的完整路径,比如:
Start-Process -Wait -FilePath $gacutilPath -ArgumentList '/i', "C:\你的DLL存放路径\USB.CRM.Common.dll"
  • 记得用管理员权限运行PowerShell!修改GAC需要权限,虽然你现在的错误是参数问题,但后续操作可能会碰到权限报错
  • 先验证gacutil路径是否正确:直接在PowerShell里跑& "$gacutilPath" /?,如果能输出帮助信息,说明路径没问题;如果不行,得找对正确的gacutil位置(比如NETFX 4.8 Tools的路径会不一样)

内容的提问来源于stack exchange,提问作者SQLServerNewBie2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:34:45