2011-10-01 73 views
3

我有一個64位的DLL,我可以通過regsvr32從命令提示符註冊。但問題是,當我嘗試註冊我的DLL通過nsis腳本它沒有註冊。我在腳本中使用了RegDLL命令。任何人都知道問題可能是什麼?無法通過nsis腳本註冊我的64位DLL?

+2

的問題是幾乎可以肯定,這是一個32位進程嘗試加載64位DLL。不過,我不知道如何解決這個問題。 – Gabe

+1

@Gabe運行外部regsrv32絕對是其中的一個選項;) –

+1

@Gabe 32位進程你的意思是安裝程序。如果是的話,我如何做一個64位nsis安裝程序? – surendran

回答

3

你可以使用rundll32.exe代替:

ExecWait '"$SYSDIR\rundll32.exe" $INSTDIR\mydll.dll DllRegisterServer' 

RUNDLL32.EXE是足夠聰明,如果你有一個64位的DLL

+1

我認爲它會更好地使用regsvr32,這是MS提供的用於註冊ActiveX DLL的程序,它也檢測32/64位DLL(僅使用/ s參數來省略消息)。 MS博客Raymond Chen建議不要使用rundll32,請參閱http://blogs.msdn.com/b/oldnewthing/archive/2013/01/04/10382242.aspx –

+0

@Bevan Collins謝謝你,你救了我的一天!事實證明,您的方法是從32位安裝程序中註冊64位DLL的唯一方法。 – denim

3

RegDLL被稱爲除了最簡單的情況之外的任何問題。谷歌site:forums.winamp.com nsis爲例。

爲了確保您的DLL,類型庫,BHO等的註冊成功發生,您應該使用InstallLib。它爲x64磁帶庫安裝(以及更多!)提供了一個選項

有關使用NSIS安裝磁帶庫的更多詳細信息,請參見http://nsis.sourceforge.net/Docs/AppendixB.html#B.1

2

ExitWait沒有發現NSIS腳本運行它推出自身的64位版本。 ExitWait代替ExecWait。

你cound使用:

ExecWait「 「$ SYSDIR \ RUNDLL32.EXE」 $ INSTDIR \ MYDLL.DLL DllRegisterSe