这是一个ActiveX控件吗?

3

我有一段相当简单的代码块。

Sub Run(Name)
on error resume next
Set objShell = CreateObject("WScript.Shell")
if Err.Number = 429 then
    alert("Invalid Security Level.")
    exit sub
end if
objShell.Run Name
if Err.Number <> 0 then
    Alert("Please verify your Operating System Choice")
end if
Set objShell = Nothing 
End Sub

我在网站上使用这个功能,让用户通过链接来进行硬盘碎片整理:
<a href="#" onclick="Run('c:\\windows\\system32\\dfrgui.exe')">Defrag Windows Vista</a><br>
<a href="#" onclick="Run('c:\\windows\\system32\\dfrg.msc')">Defrag Windows Server 2003 SE or Windows XP</a>

你可能已经猜到了,使用:

Set objShell = CreateObject("WScript.Shell")

造成了一些问题,并且它会抛出一个错误,指出对象无法创建。我可以进入IE安全设置并将安全设置更改为“初始化和未标记为安全脚本的ActiveX控件”,然后当我点击“是”时,它实际上会提示我并运行。
我的问题是:由于这不是来自asp服务器的单独代码块(没有代码后台的htm页面),我真的需要花20美元进行签名吗?如果需要,我应该如何在htm页面中的vbscript中进行签名?
此外..将其实现到具有SSL证书的现有站点中是否可能以某种方式集成到现有证书中?
我想做的就是有类似于...
“如果您想对计算机进行碎片整理,请单击此处”
“如果您想运行磁盘扫描,请单击此处”
的链接。
要求客户去更改他们的安全设置不是一个选择。
1个回答

6
你的代码并不是问题所在。当你创建“WScript.Shell”对象时,IE会询问该控件是否可以安全地进行脚本编写。该对象返回“No”。这就是为什么你的代码无法运行的原因。只要你继续使用“WScript.Shell”,就会一直出现这个问题。
解决方法之一是创建自己的标记为“安全脚本”的ActiveX控件,但这样你需要让所有用户都安装它。

所以我可以构建ActiveX控件...花费20美元进行签名并标记为安全脚本,并使所有用户安装它...或者让所有用户更新其浏览器安全设置,以使其正常工作...这有点麻烦。 - Patrick
没错。我之前为一个内部网站做过这个。我们只是使用了自签名证书,所以签署ActiveX控件没有任何费用。 - David
即使您支付了20美元购买代码签名证书,也无法避免浏览器安全问题。但是,如果您将自签名证书安装到每台客户端计算机上(可以使用Active Directory或组策略对象进行部署),那么您可以将其保存为完全信任的证书,而且不需要花费任何费用,这样就可以解决问题。 - Eric Falsken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接