2016-11-23 3 views
3

Есть ли способ прочитать информацию о системе в Inno Setup во время установки (только на странице приветственного мастера)?Есть ли способ прочитать информацию о системе в Inno Setup

Под этим я имею в виду:

  • RAM
  • OS
  • CPU
  • пользователя
  • IP
  • MAC адрес.

Было бы хорошо знать. Я хотел бы поместить эту информацию в текстовый документ, который я бы сэкономил на своем компьютере. Кажется, я не могу найти материал в этом онлайн, и надеялся, что если кто-нибудь испытает это, может помочь?

ответ

3

Существует множество способов получить всю эту информацию.

Но один универсальный способ получить все из них - WMI query.

классы WMI, которые будут вам интересны следующие:

function WbemQuery(WbemServices: Variant; Query: string): Variant; 
var 
    WbemObjectSet: Variant; 
begin 
    Result := Null; 
    WbemObjectSet := WbemServices.ExecQuery(Query); 
    if not VarIsNull(WbemObjectSet) and (WbemObjectSet.Count > 0) then 
    begin 
    Result := WbemObjectSet.ItemIndex(0); 
    end; 
end; 

procedure CollectInformation; 
var 
    Query: string; 
    WbemLocator, WbemServices: Variant; 
    ComputerSystem, OperatingSystem, Processor, NetworkAdapters, NetworkAdapter: Variant; 
    IPAddresses: array of string; 
    I, I2: Integer; 
begin 
    WbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); 
    WbemServices := WbemLocator.ConnectServer('.', 'root\CIMV2'); 

    Query := 'SELECT TotalPhysicalMemory, UserName FROM Win32_ComputerSystem'; 
    ComputerSystem := WbemQuery(WbemServices, Query); 
    if not VarIsNull(ComputerSystem) then 
    begin 
    Log(Format('TotalPhysicalMemory=%s', [ComputerSystem.TotalPhysicalMemory])); 
    Log(Format('UserName=%s', [ComputerSystem.UserName])); 
    end; 

    Query := 'SELECT Caption FROM Win32_OperatingSystem'; 
    OperatingSystem := WbemQuery(WbemServices, Query); 
    if not VarIsNull(OperatingSystem) then 
    begin 
    Log(Format('OperatingSystem=%s', [OperatingSystem.Caption])); 
    end; 

    Query := 'SELECT Name FROM Win32_Processor'; 
    Processor := WbemQuery(WbemServices, Query); 
    if not VarIsNull(Processor) then 
    begin 
    Log(Format('Processor=%s', [Processor.Name])); 
    end; 

    Query := 
    'SELECT IPEnabled, IPAddress, MACAddress FROM Win32_NetworkAdapterConfiguration'; 
    NetworkAdapters := WbemServices.ExecQuery(Query); 
    if not VarIsNull(NetworkAdapters) then 
    begin 
    for I := 0 to NetworkAdapters.Count - 1 do 
    begin 
     NetworkAdapter := NetworkAdapters.ItemIndex(I); 
     if (not VarIsNull(NetworkAdapter.MACAddress)) and NetworkAdapter.IPEnabled then 
     begin 
     Log(Format('Adapter %d MAC=%s', [I, NetworkAdapter.MACAddress])); 
     if not VarIsNull(NetworkAdapter.IPAddress) then 
     begin 
      IPAddresses := NetworkAdapter.IPAddress; 
      for I2 := 0 to GetArrayLength(IPAddresses) - 1 do 
      begin 
      Log(Format('Adapter %d IP %d=%s', [I, I2, IPAddresses[I2]])); 
      end; 
     end; 
     end; 
    end; 
    end; 
end; 

Код требует Unicode версии Inno Setup для better Variant support.

SWbemObjectSet.ItemIndex method, используемый с Win32_NetworkAdapterConfiguration, не доступен в Windows XP старше. См. Iterate SWbemObjectSet in Windows XP and Inno Setup.


Это поможет вам информацию, как:

TotalPhysicalMemory=12835962880 
UserName=domain\martin 
OperatingSystem=Microsoft Windows 10 Home 
Processor=Intel(R) Core(TM) i7-3630QM CPU @ 2.40GHz 
Adapter 1 MAC=11:51:67:D0:10:21 
Adapter 1 IP 0=192.168.78.2 
Adapter 1 IP 1=ef08::8da9:601e:3f8a:da00 
Adapter 2 MAC=80:06:E6:10:F7:B9 
Adapter 2 IP 0=192.168.1.3 

Чтобы просмотреть всю имеющуюся информацию в участвующих классов, запустить это на командной строке:

wmic computersystem get * /format:value 
wmic os get * /format:value 
wmic cpu get * /format:value 
wmic nicconfig get * /format:value 
+0

Где это Эти функции записывают функция Log(). Кажется, я не могу найти функцию в Интернете. –

+0

Я получаю неизвестный идентификатор «Wbemquery». При этой функции. Должен ли я включать что-то в свой скрипт, который у меня нет? –

+0

Извините, я добавил функцию к моему ответу. –