2012-05-08 63 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"