2012-05-08 3 views
0

Je crée une configuration qui nécessite de récupérer le volume du disque sur lequel le système d'exploitation est installé. J'ai essayé le code suivant:Comment obtenir le numéro de série du volume du lecteur système

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 

j'appelle la fonction ci-dessus en spécifiant le lecteur souhaité:

StrCpy $0 "C:\" 
Call ShowDiskVolumeSerialNumber 

qui précède donne le volume de pas c:\ lecteur. Toutefois, si mon système d'exploitation est installé sur d:\ ou e:\, cela ne fonctionnera pas. Je veux une fonction qui détectera automatiquement le lecteur sur lequel le système d'exploitation est installé et récupérera son numéro de volume.

Deuxièmement, le numéro de volume extrait est sans trait d'union (par exemple 349620C1). J'ai besoin du numéro de série de volume récupéré comme 3496-20C1.

Quelqu'un pourrait-il s'il vous plaît donner une fonction NSIS complète quand fera deux choses i.e.:

  1. détecte automatiquement le lecteur sur lequel le système d'exploitation est installé et récupérer son numéro de série avec un trait d'union entre les deux.

Répondre

0

Pour obtenir le lecteur OS, StrCpy $0 $windir 3 est probablement assez (Vous n'avez pas spécifié si vous vouliez le boot volume or the system volume, sur la plupart des systèmes, ils sont les mêmes si $ windir est un bon point de départ)

Pour modifier la numéro de série:

StrCpy $0 $serial 4 
StrCpy $serial $serial "" 4 
StrCpy $serial "$0-$serial" 
Questions connexes