我用C#写了一个BHO程序,本地测试注册程序集使用 "regasm /codebase *.dll" 注册后就可以了,卸载用 "regasm /u *.dll"就可以了。
但现在我需要的是发布,在发布的计算机上我如何定位 regasm的位置和环境,我在本地直接把regasm 拷贝出来到另一个目录,命令是无法成功的。
有个说使用 "regasm /codebase *.dll /regfile:bhoreg.reg" 可以生成对应的注册表脚本,但经过我无数次测试,我几乎把所有参数都试了很多遍,无论怎么试,生成的 *.reg文件导入注册表后一点反应都没有,而我使用 regasm /code *.dll 一注册立即起作用了(msgbox出来了)。
谁能告诉我,我的程序发布时,我应该如何在客户端动态 “注册/注销” 我的BHO组件?
(我的bho.dll不是强命名的,我暂时不想强命名)
regasm工具就在.NET Framework的目录下面,而.NET Framework在系统里的目录是固定的呀,都在C:\Windows\Microsoft.NET\Framework 或C:\Windows\Microsoft.NET\Framework64下面,然后根据自己DLL的.net 版本选择就行了。如果目标计算机没有装.net,那你肯定是找不到的。。。
获取这个目录还真是麻烦,就怕这段代码有bug
@沧海一杰:
C:\Windows用环境变量获取就行了,剩下的目录名都是固定的,绝对错不了。。。
注意:运行这个好像是要管理员权限的!
@XiaoFaye:
v2.0.50727好像是变的,我正在测试
@沧海一杰: 是不是所有版本的.netframework安装后都有2.0目录呢,我是.net 4.5 开发的
@沧海一杰:
你用.NET 4.5开发的东西,那目标计算机上肯定得有.NET 4.5才能运行吧?那你找V4.0的目录就行了,你找2.0的做什么? 我暂时不清楚不同版本的regasm能不能互用哦,你可以试试 。
@XiaoFaye: 试了2.0确实不行,但如何获取与当前程序集匹配的.netframework目录名?
@沧海一杰:
你的是4.5的嘛,就找V4.0开头的就行了。
@沧海一杰:
还要注意32位和64位是在不同目录的哦。
@XiaoFaye: 一句代码搞定 System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory();
@沧海一杰:
或者引入 Microsoft.Build.Utilities.dll
Microsoft.Build.Utilities.ToolLocationHelper.GetPathToDotNetFramework(Microsoft.Build.Utilities.TargetDotNetFrameworkVersion.Version40);