Uruchomienia WPF za pomocą Windows Service

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

 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:

   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 ?

0

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

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.

0

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

Pozdrawiam,

mr-owl

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.

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