我目前在安装时收到此错误Java SE 运行时环境(jre8
),更新以前工作正常:
Searching if new version exists...
ERROR: Specified cast is not valid.
The install of jre8 was NOT successful.
Error while running 'C:\ProgramData\chocolatey\lib\jre8\tools\chocolateyInstall.ps1'.
See log for details.
Chocolatey installed 0/1 packages. 1 packages failed.
See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).
Failures
- jre8 (exited -1) - Error while running 'C:\ProgramData\chocolatey\lib\jre8\tools\chocolateyInstall.ps1'.
See log for details.
chocolatey.log(由于 30 000 个字符的长度限制,我无法在此处粘贴,因此我删除了日期)
答案1
我刚刚遇到了这个问题。我做了:
get-childitem hklm:\software\microsoft\windows\currentversion\uninstall\ |
foreach { write-host $_.pspath; $_ } | get-itemproperty
并且它HKLM:\software\microsoft\windows\currentversion\uninstall\nbi-nb-base-8.2.0.0.201609300101
在 Netbeans 8.2 上阻塞了。我在 regedit 中看到 NoModify 有“(无效的 DWORD(32 位)值)”。 get-itemproperty -erroraction continue
没有效果。
编辑:Netbeans 人员最终正在修复此问题(但并非真的)。 https://issues.apache.org/jira/browse/NETBEANS-2523
编辑:他们可能永远不会修复它。
答案2
此错误似乎是由于失败而导致的Get-ItemProperty
。从您的日志来看,失败的脚本部分如下:
Write-Output "Searching if new version exists..."
$checkreg64 = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion | Where-Object { $_.DisplayName -like '*Java 8*' -and ([Version]$_.DisplayVersion) -eq $version} -ErrorAction SilentlyContinue
$checkreg32 = Get-ItemProperty HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion | Where-Object { $_.DisplayName -like '*Java 8*' -and ([Version]$_.DisplayVersion) -eq $version} -ErrorAction SilentlyContinue
Get-ItemProperty
当期望读取类型 X 的注册表项并读取其数据与该项类型的约束不匹配的项时,会发生此失败。研究1 研究2 研究3
解决方案在这种情况下是在注册表中找到无效的键(在$checkreg64
和中查询的注册表路径$checkreg32
),并手动将其重新创建为值为 1 的 DWORD。
更新:
从注释中可以看出,查询时会得到“指定的强制类型转换无效”的结果Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*
。此位置中可能存在一个不相关的键,其中包含无效的子键,导致针对此位置的查询失败。我们应该能够从卸载位置单独解析每个键,以确定我们在查询哪个键时遇到问题。
运行以下命令:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | % { write-host "Key Name:" $_.PSChildName }
这应该会返回一些结果,然后会返回错误Specified cast
。错误将发生在包含无效子项的项上。
例如,如果上面的结果如下所示:
Key Name: fake_key_name_1
Key Name: fake_key_name_2
Key Name: fake_key_name_3
Get-ItemProperty : Specified cast is not valid.
然后,您能够成功查询的最后一个键是fake_key_name_3
。我们无法查询的键是列表中的下一个键。打开 regedit 并浏览到下一个键名(可能是fake_key_name_4
)。这就是失败的地方。这里应该有一个无效的子键。修复此问题,然后再次运行该命令。如果没有错误,则一切就绪。如果出现更多有错误的键,请查找并修复它们的无效子键。
在我最初提供的链接示例之一中,用户希望找到一个带有数据 = “(无效的 DWORD(32 位)值)” 的 REG_DWORD 键。这是需要修复的关键。
答案3
这是针对 PowerShell 中此问题的 NetBeans 原因的具体答案,无需手动遍历注册表。
## Check for and fix known exception where broken registry entry breaks Uninstall querying
# https://issues.apache.org/jira/browse/NETBEANS-2523
try {
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*,HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* -ea 0 | Out-Null
} catch [System.InvalidCastException] {
$NetBeans = (& reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall" | ?{$_ -match 'nbi\-'})
$NetBeans | %{ If (Get-Item ($_ -Replace 'HKEY_LOCAL_MACHINE','HKLM:') -ea 0).Property -contains 'NoModify') { & reg add $_ /v NoModify /t REG_DWORD /d 0x1 /f | Out-Null } }
}
答案4
我无法在 Windows 10 上使用 Inny 的答案。使用 Inny 的代码并进行修改后,我让它工作了。我希望这能帮助别人。
## Check for and fix known exception where broken registry entry breaks Uninstall querying
https://issues.apache.org/jira/browse/NETBEANS-2523
尝试 { Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall*,HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall* -ea 0 | Select-Object DisplayName、DisplayVersion、Publisher、InstallDate |export-csv -Path c:\uninstall_3264bit_20240423.csv -NoTypeinformation
} 捕获 [System.InvalidCastException] { $NetBeans = (® query "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall" | ?{$_ -match'nbi-'}) $NetBeans | %{ 如果 ((Get-Item ($_ -Replace'HKEY_LOCAL_MACHINE','HKLM:') -ea 0).Property -contains'NoModify') {® add $_ /v NoModify /t REG_DWORD /d 0x1 /f | Out-Null } } }