fix: wsl reg exception

This commit is contained in:
hstyi
2025-06-30 13:17:55 +08:00
committed by hstyi
parent b892d2fe13
commit 7c30933794

View File

@@ -21,34 +21,40 @@ object WSLSupport {
fun getDistributions(): List<WSLDistribution> { fun getDistributions(): List<WSLDistribution> {
if (isSupported.not()) return emptyList() if (isSupported.not()) return emptyList()
val baseKeyPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Lxss"
val guids = Advapi32Util.registryGetKeys(WinReg.HKEY_CURRENT_USER, baseKeyPath)
val distributions = mutableListOf<WSLDistribution>() val distributions = mutableListOf<WSLDistribution>()
for (guid in guids) { try {
val key = baseKeyPath + "\\" + guid val baseKeyPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Lxss"
try { val guids = Advapi32Util.registryGetKeys(WinReg.HKEY_CURRENT_USER, baseKeyPath)
if (Advapi32Util.registryKeyExists(WinReg.HKEY_CURRENT_USER, key)) {
val distroName = for (guid in guids) {
Advapi32Util.registryGetStringValue(WinReg.HKEY_CURRENT_USER, key, "DistributionName") val key = baseKeyPath + "\\" + guid
val basePath = Advapi32Util.registryGetStringValue(WinReg.HKEY_CURRENT_USER, key, "BasePath") try {
val flavor = Advapi32Util.registryGetStringValue(WinReg.HKEY_CURRENT_USER, key, "Flavor") if (Advapi32Util.registryKeyExists(WinReg.HKEY_CURRENT_USER, key)) {
if (StringUtils.isAnyBlank(distroName, guid, basePath, flavor)) continue val distroName =
distributions.add( Advapi32Util.registryGetStringValue(WinReg.HKEY_CURRENT_USER, key, "DistributionName")
WSLDistribution( val basePath = Advapi32Util.registryGetStringValue(WinReg.HKEY_CURRENT_USER, key, "BasePath")
guid = guid, val flavor = Advapi32Util.registryGetStringValue(WinReg.HKEY_CURRENT_USER, key, "Flavor")
flavor = flavor, if (StringUtils.isAnyBlank(distroName, guid, basePath, flavor)) continue
basePath = basePath, distributions.add(
distributionName = distroName WSLDistribution(
guid = guid,
flavor = flavor,
basePath = basePath,
distributionName = distroName
)
) )
) }
} } catch (e: Exception) {
} catch (e: Exception) { if (log.isWarnEnabled) {
if (log.isWarnEnabled) { log.warn(e.message, e)
log.warn(e.message, e) }
} }
} }
} catch (e: Exception) {
if (log.isWarnEnabled) {
log.warn(e.message, e)
}
} }
return distributions return distributions