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:\ドライブのボリューム番号を示します。ただし、OS がインストールされている場合、d:\または動作e:\しません。OSがインストールされているドライブを自動で検出し、そのボリューム番号を取得する機能が欲しいです。

次に、取得されたボリューム番号にはハイフンがありません (例: 349620C1)。として取得したボリューム通し番号が必要3496-20C1です。

誰かが完全なNSIS機能を提供してくれませんか?

  1. OS がインストールされているドライブを自動的に検出し、そのシリアル番号をハイフンで区切って取得します。
4

1 に答える 1

0

OSドライブを取得するには、おそらく十分です(ブートボリュームまたはシステムボリュームのどちらがStrCpy $0 $windir 3必要かを指定しませんでした。ほとんどのシステムでは同じであるため、 $windir が良い出発点です)

シリアル番号を編集するには:

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