我正在构建一个设置,它需要检索安装操作系统的驱动器的磁盘卷。我尝试了以下代码:
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功能:
答案 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"