问:
您好,脚本专家!我知道,在运行脚本时,可使用代码确定脚本是否在 WScript 或 CScript 中运行。但我想不明白的是:运行脚本之前,如何确定计算机上的默认脚本宿主?
-- AT
答:
您好,AT。您知道,人们完全难倒脚本专家并不是常事;不过我们不得不承认这个问题的确有点挑战性。(嗯,嗯:那么,或许它并不足以能够难倒脚本专家;老实说,事实上它相当简单。不过你们无需知道这些。)我们还不知道如何回答这个问题,但我们知道,为了帮助您解决这个问题,我们将会需要大量辛勤的工作和奉献。
但是,在困难面前,脚本专家放弃过吗?嗯,事实上,我们放弃过。不过,在处理一些毫不相关的事情时,我们却意外发现了答案。以下这个脚本(使用有点迂回的方法)将告诉您计算机上的默认脚本宿主:
从中可以看出,有关默认脚本宿主的信息存储在注册表中,尽管不是处在特别明显的位置。您所需要做的只是打开 HKEY_CLASSES_ROOT,找到注册表项 VBSFileShellOpenCommand,然后查看默认值。(默认值是个例外的未命名的注册表值,该注册表值在 Regedit 中以“(默认)”的形式出现。)“(默认)”的值将是脚本宿主可执行程序的路径 (例如,%SystemRoot%System32WScript.exe)。换句话说,可执行程序文件将告诉您默认脚本宿主是 CScript 还是 WScript。
那么,实际上我们如何获得该值呢?嗯,我们首先定义一个名为 HKEY_CLASSES_ROOT 的常量,并将其值设定为 &H80000000;这会告诉脚本我们要使用哪个注册表配置单元。然后,连接到本地计算机上的 WMI 服务(尽管我们可轻而易举地对远程计算机运行该脚本),务必绑定到 rootdefault 命名空间。(大多数 WMI 脚本使用 rootcimv2 命名空间,但是出于某些原因,系统注册表提供程序还是位于 rootdefault 中。可能是住房较便宜或是学校较好的原因吧。)
进行连接后,我们创建名为 strKeyPath 的变量,并为其分配值 VBSFileShellOpenCommand。此时,我们准备从注册表中读取该值。
您好,脚本专家!我知道,在运行脚本时,可使用代码确定脚本是否在 WScript 或 CScript 中运行。但我想不明白的是:运行脚本之前,如何确定计算机上的默认脚本宿主?
-- AT
答:
您好,AT。您知道,人们完全难倒脚本专家并不是常事;不过我们不得不承认这个问题的确有点挑战性。(嗯,嗯:那么,或许它并不足以能够难倒脚本专家;老实说,事实上它相当简单。不过你们无需知道这些。)我们还不知道如何回答这个问题,但我们知道,为了帮助您解决这个问题,我们将会需要大量辛勤的工作和奉献。
但是,在困难面前,脚本专家放弃过吗?嗯,事实上,我们放弃过。不过,在处理一些毫不相关的事情时,我们却意外发现了答案。以下这个脚本(使用有点迂回的方法)将告诉您计算机上的默认脚本宿主:
从中可以看出,有关默认脚本宿主的信息存储在注册表中,尽管不是处在特别明显的位置。您所需要做的只是打开 HKEY_CLASSES_ROOT,找到注册表项 VBSFileShellOpenCommand,然后查看默认值。(默认值是个例外的未命名的注册表值,该注册表值在 Regedit 中以“(默认)”的形式出现。)“(默认)”的值将是脚本宿主可执行程序的路径 (例如,%SystemRoot%System32WScript.exe)。换句话说,可执行程序文件将告诉您默认脚本宿主是 CScript 还是 WScript。
那么,实际上我们如何获得该值呢?嗯,我们首先定义一个名为 HKEY_CLASSES_ROOT 的常量,并将其值设定为 &H80000000;这会告诉脚本我们要使用哪个注册表配置单元。然后,连接到本地计算机上的 WMI 服务(尽管我们可轻而易举地对远程计算机运行该脚本),务必绑定到 rootdefault 命名空间。(大多数 WMI 脚本使用 rootcimv2 命名空间,但是出于某些原因,系统注册表提供程序还是位于 rootdefault 中。可能是住房较便宜或是学校较好的原因吧。)
进行连接后,我们创建名为 strKeyPath 的变量,并为其分配值 VBSFileShellOpenCommand。此时,我们准备从注册表中读取该值。







