Uruchomienia WPF za pomocą Windows Service

Uruchomienia WPF za pomocą Windows Service
DE
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 5 lat
  • Postów:10
0

Cześć.
Mam pewien problem. Napisałem apkę pod ASP .Net Core, która działa jako serwis pod Windowsem. Aplikacja ta ma za zadanie uruchomić mi inną aplikację WPF'a.
Problem polega na tym że w trybie debugowania wszystko działa, natomiast po publikacji owa aplikacja WPF się nie odpala.
Oto kod:
//Tworzę sobie obiekt nowej aplikacji: public Application app { get; set; }

Kopiuj
 public class AplicationInstance: SingletonExtension<AplicationInstance>
    {

        public SessionOptions FTPSessionOptions { get; set; }
        public string FTPFingerprint { get; set; }

        public List<FileModel> CurrentFiles;
        public List<FileModel> OldFiles;
        public ObservableCollection<FileModel> DifrentFiles;

        private AplicationInstance()
        {
            CurrentFiles = new List<FileModel>();
            OldFiles = new List<FileModel>();
            DifrentFiles = new ObservableCollection<FileModel>();
            

            StartNewAplicationThread();
            Task.Delay(1000).Wait();
        }

        public Application app { get; set; }
        public void DispatchToApp(Action action)
        {
            app.Dispatcher.Invoke(action);
        }
        [STAThread]
        private void StartNewAplicationThread()
        {
            var appthread = new Thread(new ThreadStart(() =>
            {
                try
                {
                    app = new Application();
                    app.ShutdownMode = ShutdownMode.OnExplicitShutdown;
                    
                    app.Run();
                }
                catch (Exception ex)
                {
                    var t = ex.Message; ;
                }
            }));
            appthread.SetApartmentState(ApartmentState.STA);
            appthread.Start();
            appthread.Name = "NSP Files -> All File Browser " + DateTime.Now;

        }
    }

Następnie w innej klasie wywołuję sobie metodę DispatchToApp(()=>{....}) np:

Kopiuj
   private static void StartWpfWindows()
        {
            WPFStartModel _newWPFApplication = new WPFStartModel();
            _newWPFApplication.Title = "xxx";
            _newWPFApplication.Files = AplicationInstance.Instance.DifrentFiles.ToList();
           

            AplicationInstance.Instance.DispatchToApp(() => {

                var appWindow = new WPFAplication.FileListWindow(_newWPFApplication);
                appWindow.Show();
            });
        }

Klasa FileListWindow dziedziczy po System.Windows.Window

Jakieś pomysły / rady ?

AF
  • Rejestracja:prawie 18 lat
  • Ostatnio:około 2 miesiące
0

Skąd wiesz, że się nie odpala? A nie włącza się czasem z innym użytkownikiem w innej sesji?

DE
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 5 lat
  • Postów:10
0
Afish napisał(a):

Skąd wiesz, że się nie odpala? A nie włącza się czasem z innym użytkownikiem w innej sesji?

Serwis asp.net się odpala. Nie pojawia się okno z aplikacji WPF.

mr-owl
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad rok
  • Postów:206
0

Ale gdzie ma się ta aplikacja odpalić? Na serwerze, po stronie klienta jako część strony WWW?

Pozdrawiam,

mr-owl

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
1

serwisy windowsowe z założenia nie mają okien bo nie powinny w ten sposób się komunikować ze światem ani nie odpalają aplikacji z oknami. Przyczyna jest bardzo prosta - okno aby się pokazać potrzebuje mieć gdzie - serwis działa bez zalogowanego usera więc okno nie ma się gdzie pokazać. Masz błąd w samej logice aplikacji a nie w kodzie. BTW jak debugujesz serwis to jesteś zalogowany. Jeśli windows service potrzebuje się komunikować z userem to tworzy się osobną aplikację "z oknami" i ona komunikuje się z serwisem przez gniazda/pipes/shared mem/wcf/... (szukaj pod hasłem c# IPC). Tą aplikację może startować serwis w momencie zalogowania się usera albo może być startowana przez usera na żądanie.


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.