我正在做一個安裝程序,當它卸載後Windows會拋出一個錯誤(即使使用regsrv32 /u
運行,所以我基本上想要將/s
標誌添加到NSIS中的RegDll "$SYSDIR\foo32.dll"
中腳本。NSIS中出現RegDll錯誤信息
我還以爲$SysDir
將windows\syswow64
在64位系統和system32
32位?它是存在於系統路徑中的32位驅動程序。
感謝
我正在做一個安裝程序,當它卸載後Windows會拋出一個錯誤(即使使用regsrv32 /u
運行,所以我基本上想要將/s
標誌添加到NSIS中的RegDll "$SYSDIR\foo32.dll"
中腳本。NSIS中出現RegDll錯誤信息
我還以爲$SysDir
將windows\syswow64
在64位系統和system32
32位?它是存在於系統路徑中的32位驅動程序。
感謝
我有點困惑,因爲你在說話約RegDLL
和regsrv32.exe,他們是不同的東西! RegDLL
永遠不能使用a/s開關,因爲它調用的函數沒有無聲參數。
RegDLL和UnRegDLL是NSIS指令,它們在內部分別爲DllRegisterServer和DllUnregisterServer分別呼叫LoadLibrary
+ GetProcAddress
,並且從不使用regsrv32.exe。他們從不顯示任何消息對話框,但他們確實在instfiles頁面上的日誌中打印了一些文本,您可以使用SetDetailsPrint
來控制它。您的庫中的註冊函數可能會顯示一個消息框,但NSIS無法做到這一點。
NSIS還附帶一個名爲Library.nsh的頭文件,它包含對事物註冊方式的更高級控制,它可能會針對64位庫調用「$ SYSDIR \ regsvr32.exe」,但它始終使用/ s開關。使用Library.nsh時,如果您還安裝64位庫,則必須設置正確的定義!
如果你總是僅安裝32位的庫,可能是這個樣子:
!include Library.nsh
Section Uninstall
!insertmacro UnInstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED "$InstDir\whatever.dll"
SectionEnd
如果你有32位和64位庫,可能是這個樣子:
!include Library.nsh
!include x64.nsh
Section Uninstall
!insertmacro UnInstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED "$InstDir\whatever-32.dll"
${If} ${RunningX64}
!define LIBRARY_X64
!insertmacro UnInstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED "$InstDir\whatever-64.dll"
!undef LIBRARY_X64
${EndIf}
SectionEnd
是的,我用它來比較,我知道它們是不同的! :-)是的,即使在64位系統上,磁帶庫也始終是32位。只是想指出,在命令行'regsvr32/u'和'UnRegDll'具有相同的「錯誤」,這不是真的錯誤,因爲它仍然註銷,但我不希望錯誤發生時,運行'unregdll '。 –
regsvr32/u顯示錯誤,但regsvr32/s/u不顯示?如果你能解釋這個錯誤是什麼以及它是什麼樣子,這將是有幫助的。它是一個消息框(一個新的彈出對話框)?如果UnRegDll顯示一個消息框,那麼NSIS無法做到這一點,因爲UnRegDll僅打印到instfiles頁面上的日誌,而其他任何東西都來自您要註銷的組件。 – Anders
regsvr32從管理員命令提示符成功,就像regdll沒有發生事件一樣。 regsvr32/u提供了一個錯誤對話框,就像unregdll所做的一樣(準確地說,確切地說是相同的)。 regsrv32/u/s是成功的,不會顯示錯誤對話框。我喜歡爲unregdll做類似的事情,所以它沒有任何反饋。或者是否有一個shell32.dll函數,我可以這樣做? –
你確定你的意思是驅動程序?驅動程序通常不是由regsrv32/RegDll安裝的,在64位系統上,所有驅動程序必須是64位的! – Anders
這是一個正在啓用的視頻編解碼器。 –