Frage

Ich habe mit dem Schreiben ein Installationsprogramm mit einem Silverlight aus Browseranwendung beauftragt. Ich muss.

  1. erhalten Sie die Version aus einem lokalen EXE
  2. überprüft einen Web-Service, um zu sehen, dass es die neueste Version ist
  3. laden Sie eine zip, wenn nicht
  4. Entpacken Sie die ZIP
  5. überschreiben die alte EXE
  6. starten Sie die EXE-Datei

Der Installer App ist in .NET WinForms geschrieben jetzt aber der .NET-Framework ist ein Hindernis für die Menschen zum Download bereit.

Die empfohlene Lösung ist, eine SLOOB zu verwenden aber ich bin nicht sicher, wie voll Vertrauen zuzuweisen. Wenn ich volles Vertrauen zuweisen beginne ich einen Prozess.

Danke

War es hilfreich?

Lösung

in diesem Sehen, ich vermute, Sie gehen den Prozess mithilfe von WMI über die COM-Schnittstelle zu haben, zu erstellen. Am Ende des Tages, das macht dies eine sehr schwierige Wahl und sehr störanfällig aufgrund einer Vielzahl von Gründen (WMI deaktiviert oder gesichert sein, Benutzer nicht die volle Vertrauen, etc.) Ich vermute, Sie wäre viel besser, aus einem .msi-Bereitstellungspaket oder etwas ähnliches zu schaffen, die den Rahmen war in der Lage zu gehen und downloaden, falls erforderlich. Es gibt eine Menge von Bereitstellungsmodellen zur Verfügung, von denen fast alle zu diesem überlegen fühlen.

Das heißt, wenn Sie dies tun werden:

das COM-Objekt zu erhalten, Sie gehen zu dem AutomationFactory.CreateObject(...) API verwenden wollen. Tim Heuer stellt eine Probe hier.

Gehen Sie tatsächlich die WMI Scripting, Sie gehen zu dem WbemScripting.SWbemLocator Objekt als Wurzel schaffen wollen. Von dort aus, verwenden Sie die ConnectServer Methode einen wmi-Dienst auf der genannten Maschine zu bekommen. Anschließend können Sie das Win32_Process Modul abfragen, um neue Prozesse zu erstellen.

Edit: Ich verbrachte ein wenig Zeit, daran zu arbeiten und auch auf meinem lokalen Rechner als Admin Ich bin in Sicherheit Probleme läuft. Der richtige Code etwas ähnliches sein würde:

        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);

Andere Tipps

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top