在 Surface 平板电脑上的 Windows RT 中,我运行的 VB 脚本在第一行失败,即:
Set WshShell = WScript.CreateObject("WScript.Shell")
错误消息说:
无法使用错误代码创建对象 WScript.Shell:80070005
这似乎是与访问权限有关的通用错误代码。有任何想法吗?
我正在以管理员权限运行。
在 Surface 平板电脑上的 Windows RT 中,我运行的 VB 脚本在第一行失败,即:
Set WshShell = WScript.CreateObject("WScript.Shell")
错误消息说:
无法使用错误代码创建对象 WScript.Shell:80070005
这似乎是与访问权限有关的通用错误代码。有任何想法吗?
我正在以管理员权限运行。
Windows RT(也称为 Windows 8 RT、Windows 8.1 RT 和 Surface RT)使用用户模式代码完整性 (UMCI) 来限制允许运行的软件。
在 VBScript 的情况下,UMCI 的代码完整性组件只允许创建“开明的”COM 对象。
“哪些 COM 对象是开明的?” 你问。好问题。让我们在我们的 Windows RT 设备上使用 PowerShell来帮助我们找出答案。
$arrInstances = @(Get-WMIObject -ClassName 'Win32_COMSetting')
$arrCOMObjectProgIDs = @($arrInstances | Where-Object { $null -ne $_.ProgId } |
ForEach-Object { $_.ProgId })
$ErrorActionPreference = [System.Management.Automation.ActionPreference]::SilentlyContinue
$result = @($arrCOMObjectProgIDs | ForEach-Object { if (New-Object -ComObject $_) { $_ } })
$result
在我完全打补丁的 Surface 2 设备上,截至今天,2021 年 1 月 17 日,唯一具有 ProgID 的开明 COM 对象(即,唯一可从 Windows RT 上的 VBScript 调用的对象)是:
由于用户模式代码完整性 (UMCI),无法在 Windows RT 上创建其他 VBScript 对象(例如,WScript.Shell、WScript.Network、WinNTSystemInfo、Wbemscripting.SWbemLocator 等)。
有关上述代码的更强大版本,请查看我发布到我的 GitHub 存储库的脚本“Get-COMObjectsProgIDsAllowedToLaunch.ps1”:https ://github.com/franklesniak/PowerShell_Resources
我在一些地方看到有人评论说 RT 不允许 VBScript 运行WScript.Shell
,尽管我还没有找到任何官方文档。
可能只是脚本需要以管理员权限运行。