1

私は、ブラウザ アプリケーションから Silverlight を使用してインストーラを作成する任務を負っています。する必要がある。

  1. ローカル EXE からバージョンを取得する
  2. Web サービスをチェックして、それが最新バージョンであることを確認します
  3. そうでない場合はzipをダウンロードします
  4. zipを解凍します
  5. 古いEXEを上書きする
  6. EXEを起動

現在、このインストーラー アプリは .NET WinForms で作成されていますが、.NET フレームワークはダウンロードの妨げになっています。

推奨される解決策は SLOOB を使用することですが、完全な信頼を割り当てる方法がわかりません。完全な信頼を割り当てると、プロセスを開始できますか。

ありがとう

4

2 に答える 2

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 に答える
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 に答える