Share

Interface: PluginPackageManager

This Core Interface provides MAXScript access to the Plugin Package Manager that handles plug-ins packaged in the Autodesk Bundle format.

Available in 3ds Max 2014 and higher.

Note: This interface was introduced in 3ds Max 2014 as ExchangeStorePackageManager. It was renamed in 3ds Max 2020 to PluginPackageManager. However, a global variable named ExchangeStorePackageManager points to the re-named interface to prevent older scripts from breaking.

Properties:

PluginPackageManager.verboseLogging : boolean : Read|Write

Enables/disables verbose logging for future sessions. Value persisted to 3dsmax.ini.

[PluginPackageManager]
VerboseLogging=1

When true, results in verbose logging of plug-in package loading behavior to display in the Plugin Package Manager Message dialog. This additional information will show:

  • The package file root folders being processed.
  • The package files being processed.
  • Which package files are not loaded due to runtime requirements.
  • Which package files are not loaded due to missing dependent bundles.
  • The values being set for environment variables.

Methods:

<integer>PluginPackageManager.GetNativePlugInCount()

Returns the number of native plugins.

<filename>PluginPackageManager.GetNativePlugInFullPath <index>index

Returns the full file name of the indexed native plugin.

<integer>PluginPackageManager.GetManagedAssemblyCount()

Returns the number of managed assemblies.

<filename>PluginPackageManager.GetManagedAssemblyFullPath <index>index

Returns the full file name of the indexed managed assembly.

<integer>PluginPackageManager.GetUISchemeCount()

Returns the number of UI Schemes.

<filename>PluginPackageManager.GetUISchemeFullPath <index>index

Returns the full file name of the indexed UI Scheme.

<integer>PluginPackageManager.GetDefaultSettingCount()

Returns the number of Default Settings.

<filename>PluginPackageManager.GetDefaultSettingFullPath <index>index

Returns the full file name of the indexed Default Setting.

<integer>PluginPackageManager.GetMaxscriptsCount()

Returns the number of MAXScripts.

<filename>PluginPackageManager.GetMaxscriptsFullPath <index>index

Returns the full file name of the indexed MAXScript.

<integer>PluginPackageManager.GetMacroscriptsCount()

Returns the number of MacroScripts.

<filename>PluginPackageManager.GetMacroScriptsFullPath <index>index

Returns the full file name of the indexed MacroScript.

<integer>PluginPackageManager.GetPostStartUpScriptsCount()

Returns the number of Startup Scripts.

<filename>PluginPackageManager.GetPostStartUpScriptFullPath <index>index

Returns the full file name of the indexed Startup Script.

<integer>PluginPackageManager.GetMetaSLShaderPathCount()

Returns the number of MetaSL Shaders.

<filename>PluginPackageManager.GetMetaSLShaderFullPath <index>index

Returns the full file name of the indexed MetaSL Shader.

<integer>PluginPackageManager.GetMiFileCount()

Returns the number of .mi files.

<filename>PluginPackageManager.GetMiFileFullPath <index>index

Returns the full file name of the indexed .mi file.

<integer>PluginPackageManager.GetLightIconPathsCount()

Returns the number of light icon paths.

<filename>PluginPackageManager.GetLightIconPathFullPath <index>index

Returns the full file name of the indexed light icon path.

<integer>PluginPackageManager.GetDarkIconPathsCount()

Returns the number of dark icon paths.

<filename>PluginPackageManager.GetDarkIconPathFullPath <index>index

Returns the full file name of the indexed dark icon path.

<void>PluginPackageManager.ProcessCustomInstallDirectory <filename>path

Processes the given custom install directory filepath.

<void>PluginPackageManager.GetPackageInstallPathByUpgradeCode <string>upgradeCode

Returns the install path associated with the plugin package with the specified upgradeCode. Available in 3ds Max 2020 and higher.

Note: This function replaces the undocumented pathConfig.GetExchangeStorePlugInInstallPath <string>productCode which used the product code as the key.
<integer>PluginPackageManager.GetOSLFoldersCount()

Returns the number of OSL paths. Available in 3ds Max 2021 and higher.

