Nie remoting

0

Witam. Mam takie pytanie, czy, a jeśli tak, to w jaki sposób można wywołać funkcję innego procesu.

Przykład:
1.App.exe uruchamia update.exe (np. przez System.Diagnostics.Process)
2.update.exe wywołuje funkcję

public bool ask()

znajdującą się w działającym nadal app.exe (o ten moment chodzi)
3. jeśli ask() zwróci true, to update.exe zamyka app.exe, a następnie podmienia go nowszą wersją
4. update.exe uruchamia app.exe (tę nową)

Jak widać jest to algorytm aktualizacji.
I moje pytanie o krok 2: Jak wywołać funkcję innego działającego procesu bez użycia remoting

0

W jaki sposob chcesz podmienic app.exe z update.exe jesli app.exe bedzie dalej dzialalo?
Nie da sie... na ten moment musisz zamknac app.exe. Wtedy pozbywasz sie tego problemu i po prostu app.exe odpala update.exe i sie zamyka. Update.exe robi update app.exe i startuje app.exe i sam konczy prace...
Jesli podmieniasz tylko dll'ki, ktore sa dynamicznymi pluginami to nie potrzebujesz osobnego programu do tego.

0

Ale w punkcie 3 zamykam app.exe.

A przy okazji nie tylko o aktualizację chodzi, a o koncepcję.

Innym miejscem w którym chciałbym to wykorzystać jest konstrukcja klient-serwer, gdzie serwer jest procesem chodzącym cały czas, a klient (na tym samym kompie) jest programem sterującym tym serwerem. Tak dzialają np. Programy antywirusowe.

Co do dllek, to myślałem nad tym, ale ma to 2 wady:

  1. W większości i tak zmieniany jest główny plik startowy mojej aplikacji
  2. Po załadowaniu dllek nie można id usunąć bez usunięcia całej domeny aplikacji
0

Może to pomoże:

Przesylanie obiektow przez MSMQ

Nie wykorzystuje .NET Remoting .. ale pozwala jedynie przesyłać obiekty pomiędzy procesami (nie wywoływać czyjeś funkcje). Możesz to łatwo przerobić do swoich potrzeb.

0

Podoba mi się ta metoda. Jeśli z niej może korzystałeś, to mam kilka pytań:

  1. Czy może ona przesyłać referencje, czy tylko obiekty?
  2. Wymaga ona instalacji odpowiedniej usługi, czy da się to zautomatyzować? Nie chcę po udostępnieniu użytkownikowi kazać bawić się panelem sterowania. Wolałbym to umieścić w instalatorze.
0
  1. Czy może ona przesyłać referencje, czy tylko obiekty?

W wiadomości idzie cały obiekt serializowany do XMLa (można użyć innego serializatora jeśli chcesz - wtedy trzeba dokonać małych przeróbek). A więc - nie referencje.

  1. Wymaga ona instalacji odpowiedniej usługi, czy da się to zautomatyzować? Nie chcę po udostępnieniu użytkownikowi kazać bawić się panelem sterowania. Wolałbym to umieścić w instalatorze.

Instalacja MSMQ wymaga wsadzenia płyty z Windowsem .. więc chyba automatyczny instalator nie będzie w stanie tego dokonać :| Ale warto pogooglać w tym temacie...

0

:( niestety MSMQ odpada. Na stronie http://relatedterms.com/ViewThread.aspx?t=792205 znalazłem coś takiego:

MSMQ can't be installed on Windows XP Home.

Ale i tak wielkie dzięki za pomoc, kiedy wspomniałeś o serializacji do XML wpadłem na pomysł rozwiązania problemu:

  1. Aplikacja-serwer okresowo co 2 sekundy sprawdza czy plik xml uległ zmianie
    2.Jeśli tak, to odpowiednio reaguje

  2. Aplikacja klient zmienia zawartość pliku XML.

Powinno to nawet dać sposób na komunikację dwustronną. Dzięki za pomoc.
Mam wrażenie, że właśnie w ten sposób działa MSMQ

1 użytkowników online, w tym zalogowanych: 0, gości: 1