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. 自动检测安装操作系统的驱动器并检索其序列号,并在其间使用连字符。
4

1 回答 1

0

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

要编辑序列号:

StrCpy $0 $serial 4
StrCpy $serial $serial "" 4
StrCpy $serial "$0-$serial"
于 2012-05-08T11:34:01.037 回答