On 8/7/19 4:33 AM, Brian Inglis wrote: > On 2019-08-06 09:20, Michael Haubenwallner wrote: >> using 'env -i' to create an empty environment, the SYSTEMROOT and WINDIR >> environment variables are preserved (or recreated): >> $ /usr/bin/env -i /usr/bin/env >> SYSTEMROOT=C:\Windows >> WINDIR=C:\Windows >> And with cygpath, there is the -A, -D, -H, -O, -P, -S, -W and even -F flags >> to query the values for various directories. >> Now what I've failed to find is how to query the value for the "SystemDrive" >> environment variable. >> The problem behind is that I'm using "vswhere.exe" to locate some Visual >> Studio >> environment from within some scripts run via 'env -i', causing vswhere.exe to >> create a directory named "%SystemDrive%" in the current working directory: >> So I better ensure the SystemDrive environment variable is set for >> vswhere.exe. >> Any ideas? > > There is a reg entry: > > $ head > /proc/registry/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SystemBootDevice; > echo > multi(0)disk(0)rdisk(1)partition(3) > > but how do you convert that to a device letter? > > SYSTEMDRIVE is a dynamic env var created at startup pointing to the boot drive > letter. It is not instantiated anywhere else as far I could find. A number of > low level reg entries use that env var. Only option is to pass it through:
Heck, even CreateEnvironmentBlock() relies on SYSTEMROOT env var being set, otherwise returning things like ProgramData="%SystemDrive%\ProgramData". > > $ /usr/bin/env -i SYSTEMDRIVE="$SYSTEMDRIVE" /usr/bin/env > SYSTEMDRIVE=C: > SYSTEMROOT=C:\WINDOWS > WINDIR=C:\WINDOWS Feels like the Cygwin DLL better should try to keep SYSTEMDRIVE being set, no? /haubi/ (about to prepare some patch) -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple