NSIS 用 regsvr32 注册 DLL

NSIS register DLL with regsvr32

我正在尝试在 nsis 安装程序中使用 regsvr32 注册 DLL(目前没有静默):

Exec '"$SYSDIR\regsvr32.exe" "$SYSDIR\mp4mux.dll"'
Exec '"$SYSDIR_32bit\regsvr32.exe" "$SYSDIR_32bit\mp4mux.dll"'

它显​​示 DLL 已注册(32 位和 64 位)的弹出窗口,并且在安装日志中它显示下一行:

Execute: "C:\WINDOWS\system32\regsvr32.exe" "C:\WINDOWS\system32\mp4mux.dll"
//for 32-bit is similar

但是,当我尝试使用它时,它不起作用(我正在尝试使用 x264 编解码器创建 mp4 视频,所以它只显示错误)。 如果我将此命令复制到命令行,则会显示相同的弹出窗口并创建视频。

这个流程可能出了什么问题?我也尝试了 RegDLLrundll32 但没有成功。

更新:

我找不到在注册表中为 x64 注册的 DLL,只有 x32。 C:\WINDOWS\System32\mp4mux.dll 的记录不存在,仅存在 SysWow64

中的 dll

Filesystem redirection 会将 32 位应用程序从 System32 ($SysDir) 重定向到 64 位 Windows.

上的 SysWow64

你可以

  • 使用来自 x64.nsh
  • ${DisableX64FSRedirection} 宏短时间禁用重定向
  • 在 64 位 Vista 及更高版本上改为执行 $WinDir\Sysnative\regsvr32.exe

但是既然可以使用库宏,为什么还要这么麻烦呢:

!include Library.nsh
!define LIBRARY_X64
!insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED c:\myfiles\dllname.dll $SYSDIR\dllname.dll $SYSDIR