1

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

  1. 从本地 EXE 中获取版本
  2. 检查 Web 服务以查看它是否是最新版本
  3. 如果没有,请下载一个 zip
  4. 解压拉链
  5. 覆盖旧的EXE
  6. 启动EXE

这个安装程序应用程序现在是用 .NET WinForms 编写的,但 .NET 框架是人们下载的障碍。

推荐的解决方案是使用 SLOOB,但我不确定如何分配完全信任。如果我分配完全信任,我可以开始一个过程。

谢谢

4

2 回答 2

1

对此进行调查,我怀疑您将不得不通过 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);
于 2010-03-21T17:18:38.047 回答
1

Silverlight 4 将支持以下内容:http ://timheuer.com/blog/archive/2010/03/15/whats-new-in-silverlight-4-rc-mix10.aspx#sllauncher

于 2010-03-21T17:32:41.673 回答