我有ATL内置揭露了一组用于配置服务管理命令的LocalServer32 COM接口的Windows服务,这些可以从VBScript中使用,例如:如何自动提升用于自动化的COM接口?
Set myObj = WScript.CreateObject("MySvc.Administrator")
myObj.DoSomething()
我想DoSomething的运行提升,并且我希望UAC提示在VBScript调用它时自动提示。这可能吗?
我知道可以在提升的命令外壳运行脚本,并我可以使用
objShell.ShellExecute WScript.FullName,CHR(34)& WScript.ScriptFullName & CHR(34),vbNullString,“ runas“
例如,要运行VBScript自身提升,并且其中任何一个都可以正常工作 - COM方法发现自己提升了。但是,AFAIK在桌面上获取一个提升的资源管理器窗口却很复杂(这不像右键单击“开始”/“附件”/“Windows资源管理器”/“以管理员身份运行”那样简单,实际上并没有升级,或者至少不是COM方法没有找到本身的提升。)我希望本地管理员组中的用户能够将文件和文件夹拖放到脚本上,然后让脚本使用这些路径名作为参数调用管理COM接口,并且COM方法被提升。 (我希望有一些简单的事情比用参数简单地使用ShellExecute“runas”)。
我已经尝试在服务EXE的清单中设置UAC执行级别来要求管理员,并设置Elevated/Enabled = 1和注册表中的MySvc.Administrator类的LocalizedString,这些都不起作用。
编辑:
当我写的COM方法发现自己升高,我心里想的是传入COM请求的安全令牌显示它从管理员来了。我正在检查此令牌以查看请求是否被允许。 COM对象所在的Windows服务进程可能以LocalSystem身份运行。
然后*现有的*过程不能被提升,而是只有一个*新的过程可以开始提升?如果是这样的话,那就很有道理。 – 2010-03-14 19:00:42
通过在vbscript的GetObject调用中使用COM Elevation Moniker,可以在升级过程中实例化COM对象,而无需升级脚本进程,这正是我想要的 - 只需要提升DoSomething,而不需要提升剧本。 – 2010-03-18 03:16:24
不错!我完全不知道这个名字。超出过程COM服务器是一个单独的升级过程,所以至少我误导了你:-)) – wqw 2010-03-18 21:44:25