如果你(尤其是 chloe 的老板)同意,那
- 网站不应监视客户的计算机
- 用户有权在他即将安装的软件的系统要求方面获得一点帮助
- 此类帮助不应涉及降低安全设置
你的选择是
- 列出要求并详细说明如何确定它们
- windows:为用户提供(下载)生成/显示适当报告的 HTA( HTML 应用程序)的源
- unix/linux:为用户提供(下载)脚本的来源(选择至少两种流行的语言)生成/显示适当的报告
- 鉴于您将编写一个安装程序来检查要求,您可以将这些检查捆绑到一个独立的“确保要求”应用程序中
如果您认为 HTA 合适,请说出来,我会添加到这个答案中。
为了让你开始:
简约的 sysreq.hta:
<html>
<head>
<title>System Requirements For XXX</title>
<hta:application
id="sysreq"
></hta>
<script type="text/vbscript" src="sysreq.vbs"></script>
<script type="text/jscript" src="sysreq.js"></script>
</head>
<body onload="onload">
<table id="tblSysReq" border="1" summary="KeepTidyHappy">
<tr>
<td id="tdOS">
</td>
</tr>
<tr>
<td id="tdMSSQL">
</td>
</tr>
</table>
</body>
</html>
对于生产版本,您应该使用 HTML 编辑器/ide 编写一个漂亮的页面,然后插入 hta 元素。有一个相当过时的向导可以帮助您将 HTA 特定(交互式)元素/代码放入 HTML。一些 MS 安装 CD/DVD/ISO 包含一个 setup.hta,您可以使用它来获得更多灵感;一些 googleing 会将您指向 .hta 应用程序,例如System Documenter Wizard。如果没有仔细的单步测试,这些来源都不可信;例如:我从官方文档开始我的 .hta并且无法让它在 Windows 7 上运行,直到我消除了讨厌的.hta 文件<meta http-equiv="x-ua-compatible" content="ie=9">
。
虽然您可能会将您的脚本内联到 .hta 中,但为了开发,最好通过 script 标签的 src 属性包含代码。在 sysreq.vbs 中:
Sub onload()
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colSettings
' Wscript.Echo "OS Name: " & objOperatingSystem.Caption
document.getElementById("tdOS").innerText = "OS Name: " & objOperatingSystem.Caption
Next
If False Then
Dim WSHShell : Set WSHShell = CreateObject("WScript.Shell")
On error resume next
' test = wshshell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names")
test = wshshell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL\SQLEXPRESS")
If 0 <> Err.Number Then
' msgbox "SQL Server not found"
MsgBox Err.Description
test = "SQL Server <b>not</b> found"
Else
' msgbox "SQL Server found"
test = "<i>SQL Server found</i>"
End If
document.body.all("tdMSSQL").innerHTML = test
Else
JsHelper
End If
End Sub
我试图按照您发布的代码进行操作;必要的更改是通过使用document.getElementById()
或'写入'到 HTML 元素的 innerText/HTML 来替换 WScript.Echo 输出document.body.all()
。
要获得用于收集信息的想法/示例代码,请查看Scriptomatic之类的工具。正如您提到的 JScript,我输入了 sysreq.js:
function JsHelper() {
var WSHShell = new ActiveXObject("WScript.Shell")
try {
var test = WSHShell.RegRead("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL\\SQLEXPRESS");
document.all.tdMSSQL.innerHTML = "<i>SQL Server found</i>";
}
catch(e) {
alert(e);
document.all.tdMSSQL.innerHTML = "SQL Server <b>not</b> found";
}
}
让您比较处理相同问题的 JScript 和 VBScript 代码。
值得一提的是——我在 Windows XP 和 7 上使用非特权用户帐户进行了测试;我希望你的里程不会改变。
WRT chloe 的问题“是否可以将两种不同的脚本语言放在同一个 hta 中?”:在 .HTA(和 .WSF 或 .WSC)中,您可以混合所有(已安装的)ActiveScript 语言(VBScript、JScript、Perlscript、Pythonscript、Rubyscript , ...) 通过内联或通过 src 属性使用 script 标签。这非常适合学习,但通常不适合生产代码。