之前,用c#写了一个COM组件,可以被Delphi的程序调用,而且已经使用在几个项目中,部署环境在XP和WIN7 32位都可以正常运行.
但最近一个项目,部署环境是WIN7 64位系统.使用写好的bat文件注册不成功,
运行到 RegAsm 时,总时提示 无法定位输入程序集 '....dll'或它的一个依赖项.
看了下RegAsm的命令:
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /codebase %WINDIR%\System32\*.dll
dll文件放到了C:\Windows\Syste32\下, 经过反复确认,路径没有问题.那肯定是依赖项的问题了.可是具体是什么原因呢.
首先推测是不是需要用64位的RegAsm.
顺着RegAsm的路径找下去,果然在 %WINDIR%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe 下也找到了这个文件.
然后修改注册命令为:
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe /codebase %WINDIR%\System32\*.dll
依然注册失败,不过提示的命令变成了"不是有效的程序集,因此未能加载它".
这里的问题很显然,是因为把32位的dll按64位来加载导致的.
然后我试着把程序编译成64位Dll, 用64位的RegAsm注册,结果提示注册成功.这个结果是可以预见到的.
但问题来了.我的Dll是需要让Delphi来使用的.而Delphi只能是32位程序.所以,Delphi打开的时候出现了问题.
这时我想,如果我把程序编译成AnyCPU,然后用64位的RegAs