Nsis 如何获取系统驱动器卷序列号

Nsis 如何获取系统驱动器卷序列号,nsis,Nsis,我正在构建一个需要检索安装了操作系统的驱动器的磁盘卷的设置。我尝试了以下代码: 函数ShowDiskVolumeSerialNumber !定义GetVolumeInformation内核32::GetVolumeInformation t,t,i,*i,*i,*i,t,i 系统::调用“${GetVolumeInformation$0,${NSIS\u MAX\u STRLEN}、.r0,,,,,,${NSIS\u MAX\u STRLEN}” IntFmt$0%08X$0 MessageBo

我正在构建一个需要检索安装了操作系统的驱动器的磁盘卷的设置。我尝试了以下代码:

函数ShowDiskVolumeSerialNumber !定义GetVolumeInformation内核32::GetVolumeInformation t,t,i,*i,*i,*i,t,i 系统::调用“${GetVolumeInformation$0,${NSIS\u MAX\u STRLEN}、.r0,,,,,,${NSIS\u MAX\u STRLEN}” IntFmt$0%08X$0 MessageBox MB_正常$0 功能端 我通过指定所需的驱动器来调用上述函数:

StrCpy$0 C:\ 调用ShowDiskVolumeSerialNumber 上面给出了c:\驱动器的卷号。但是,如果我的操作系统安装在d:\或e:\上,它将无法工作。我需要一个功能,该功能将自动检测安装操作系统的驱动器并检索其卷号

其次,检索到的卷号没有连字符,例如349620C1。我需要检索到的卷序列号为3496-20C1

是否有人能提供完整的NSIS功能,何时可以完成这两项工作,即:

自动检测安装了操作系统的驱动器,并使用连字符检索其序列号。 要获得操作系统驱动器,StrCpy$0$windir 3可能就足够了,您没有指定是否需要,在大多数系统上它们是相同的,因此$windir是一个很好的起点

要编辑序列号,请执行以下操作:

StrCpy $0 $serial 4
StrCpy $serial $serial "" 4
StrCpy $serial "$0-$serial"