One way would be to use the GetVolumeInformation Windows API.
In the sample below, the GetFileSystemName calls the API and returns the file system name (e.g., 'NTFS') in the Name parameter.
[Setup]
AppName=TestCodeFileSystemName
ArchitecturesInstallIn64BitMode=x64compatible
AppVerName=TestCode
UsePreviousAppDir=false
DefaultDirName={commonpf}\TestCodeFileSystemName
Uninstallable=false
OutputDir=.
OutputBaseFilename=TestCodeFileSystemName
PrivilegesRequired=lowest
[Messages]
SetupAppTitle=TestCodeFileSystemName
[Code]
const
MAX_PATH = 260;
function GetVolumeInformation(lpRootPathName: string;
lpVolumeNameBuffer: string;
nVolumeNameSize: DWORD;
var lpVolumeSerialNumber: DWORD;
var lpMaximumComponentLength: DWORD;
var lpFileSystemFlags: DWORD;
lpFileSystemNameBuffer: string;
nFileSystemNameSize: DWORD): BOOL;
external 'GetVolumeI...@kernel32.dll stdcall';
function GetFileSystemName(Drive: string; var Name: string): DWORD;
var
FileSystemFlags: DWORD;
VolumeSerialNumber: DWORD;
MaximumComponentLength: DWORD;
begin
result := 0; // ERROR_SUCCESS
Drive := AddBackslash(Drive);
SetLength(Name, MAX_PATH);
if GetVolumeInformation(Drive, // LPCWSTR lpRootPathName
'', // LPWSTR lpVolumeNameBuffer
0, // DWORD nVolumeNameSize
VolumeSerialNumber, // LPDWORD lpVolumeSerialNumber
MaximumComponentLength, // LPDWORD lpMaximumComponentLength
FileSystemFlags, // LPDWORD lpFileSystemFlags
Name, // LPWSTR lpFileSystemNameBuffer
Length(Name)) then // DWORD nFileSystemNameSize
begin
SetLength(Name, Pos(#0, Name) - 1);
end
else
result := DLLGetLastError();
end;
procedure Test();
var
ErrorCode: DWORD;
FileSystemName: string;
begin
ErrorCode := GetFileSystemName('C:', FileSystemName);
if ErrorCode = 0 then
MsgBox(FileSystemName, mbInformation, MB_OK)
else
MsgBox('Error ' + IntToStr(ErrorCode), mbError, MB_OK);
end;
function InitializeSetup(): Boolean;
begin
result := false;
Test();
end;