<filename>PluginPackageManager.GetOSLFolderFullPath <index>index

Returns the full OSL path specified by index from the list of OSL paths. Available in 3ds Max 2021 and higher.

<integer>PluginPackageManager.GetAMGFoldersCount()

Returns the number of AMG paths. Available in 3ds Max 2021 and higher.

<filename>PluginPackageManager.GetAMGFolderFullPath <index>index

Returns the full AMG path specified by index from the list of AMG paths. Available in 3ds Max 2021 and higher.

<integer>PluginPackageManager.GetSceneConverterFoldersCount()

Returns the number of Scene Converter paths. Available in 3ds Max 2021 and higher.

<filename>PluginPackageManager.GetSceneConverterFolderFullPath <index>

Returns the full Scene Converter path specified by index from the list of Scene Converter paths. Available in 3ds Max 2021 and higher.

    <integer>PluginPackageManager..GetHotkeyPathsCount()

Get the count of hotkey file paths.

Available in 3ds Max 2025.

<filename>PluginPackageManager.GetHotkeyFullPath <index>index

Get the full path of the i-th hotkey file.

Available in 3ds Max 2025.

<integer>PluginPackageManager.GetMenuPathsCount()

Get the count of menu file paths.

Available in 3ds Max 2025.

<filename>PluginPackageManager.GetMenuFullPath <index>index

Get the count of quad menu file paths.

Available in 3ds Max 2025.

<integer>PluginPackageManager.GetQuadMenuPathsCount()

Get the count of quad menu file paths.

Available in 3ds Max 2025.

<filename>PluginPackageManager.GetQuadMenuFullPath <index>index

Get the full path of the i-th quad menu file.

Available in 3ds Max 2025.

<integer>PluginPackageManager.GetPackageCount()

Get the number of packages loaded.

Available in 3ds Max 2025.

<string array>PluginPackageManager.GetPackageInfoByIndex <index>index

Returns package info as an 11 element array of strings.

#(UpgradeCode, PackageName, PackageVersionString, PackageDescription, AppVersion, PackageDirectory, PackagePath, CompanyName, CompanyUrl, CompanyEmail, CompanyPhone)

Available in 3ds Max 2025.

<string array>PluginPackageManager.GetPackageInfoByUpgradeCode <string>upgradeCode

Returns package info as an 11 element array of strings same as GetPackageInfoByIndex.

Available in 3ds Max 2025.

<void>PluginPackageManager.ShowMessageDialog()

Opens the Plugin Package Manager Message dialog.

Available in 3ds Max 2025.

