我的任务是编写一个带有 silverlight 浏览器应用程序的安装程序。我需要。

  1. 获取本地 EXE 的版本
  2. 检查网络服务以查看它是否是最新版本
  3. 如果没有,请下载一个 zip 文件
  4. 打开拉链
  5. 覆盖旧的EXE
  6. 启动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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top