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

时间:2012-05-08 10:36:08

标签: nsis

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

Function ShowDiskVolumeSerialNumber
  !define GetVolumeInformation "Kernel32::GetVolumeInformation(t,t,i,*i,*i,*i,t,i) i"
  System::Call '${GetVolumeInformation ("$0",,${NSIS_MAX_STRLEN},.r0,,,,${NSIS_MAX_STRLEN})'
  IntFmt $0 "%08X" $0
  MessageBox MB_OK $0
FunctionEnd

我通过指定所需的驱动器来调用上述功能:

StrCpy $0 "C:\"
Call ShowDiskVolumeSerialNumber

上面给出了c:\驱动器的音量no。但是,如果我的操作系统安装在d:\e:\上,则无法运行。我想要一个能自动检测安装操作系统的驱动器并检索其卷号的功能

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

当有人做这两件事时,有人可以提供完整的NSIS功能:

  1. 自动检测安装了操作系统的驱动器,并检查其序列号,并在其间插入连字符。

1 个答案:

答案 0 :(得分:0)

要获得操作系统驱动器,StrCpy $0 $windir 3可能已足够(您没有指定是否需要boot volume or the system volume,在大多数系统上它们是相同的,因此$ windir是一个很好的起点)

编辑序列号:

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