3

在 Surface 平板电脑上的 Windows RT 中,我运行的 VB 脚本在第一行失败,即:

Set WshShell = WScript.CreateObject("WScript.Shell")

错误消息说:

无法使用错误代码创建对象 WScript.Shell:80070005

这似乎是与访问权限有关的通用错误代码。有任何想法吗?

我正在以管理员权限运行。

4

2 回答 2

1

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 调用的对象)是:

  • Scripting.FileSystemObject
  • VBScript.RegExp
  • 脚本.字典

由于用户模式代码完整性 (UMCI),无法在 Windows RT 上创建其他 VBScript 对象(例如,WScript.Shell、WScript.Network、WinNTSystemInfo、Wbemscripting.SWbemLocator 等)。

有关上述代码的更强大版本,请查看我发布到我的 GitHub 存储库的脚本“Get-COMObjectsProgIDsAllowedToLaunch.ps1”:https ://github.com/franklesniak/PowerShell_Resources

于 2021-01-17T06:11:18.383 回答
0

我在一些地方看到有人评论说 RT 不允许 VBScript 运行WScript.Shell,尽管我还没有找到任何官方文档。

可能只是脚本需要以管理员权限运行。

于 2013-10-02T19:11:12.773 回答