<integer>PluginPackageManager.GetComponentCount <enum>category
    category enums: {#Plugins|#Assemblies|#UIScheme|#DefaultSetting|#PreStartUpScripts|#MacroScripts|#PostStartUpScripts|#MetaSLShaderPath|#MiFile|#MRShader|#LightIconPaths|#DarkIconPaths|#OSLFolders|#AMGFolders|#SceneConverterFolders|#Hotkeys|#Menus|#QuadMenus}

Gets the number of components specified for the given category.

Available in 3ds Max 2025.

<string array>PluginPackageManager.GetComponentInfo <enum>category <index>index
    category enums: {#Plugins|#Assemblies|#UIScheme|#DefaultSetting|#PreStartUpScripts|#MacroScripts|#PostStartUpScripts|#MetaSLShaderPath|#MiFile|#MRShader|#LightIconPaths|#DarkIconPaths|#OSLFolders|#AMGFolders|#SceneConverterFolders|#Hotkeys|#Menus|#QuadMenus}

Gets component info as a 5 element array of strings:

#(UpgradeCode, Name, VersionString, Description, FullPath)

Available in 3ds Max 2025.

<integer>PluginPackageManager.GetPackageComponentCount <string>upgradeCode <enum>category
    category enums: {#Plugins|#Assemblies|#UIScheme|#DefaultSetting|#PreStartUpScripts|#MacroScripts|#PostStartUpScripts|#MetaSLShaderPath|#MiFile|#MRShader|#LightIconPaths|#DarkIconPaths|#OSLFolders|#AMGFolders|#SceneConverterFolders|#Hotkeys|#Menus|#QuadMenus}

Gets the number of components specified for the given category by a specific package.

Available in 3ds Max 2025.

<string array>PluginPackageManager.GetPackageComponentInfo <string>upgradeCode <enum>category <index>index
    category enums: {#Plugins|#Assemblies|#UIScheme|#DefaultSetting|#PreStartUpScripts|#MacroScripts|#PostStartUpScripts|#MetaSLShaderPath|#MiFile|#MRShader|#LightIconPaths|#DarkIconPaths|#OSLFolders|#AMGFolders|#SceneConverterFolders|#Hotkeys|#Menus|#QuadMenus}

Gets component info as a 5 element array of strings same as GetComponentInfo.

Available in 3ds Max 2025.

<enum array>PluginPackageManager.GetComponentCategories()
    GetComponentCategories enums: {#Plugins|#Assemblies|#UIScheme|#DefaultSetting|#PreStartUpScripts|#MacroScripts|#PostStartUpScripts|#MetaSLShaderPath|#MiFile|#MRShader|#LightIconPaths|#DarkIconPaths|#OSLFolders|#AMGFolders|#SceneConverterFolders|#Hotkeys|#Menus|#QuadMenus}

Gets an array of the component category names.

Available in 3ds Max 2025.

<string>PluginPackageManager.GetLoggedMessages()

Gets all messages logged to the Plugin Package Manager Message dialog as a string.

Available in 3ds Max 2025.

<string array>PluginPackageManager.GetPackageLoadOrder()

Returns an array of upgradeCode strings of the packages in their load order. Normal load order is based on sorted upgrade code values, then modified if 'dependent' or 'load after' is specified for packages.

Available in 3ds Max 2025.

<integer>PluginPackageManager.GetPackageEnvironmentVariablesCount <string>upgradeCode

Returns the number of environment variable definitions in the given upgradeCode plug-in package.

Available in 3ds Max 2025.

<boolean>PluginPackageManager.GetPackageEnvironmentVariable <string>upgradeCode <index>index <&string>name <&string>value <&enum>type
    name is Out parameter
    value is Out parameter
    type enums: {#String|#Path}
    type is Out parameter 

Get the definition of a given environment variable specified by upgradeCode and Index and returns true if successful, false otherwise (for example, index out of range).

  • name - the returned name of the environment variable if successful.

  • value - the returned value of the environment variable definition if successful.

  • type - the returned type of the environment variable if successful.

    Available in 3ds Max 2025.

EXAMPLE:

fn showPackageInfo =
(
    local n = PluginPackageManager.GetPackageCount()
    local fmtstr = "upgradeCode: %; packageName: %; packageVersion: %; packageDescription: %; companyName: %; packageDirectory: %\n"
    for i = 1 to n do 
    (
        local packageInfo = PluginPackageManager.GetPackageInfoByIndex i
        local upgradeCode = packageInfo[1]
        local packageName = packageInfo[2]
        local packageVersion = packageInfo[3]
        local packageDescription = packageInfo[4]
        local companyName = packageInfo[5]
        local packageDirectory = packageInfo[6]
        format fmtstr upgradeCode packageName packageVersion packageDescription companyName packageDirectory 
    )
)
showPackageInfo()

OUTPUT: A PARTIAL RESULT FROM THE CALL

upgradeCode: {10a2f92d-c49b-46c2-834d-702be1dbeb07}; packageName: Retopology Tools for 3ds Max 2026; packageVersion: 1.6.0.16; packageDescription: 3ds Max 2026 Retopology Component; companyName: 1.6.0.16; packageDirectory: c:\programdata\autodesk\applicationplugins\retopology3dsmax2026\
upgradeCode: {15c129dd-e05a-49d7-bddc-b5fc3c3f8627}; packageName: Alembic; packageVersion: 1.0.0; packageDescription: Alembic Importer and Exporter for 3ds Max.; companyName: 1.0.0; packageDirectory: c:\program files\autodesk\3ds max 2026\applicationplugins\alembic\
upgradeCode: {26302679-93fd-5bf6-94d9-bc29a7d8892a}; packageName: capholes; packageVersion: 1.0.0; packageDescription: ; companyName: 1.0.0; packageDirectory: c:\program files\autodesk\3ds max 2026\applicationplugins\capholes\
upgradeCode: {3e09e4b4-c19b-11ed-afa1-0242acc0ffee}; packageName: MAXtoA for 3ds Max 2026; packageVersion: 5.8.0.0; packageDescription: Arnold Plug-in for 3ds Max; companyName: 5.8.0.0; packageDirectory: c:\programdata\autodesk\applicationplugins\maxtoa_2026\
upgradeCode: {5a23cf1e-099c-47f9-a6bd-40054a082107}; packageName: Autodesk 3ds Max 2026 CivilView; packageVersion: 1.0.1.0; packageDescription: Autodesk 3ds Max 2026 CivilView; companyName: 1.0.1.0; packageDirectory: c:\program files\autodesk\3ds max 2026\applicationplugins\civilviewio\
OK

EXAMPLE:

fn showPackageNativePluginPath =
(
    local n = PluginPackageManager.GetNativePlugInCount()
    format "Native Plugin Paths:\n"
    for i = 1 to n do 
        format "  %\n" (PluginPackageManager.GetNativePlugInFullPath i)
)
showPackageNativePluginPath()

OUTPUT: A PARTIAL RESULT FROM THE CALL

Native Plugin Paths:
  c:\program files\autodesk\3ds max 2026\applicationplugins\alembic\contents\alembicimporter.dli
  c:\program files\autodesk\3ds max 2026\applicationplugins\alembic\contents\alembicexporter.dle
  c:\program files\autodesk\3ds max 2026\applicationplugins\maxfluid\contents\bin\maxfluid.dlo
  c:\program files\autodesk\3ds max 2026\applicationplugins\revitimporter\contents\revitimporter.dli
  c:\program files\autodesk\3ds max 2026\applicationplugins\scenesecuritytools\contents\bin\securitytools.gup
  c:\programdata\autodesk\applicationplugins\advanced modeling tools for 3ds max 2026\contents\bin\booleanmodifier.dlm
  c:\programdata\autodesk\applicationplugins\advanced modeling tools for 3ds max 2026\contents\bin\arraymodifier.dlm
  c:\programdata\autodesk\applicationplugins\advanced modeling tools for 3ds max 2026\contents\bin\bevelcutbackmodifier.dlm
  c:\programdata\autodesk\applicationplugins\maxtoa_2026\assexport.dle
  c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldgeometrypropertiesmodifier.dlm
  c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldlightfiltermodifier.dlm
  c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldlight.dlo
  c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldinstanceshape.dlu
  c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldalembicobject.dlo
  c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldproceduralobject.dlo
  c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldvolumeobject.dlo
OK

EXAMPLE:

fn showPackageNativePluginComponentInfo =
(
    local n = PluginPackageManager.GetComponentCount #Plugins
    format "Native Plugin Component Info:\n"
    local fmtstr = "upgradeCode: %; componentName: %; componentVersion: %; componentDescription: %; componentPath: %\n"
    for i = 1 to n do 
    (
        local componentInfo = PluginPackageManager.GetComponentInfo #Plugins i
        local upgradeCode = componentInfo[1]
        local componentName = componentInfo[2]
        local componentVersion = componentInfo[3]
        local componentDescription = componentInfo[4]
        local componentPath = componentInfo[5]
        format fmtstr upgradeCode componentName componentVersion componentDescription componentPath 
    )
)
showPackageNativePluginComponentInfo()

OUTPUT: A PARTIAL RESULT FROM THE CALL

showPackageNativePluginComponentInfo()
Native Plugin Component Info:
upgradeCode: {15c129dd-e05a-49d7-bddc-b5fc3c3f8627}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\program files\autodesk\3ds max 2026\applicationplugins\alembic\contents\alembicimporter.dli
upgradeCode: {15c129dd-e05a-49d7-bddc-b5fc3c3f8627}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\program files\autodesk\3ds max 2026\applicationplugins\alembic\contents\alembicexporter.dle
upgradeCode: {af671c72-cbe1-5245-a2e5-16a57d4f7075}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\program files\autodesk\3ds max 2026\applicationplugins\booleanobject\contents\booleanobject.dlo
upgradeCode: {26302679-93fd-5bf6-94d9-bc29a7d8892a}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\program files\autodesk\3ds max 2026\applicationplugins\capholes\contents\capholes.dlm
upgradeCode: {627ec730-ab0b-4d5b-b7c9-5f93e12d577f}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\program files\autodesk\3ds max 2026\applicationplugins\scenesecuritytools\contents\bin\securitytools.gup
upgradeCode: {81d644ff-83e7-40ed-90e0-5f516f1e075a}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\programdata\autodesk\applicationplugins\advanced modeling tools for 3ds max 2026\contents\bin\booleanmodifier.dlm
upgradeCode: {81d644ff-83e7-40ed-90e0-5f516f1e075a}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\programdata\autodesk\applicationplugins\advanced modeling tools for 3ds max 2026\contents\bin\arraymodifier.dlm
upgradeCode: {81d644ff-83e7-40ed-90e0-5f516f1e075a}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\programdata\autodesk\applicationplugins\advanced modeling tools for 3ds max 2026\contents\bin\bevelcutbackmodifier.dlm
upgradeCode: {3e09e4b4-c19b-11ed-afa1-0242acc0ffee}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\programdata\autodesk\applicationplugins\maxtoa_2026\assexport.dle
upgradeCode: {3e09e4b4-c19b-11ed-afa1-0242acc0ffee}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldgeometrypropertiesmodifier.dlm
upgradeCode: {3e09e4b4-c19b-11ed-afa1-0242acc0ffee}; componentName: ; componentVersion: ; componentDescription: ; componentPath: c:\programdata\autodesk\applicationplugins\maxtoa_2026\arnoldlightfiltermodifier.dlm
OK

EXAMPLE:

for upgradeCode in (PluginPackageManager.GetPackageLoadOrder()) do 
(
    n = (PluginPackageManager.GetPackageEnvironmentVariablesCount upgradeCode)
    pkgInfo = PluginPackageManager.GetPackageInfoByUpgradeCode upgradeCode
    pkgName = pkgInfo[2]
    pkgVersion = pkgInfo[3]
    format "% : % : % %\n" upgradeCode n pkgName pkgVersion
    for j = 1 to n do
    (
        env_name; env_value; env_type
        PluginPackageManager.GetPackageEnvironmentVariable upgradeCode j &env_name &env_value &env_type
        format "  env_name: % env_value: % env_type: %\n" env_name env_value env_type
    )
)

OUTPUT: A PARTIAL RESULT FROM THE CALL

{10a2f92d-c49b-46c2-834d-702be1dbeb07} : 0 : Retopology Tools for 3ds Max 2026 1.6.0.16
{15c129dd-e05a-49d7-bddc-b5fc3c3f8627} : 0 : Alembic 1.0.0
{26302679-93fd-5bf6-94d9-bc29a7d8892a} : 0 : capholes 1.0.0
{3e09e4b4-c19b-11ed-afa1-0242acc0ffee} : 2 : MAXtoA for 3ds Max 2026 5.8.0.0
  env_name: PATH env_value: +./bin env_type: #path
  env_name: PXR_PLUGINPATH_NAME env_value: +./usd env_type: #path
{5a23cf1e-099c-47f9-a6bd-40054a082107} : 0 : Autodesk 3ds Max 2026 CivilView 1.0.1.0
{627ec730-ab0b-4d5b-b7c9-5f93e12d577f} : 0 : 3ds Max Scene Security Tools 2.1.8
{81d644ff-83e7-40ed-90e0-5f516f1e075a} : 0 : Advanced Modeling Tools for 3ds Max 2026 1.8.0.1209
{9d0ba523-c083-4db2-a447-7cbea8a2baba} : 0 : RevitImporter 1.0.0
{af671c72-cbe1-5245-a2e5-16a57d4f7075} : 0 : BooleanObject 1.0.0
{f49b0e7a-e88f-4a56-a211-5ed540241744} : 0 : MaxFluids 0.0.1
OK

Was this information helpful?