Fully Qualified Domain Name
From NSIS Wiki
Jump to navigationJump to search
About
The following function was inspired from the forum post at: http://forums.winamp.com/showthread.php?t=323936
Technically you can get the FQDN using several methods.
Registry Read Method
Use with caution, This method is prone to GIGO and some of the source keys might not be optimal for collecting the information.
Example
Section "Registry Method" Call regGetFQDN Pop $0 DetailPrint "FQDN: $0" SectionEnd
Source
Function regGetFQDN Push $0 Push $1 SetRegView 64 ## Possible system domain Name locations ## TODO Adjust order for locations that are most likley to be correct. ReadRegStr $1 HKLM "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" \ "Domain" StrCmp $1 "" 0 GetHostName ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\History" \ "NetworkName" StrCmp $1 "" 0 GetHostName ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony" \ "DomainName" StrCmp $1 "" 0 GetHostName ReadRegStr $1 HKLM "SOFTWARE\Microsoft\MSMQ\Parameters\setup" \ "MachineDomainFQDN" GetHostName: ## Possible Registry Hostname locations ReadRegStr $0 HKLM "SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName" \ "ComputerName" StrCmp $0 "" 0 FQDNDone ReadRegStr $0 HKLM "SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" \ "ComputerName" StrCmp $0 "" 0 FQDNDone ReadRegStr $1 HKLM "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" \ "Hostname" StrCmp $0 "" 0 FQDNDone FQDNDone: StrCmp $1 "" +2 StrCpy $0 "$0.$1" SetRegView lastused Pop $1 Exch $0 FunctionEnd
GetNetworkParams Win32 API
Example
;/* Example * ## Install Section test ${GetFQDN} $0 DetailPrint "GetFQDN: $0" WriteUninstaller "$EXEDIR\uninstaller.exe" SectionEnd ## Uninstall Code ${GetFQDN} UNINSTALL Section un.test ${GetFQDN} $0 DetailPrint "un.GetFQDN: $0" SectionEnd ;*/
Source
!ifndef GetFQDN !verbose push !verbose 3 !ifmacrondef _GetFQDN !define GetFQDN "!insertmacro _GetFQDN" !macro _InsertFunction_GetFQDN _U_ Function ${_U_}GetFQDN ## This Function uses the GetNetworkParams Win32 API function. ## Additional details are available at: ## http://msdn.microsoft.com/en-us/library/aa365968%28VS.85%29.aspx ClearErrors Push $1 Push $0 Push $2 ## Get the required buffer size System::Call "*(&i4 0)i .r0" System::Call 'Iphlpapi::GetNetworkParams(i 0, i r0)i.r1' StrCmp $1 111 BufferOkay SetErrors StrCpy $1 "" Goto CleanUp_End BufferOkay: ## Allocate Buffer System::Call '*$0(i .r1)' System::Alloc $1 Pop $2 ## Populate Buffer with Data System::Call 'Iphlpapi::GetNetworkParams(i $2, *i $1)i.r1' StrCmp $1 0 DataOkay SetErrors StrCpy $1 "" Goto CleanUp DataOkay: ## Success, lets build the FQDN from the data System::Call '*$2(&t132 .r3,&t132 .r4)' StrCpy $1 "$3.$4" CleanUp: System::Free $2 CleanUp_End: System::Free $0 Pop $2 Pop $0 Exch $1 FunctionEnd !macroend !insertmacro _InsertFunction_GetFQDN "" !macro _GetFQDN _RetVar !verbose Push !verbose 3 !ifdef __GLOBAL__ !if `${_RetVar}` == "UNINSTALL" !ifndef "un.GetFQDN" !insertmacro _InsertFunction_GetFQDN "un." !define "un.GetFQDN" "${GetFQDN}" !endif !else !undef GetFQDN !error "Syntax Error: ${GetFQDN} ${_RetVar}" !endif !else !ifdef __UNINSTALL__ !ifndef un.GetFQDN !undef GetFQDN !error 'Oops! You need to enable the GetFQDN uninstaller function in the global scope using: "${GetFQDN} UNINSTALL"' !endif Call un.GetFQDN !else Call GetFQDN !endif !if ${_RetVar} != s Pop ${_RetVar} !endif !endif !verbose Pop !macroend !endif !verbose Pop !endif