Forum Discussion
Environment variables in MSIX package wont be used by AVD session host
The application is SAP logon, which contains a number of sub-applications where one of these need environments variables. The package is full of customer specific info, so unfortunately I can't send it to you. I've used the latest version of PSF framework and tried to use env variable fixup. Could you by share your .json and manifest so I can look for syntax errors on my side?
As I mentioned in my previous comment, we had created a test application. The config file was in the format:
{
"applications":
[
{
"id": "ENVVARIABLETEST",
"executable": "VFS/EnvVariableTest.exe"
}
],
"processes":
[
{
"executable": "PsfLauncher.*"
},
{
"executable": ".*",
"fixups":
[
{
"dll": "EnvVarFixup.dll",
"config":
{
"envVars":
[
{
"name": "Test1",
"value": "Value1",
"useregistry": "false"
},
{
"name": "Test2",
"value": "Value2",
"useregistry": "false"
},
{
"name": "Test3",
"value": "Value3",
"useregistry": "false"
}
]
}
}
]
}
]
}
- HoratiuVJul 12, 2023Copper Contributor
Have you managed to make this fixup working for PATH Environment Variable?
- Ferry_van_GelderenJul 25, 2023Copper ContributorAdding environment variables to your MSIX packaged applications can be done as session environment variables but unfortunatly it can be a bit of a hassle. Existing environment variables set for both the system and user will be available for any running proces but any new (or changed) variables added to the registry inside the MSIX container will not be loaded when starting a process from the MSIX container. These registry entries are there so the system will know what environment variables to set during system startup and user login. Setting session environment variables can be done by a proces that will set these environment variables and then starting the program that uses these variables (like using a batch file). You can create a script that set these environment variables for the current session but al the script operators like Powershell.exe or cmd.exe are not part of the MSIX container by default and MSIX entry points (shortcuts) can only point to the executable files that are part of the MSIX container. Using the PSF tooling it is possible to execute a powershell script but from my experience the session environment variables are gone when the script is closed and the main program is started. You can let the powershell script also start the main program after setting the session environment variables but i have not tested this yet.
You may also want to take a look at a small tool i created called MSIX Helper that also handles setting (session) environment variables for your applications running from the MSIX container. You can find it on my Github page if you want to try it.
https://github.com/FvGelderen/AutoHotKey/tree/MSIX-Helper/MSIX%20Helper%201.0/Bin
Please read the provided documentation before using it. Any feedback will be appreciated.- mohant1850Jun 13, 2024Copper Contributor
Ferry_van_Gelderencan you please elaborate steps or process to handle path environment variables.
- SajidRavatApr 27, 2023Copper ContributorWe are also struggling with Environment Variables in MSIX. Tried many configurations without success.
Would you expect to see the Environment Variable listed in the Environment tab for the virtual process in Process Explorer?- Aniket_BanerjeeMay 03, 2023Brass Contributor
Hi SajidRavat,
This is a solution suggested by TIMOTHY_MANGAN on a similar issue from another post:
There are two requirements to see the virtualized environment variables:
- The process enumerating or querying the variable must be running inside the container.
- The process enumerating or querying the variable must use a standard api to perform the action. I believe that Process Explorer uses underdocumented interfaces to read kernel memory (the Process block) directly, which does not know about the virtualized variables.
To determine if the process is in the container you can use an elevated Process Explorer (either inside or outside of the container) and look at the Jobs tab. Alternatively, you can add the "Package Name" and/or "JobID" column in Task Manager.
To see what the app sees, you can create a shortcut to a cmd in the package (to run inside the container), or alternatively you can use the powershell "invoke-CommandInDesktopPackage". In both cases, you use period asterisk method in the json.
You can try this approach to track the environment variables for your scenario.