2010-03-13 68 views
0

我有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身份运行。

回答

0

要回答我自己的问题,是的,是否有可能导致UAC对话框从正在访问我的服务的自动化界面的vbscript中实时提出。

我所拥有的是Windows服务中的一个类,它公开了用于访问vbscript的管理界面。该接口在允许您进行修改之前验证您是否有权修改该服务。在Vista和Server 2008上会发生什么情况,除非您已经处于升级过程中(使用管理员安全令牌),否则您使用有限的安全令牌运行,因此服务接口拒绝让您执行任何操作。

为了让UAC对话框出现并提升服务方式,我创建了一个新的COM服务器(EXE),该类服务器在类中放置了完全相同的管理员界面,并通过vbscript自动化。当您要求COM对象执行某些操作时,只需转向该服务,即可创建服务COM对象的一个​​实例,并请求它完全相同,并作为代理来转发请求。

这个新的COM服务器在注册表中注释以使用COM Elevation Moniker msdn link启用提升。

然后,在一个vbscript而不是CreateObject()中,你可以调用GetObject(“Elevation:Administrator!new :)”。此时,当你创建COM对象时,UAC对话框出现,对象被启动在提升的过程中,瞧,我得到我想要的:当你需要访问管理员界面时,UAC对话框显示你选择的显示字符串(和可选的图标),并且对服务的呼叫显示管理员权限

我应该提到,为了保留来自高级COM对象的管理员权限,因为它反过来调用Windows服务COM对象,所以我调用SetBlanket在链接调用上使用隐形功能。 :Client-Side Security Programming

0

VBScript由脚本托管进程托管,因此脚本“继承”了Windows脚本宿主的安全上下文。如果托管进程高于脚本提升权限。无法在托管过程的安全环境之外提升单个接口或单个方法调用。

另一件需要注意的事情是,当非升高的过程产生升高的过程时,UAC始终显示确认。所以当一个非高架的浏览器在脚本上做了一个“runas”时,用户必须确认。当非提升的脚本本身执行“runas”时,用户也必须确认。

+0

然后*现有的*过程不能被提升,而是只有一个*新的过程可以开始提升?如果是这样的话,那就很有道理。 – 2010-03-14 19:00:42

+0

通过在vbscript的GetObject调用中使用COM Elevation Moniker,可以在升级过程中实例化COM对象,而无需升级脚本进程,这正是我想要的 - 只需要提升DoSomething,而不需要提升剧本。 – 2010-03-18 03:16:24

+0

不错!我完全不知道这个名字。超出过程COM服务器是一个单独的升级过程,所以至少我误导了你:-)) – wqw 2010-03-18 21:44:25