即使完全信任,Silverlight (SLOOB) 也可以启动进程吗?
-
21-09-2019 - |
题
我的任务是编写一个带有 silverlight 浏览器应用程序的安装程序。我需要。
- 获取本地 EXE 的版本
- 检查网络服务以查看它是否是最新版本
- 如果没有,请下载一个 zip 文件
- 打开拉链
- 覆盖旧的EXE
- 启动EXE
这个安装程序应用程序现在是用 .NET WinForms 编写的,但 .NET 框架是人们下载的障碍。
推荐的解决方案是使用 SLOOB,但我不确定如何分配完全信任。如果我给予完全信任,我可以启动一个流程。
谢谢
解决方案
考虑到这一点,我怀疑您将必须通过 COM 接口使用 WMI 创建进程。归根结底,这使得这是一个非常困难的选择,并且由于多种原因(WMI 被禁用或安全、用户不会给予完全信任等)而很容易失败,我怀疑你会好得多如果需要的话,可以创建一个 .msi 部署包或类似的东西来下载框架。有很多可用的部署模型,几乎所有模型都比这个模型优越。
也就是说,如果你要这样做:
要获取 COM 对象,您需要使用 AutomationFactory.CreateObject(...)
API。 Tim Heuer 在此提供了一个示例。
要实际执行 WMI 脚本,您需要创建 WbemScripting.SWbemLocator
对象作为根。从那里,使用 ConnectServer
在指定机器上获取 wmi 服务的方法。然后您可以询问 Win32_Process
模块来创建新进程。
编辑:我花了一点时间来解决这个问题,即使在我的本地计算机上作为管理员,我也遇到了安全问题。正确的代码类似于:
dynamic locatorService = AutomationFactory.CreateObject("WbemScripting.SWbemLocator");
dynamic wmiService = locatorService.ConnectServer("winmgmts:{impersonationLevel=impersonate,authentationLevel=Pkt}//./root/cimv2");
dynamic process = wmiService.Get("Win32_Process");
dynamic createParameters = process.Methods_["Create"].InParameters.SpawnInstance_;
createParameters.CommandLine = "cmd.exe";
wmiService.ExecMethod("Win32_Process", "Create", createParameters);
其他提示
不隶属于 StackOverflow