User Guide Cancel

Querying Current Software Version | Substance 3D Painter

Querying Current Software Version

Checking the current version of the application can be done in multiple manner depending fo the needs (without of without launching the software for example).

Checking Version via the executable

Substance Painter executable on Windows contains few informations that can be queried by external tools (such as Python).

Example in Python 3 (taken from here) : 

import os
import imp
import pip
import win32api #pypiwin32
#-------------------------------------------
#Reader
#-------------------------------------------
def getFileProperties(fname):
"""
Read all properties of the given file return them as a dictionary.
"""
propNames = ('Comments', 'InternalName', 'ProductName',
'CompanyName', 'LegalCopyright', 'ProductVersion',
'FileDescription', 'LegalTrademarks', 'PrivateBuild',
'FileVersion', 'OriginalFilename', 'SpecialBuild')
props = {'FixedFileInfo': None, 'StringFileInfo': None, 'FileVersion': None}
try:
# backslash as parm returns dictionary of numeric info corresponding to VS_FIXEDFILEINFO struc
fixedInfo = win32api.GetFileVersionInfo(fname, '\')
props['FixedFileInfo'] = fixedInfo
props['FileVersion'] = "%d.%d.%d.%d" % (fixedInfo['FileVersionMS'] / 65536,
fixedInfo['FileVersionMS'] % 65536, fixedInfo['FileVersionLS'] / 65536,
fixedInfo['FileVersionLS'] % 65536)
# VarFileInfoTranslation returns list of available (language, codepage)
# pairs that can be used to retreive string info. We are using only the first pair.
lang, codepage = win32api.GetFileVersionInfo(fname, '\VarFileInfo\Translation')[0]
# any other must be of the form StringfileInfo%04X%04Xparm_name, middle
# two are language/codepage pair returned from above
strInfo = {}
for propName in propNames:
strInfoPath = u'\StringFileInfo\%04X%04X\%s' % (lang, codepage, propName)
## print str_info
strInfo[propName] = win32api.GetFileVersionInfo(fname, strInfoPath)
props['StringFileInfo'] = strInfo
except:
pass
return props
#-------------------------------------------
#Check exe
#-------------------------------------------
Path = "E:/Software/Painter/Substance Painter.exe"
FileInfo = getFileProperties(Path)
print( FileInfo )
import os import imp import pip import win32api #pypiwin32 #------------------------------------------- #Reader #------------------------------------------- def getFileProperties(fname): """ Read all properties of the given file return them as a dictionary. """ propNames = ('Comments', 'InternalName', 'ProductName', 'CompanyName', 'LegalCopyright', 'ProductVersion', 'FileDescription', 'LegalTrademarks', 'PrivateBuild', 'FileVersion', 'OriginalFilename', 'SpecialBuild') props = {'FixedFileInfo': None, 'StringFileInfo': None, 'FileVersion': None} try: # backslash as parm returns dictionary of numeric info corresponding to VS_FIXEDFILEINFO struc fixedInfo = win32api.GetFileVersionInfo(fname, '\') props['FixedFileInfo'] = fixedInfo props['FileVersion'] = "%d.%d.%d.%d" % (fixedInfo['FileVersionMS'] / 65536, fixedInfo['FileVersionMS'] % 65536, fixedInfo['FileVersionLS'] / 65536, fixedInfo['FileVersionLS'] % 65536) # VarFileInfoTranslation returns list of available (language, codepage) # pairs that can be used to retreive string info. We are using only the first pair. lang, codepage = win32api.GetFileVersionInfo(fname, '\VarFileInfo\Translation')[0] # any other must be of the form StringfileInfo%04X%04Xparm_name, middle # two are language/codepage pair returned from above strInfo = {} for propName in propNames: strInfoPath = u'\StringFileInfo\%04X%04X\%s' % (lang, codepage, propName) ## print str_info strInfo[propName] = win32api.GetFileVersionInfo(fname, strInfoPath) props['StringFileInfo'] = strInfo except: pass return props #------------------------------------------- #Check exe #------------------------------------------- Path = "E:/Software/Painter/Substance Painter.exe" FileInfo = getFileProperties(Path) print( FileInfo )
import os 
import imp 
import pip 
import win32api #pypiwin32 
 
 
#------------------------------------------- 
#Reader 
#------------------------------------------- 
def getFileProperties(fname): 
 """ 
 Read all properties of the given file return them as a dictionary. 
 """ 
 propNames = ('Comments', 'InternalName', 'ProductName', 
  'CompanyName', 'LegalCopyright', 'ProductVersion', 
  'FileDescription', 'LegalTrademarks', 'PrivateBuild', 
  'FileVersion', 'OriginalFilename', 'SpecialBuild') 
 
 props = {'FixedFileInfo': None, 'StringFileInfo': None, 'FileVersion': None} 
 
 try: 
  # backslash as parm returns dictionary of numeric info corresponding to VS_FIXEDFILEINFO struc 
  fixedInfo = win32api.GetFileVersionInfo(fname, '\') 
  props['FixedFileInfo'] = fixedInfo 
  props['FileVersion'] = "%d.%d.%d.%d" % (fixedInfo['FileVersionMS'] / 65536, 
   fixedInfo['FileVersionMS'] % 65536, fixedInfo['FileVersionLS'] / 65536, 
   fixedInfo['FileVersionLS'] % 65536) 
 
  # VarFileInfoTranslation returns list of available (language, codepage) 
  # pairs that can be used to retreive string info. We are using only the first pair. 
  lang, codepage = win32api.GetFileVersionInfo(fname, '\VarFileInfo\Translation')[0] 
 
  # any other must be of the form StringfileInfo%04X%04Xparm_name, middle 
  # two are language/codepage pair returned from above 
 
  strInfo = {} 
  for propName in propNames: 
   strInfoPath = u'\StringFileInfo\%04X%04X\%s' % (lang, codepage, propName) 
   ## print str_info 
   strInfo[propName] = win32api.GetFileVersionInfo(fname, strInfoPath) 
    
  props['StringFileInfo'] = strInfo 
 except: 
  pass 
 
 return props 
 
 
#------------------------------------------- 
#Check exe 
#------------------------------------------- 
Path = "E:/Software/Painter/Substance Painter.exe" 
 
FileInfo = getFileProperties(Path) 
 
print( FileInfo )

Will output :

E:SoftwarePainter>query.py
{'FixedFileInfo': {'Signature': -17890115, 'StrucVersion': 65536, 'FileVersionMS': 132251649, 'FileVersionLS': 65536, 'ProductVersionMS': 132251649, 'ProductVersionLS': 65536, 'FileFlagsMask': 0, 'FileFlags': 0, 'FileOS': 0, 'FileType': 1, 'FileSubtype': 0, 'FileDate': None}, 'StringFileInfo': {'Comments': None, 'InternalName': 'Substance Painter', 'ProductName': 'Substance Painter', 'CompanyName': 'Allegorithmic', 'LegalCopyright': 'Copyright (C) 2017 Allegorithmic', 'ProductVersion': '2018.1.1', 'FileDescription': 'Substance Painter 2018.1.1', 'LegalTrademarks': None, 'PrivateBuild': None, 'FileVersion': '2018.1.1', 'OriginalFilename': 'Substance Painter.exe', 'SpecialBuild': None}, 'FileVersion': '2018.1.1.0'}
E:SoftwarePainter>query.py {'FixedFileInfo': {'Signature': -17890115, 'StrucVersion': 65536, 'FileVersionMS': 132251649, 'FileVersionLS': 65536, 'ProductVersionMS': 132251649, 'ProductVersionLS': 65536, 'FileFlagsMask': 0, 'FileFlags': 0, 'FileOS': 0, 'FileType': 1, 'FileSubtype': 0, 'FileDate': None}, 'StringFileInfo': {'Comments': None, 'InternalName': 'Substance Painter', 'ProductName': 'Substance Painter', 'CompanyName': 'Allegorithmic', 'LegalCopyright': 'Copyright (C) 2017 Allegorithmic', 'ProductVersion': '2018.1.1', 'FileDescription': 'Substance Painter 2018.1.1', 'LegalTrademarks': None, 'PrivateBuild': None, 'FileVersion': '2018.1.1', 'OriginalFilename': 'Substance Painter.exe', 'SpecialBuild': None}, 'FileVersion': '2018.1.1.0'}
E:SoftwarePainter>query.py 
{'FixedFileInfo': {'Signature': -17890115, 'StrucVersion': 65536, 'FileVersionMS': 132251649, 'FileVersionLS': 65536, 'ProductVersionMS': 132251649, 'ProductVersionLS': 65536, 'FileFlagsMask': 0, 'FileFlags': 0, 'FileOS': 0, 'FileType': 1, 'FileSubtype': 0, 'FileDate': None}, 'StringFileInfo': {'Comments': None, 'InternalName': 'Substance Painter', 'ProductName': 'Substance Painter', 'CompanyName': 'Allegorithmic', 'LegalCopyright': 'Copyright (C) 2017 Allegorithmic', 'ProductVersion': '2018.1.1', 'FileDescription': 'Substance Painter 2018.1.1', 'LegalTrademarks': None, 'PrivateBuild': None, 'FileVersion': '2018.1.1', 'OriginalFilename': 'Substance Painter.exe', 'SpecialBuild': None}, 'FileVersion': '2018.1.1.0'}

Checking Version via Command Line

You can use command line as following : substance painter.exe command_name [option]

To ask the version use --version, -v.

Note:

Note that the command line actions of Substance Painter will output a window.

Checking Version via Scripting

The scripting API (available via the help menu) allow to query the current version of the application.

Take a look at the namespace "alg" for further details.

Example :

//Print current version in the log window (string)
alg.log.info( alg.version.painter );
//Print current version in the log window (string) alg.log.info( alg.version.painter );
//Print current version in the log window (string) 
alg.log.info( alg.version.painter );

Get help faster and easier

New user?