2012-05-08 33 views
0

我正在构建一个需要检索安装操作系统的驱动器的磁盘卷的安装程序。我曾尝试以下代码:如何获取系统驱动器卷序列号

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:\驱动的。但是,如果我的操作系统安装在d:\e:\上,它将无法工作。我想要一个能够自动检测安装了操作系统的驱动器并检索其音量的功能。

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

可能有人请给一个完整的NSIS功能时,会做两种事情即:

  1. 自动检测在其上安装操作系统的驱动器,并在两者之间一个连字符检索其序列号。

回答

0

要获得OS驱动,StrCpy $0 $windir 3可能是足够的(如果你想要的boot volume or the system volume你没有指定,在大多数系统上它们是相同的,所以$ WINDIR是一个很好的起点)

要编辑序列号:

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