Autor Wątek: Wywoływanie Sfery przez usługę systemową  (Przeczytany 3517 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline night

  • Użytkownik
  • **
  • Wiadomości: 57
  • Reputacja +0/-0
  • Wersja programu: zawsze najnowsza.
Wywoływanie Sfery przez usługę systemową
« dnia: Maj 22, 2018, 06:37:39 »
Uszanowanie,
problem następujący; nie jestem w stanie uruchomić Subiekta przez Sferę, gdy próbuję to zrobić przez usługę systemową (windows service). Z aplikacji okienkowej działa elegancko.

Na forum znalazłem nieco odległy od tematu wątek nt. ASP .NET. Próbuję następującej składni:
Thread watekSubiekta = new Thread(() =>
{
insertGT.polacz();
SuDokument dokFS;

[..]

});
watekSubiekta.SetApartmentState(ApartmentState.STA);
watekSubiekta.Start();
}

Jakkolwiek dostaję jedynie błąd w logu:

Cytuj
Opis: proces został przerwany z powodu nieobsłużonego wyjątku.
Informacje o wyjątku: System.Runtime.InteropServices.COMException
   w InsERT._GT.Uruchom(Int32, Int32)
   w usluga1.insertGT.polacz()
   w usluga1.klasaX+<>c__DisplayClass2_0.<metodaY>b__1()
   w System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   w System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   w System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   w System.Threading.ThreadHelper.ThreadStart()

Wszystko wywala się w miejscu, gdy w klasie insertGT wykonywane jest:
sgt = (Subiekt)gt.Uruchom((int)UruchomDopasujEnum.gtaUruchomDopasuj, (int)UruchomEnum.gtaUruchomWTle | (int)UruchomEnum.gtaUruchom);
Gorąca prośba o pomoc.

PS: bez zamykania procesu Subiekta w wątku STA, błędu nie ma... działania też nie.

« Ostatnia zmiana: Maj 22, 2018, 06:39:13 wysłana przez night »

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17055
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Wywoływanie Sfery przez usługę systemową
« Odpowiedź #1 dnia: Maj 22, 2018, 10:11:11 »
Na jakim użytkowniku jest uruchamiana ta usługa ?
Daniel, Białystok.

Offline night

  • Użytkownik
  • **
  • Wiadomości: 57
  • Reputacja +0/-0
  • Wersja programu: zawsze najnowsza.
Odp: Wywoływanie Sfery przez usługę systemową
« Odpowiedź #2 dnia: Maj 22, 2018, 11:12:26 »
Próbowałem różnie. Obecnie: Usługa Sieciowa

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17055
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Wywoływanie Sfery przez usługę systemową
« Odpowiedź #3 dnia: Maj 22, 2018, 11:21:42 »
Czyli zgaduję dalej... Mam rozumieć, że na użytkowniku, na którym "działa elegancko" i z widocznym interfejsem również ?
Daniel, Białystok.

Offline night

  • Użytkownik
  • **
  • Wiadomości: 57
  • Reputacja +0/-0
  • Wersja programu: zawsze najnowsza.
Odp: Wywoływanie Sfery przez usługę systemową
« Odpowiedź #4 dnia: Maj 22, 2018, 13:59:26 »
Edit. Nic nie mówiłem, faktycznie usługa powinna pracować z kontem użytkownika.
Dziękuję i pozdrawiam

Dla potomnych: Visual Studio CTRL+ALT+P pozwala na debugowanie usług. :)
Pozdrawiam!
« Ostatnia zmiana: Maj 22, 2018, 14:46:22 wysłana przez night »

Offline butik_slubice

  • Nowy użytkownik
  • *
  • Wiadomości: 15
  • Reputacja +0/-0
  • Wersja programu: 1.60
Odp: Wywoływanie Sfery przez usługę systemową
« Odpowiedź #5 dnia: Marzec 24, 2020, 15:32:13 »
Nie chce otwierać nowego tematu więc piszę tutaj.

Otóż mam identyczny problem. Uruchamiam usługę na użytkowniku (zgodnie z zaleceniem). Uruchamiam także w oddzielnym wątku STA (tak jak w pierwszym poście) i dalej nic.

0xFFFFFFFF
   w InsERT.GTClass.Uruchom(Int32 TypDopasowania, Int32 TypUruchomienia)
   w SubiektConnect.MyInsert.<>c__DisplayClass9_0.<run>b__0()

Mój kod
Thread watekSubiekta = new Thread(() =>
            {
            System.IO.File.AppendAllText(@"SubiectConnectLog.txt", "Uruchomiłem wątek\n");
            GT gt = new InsERT.GT();
            gt.Produkt = ProduktEnum.gtaProduktSubiekt;
            gt.Baza = MyInsert.databaseName;
            gt.Serwer = MyInsert.datasource;
            Subiekt subiekt;
            try
            {
                if (MyInsert.user != null && MyInsert.user.Length > 0)
                {
                    gt.Autentykacja = AutentykacjaEnum.gtaAutentykacjaMieszana;
                    gt.Uzytkownik = MyInsert.user;
                    gt.UzytkownikHaslo = MyInsert.pass;
                }
                else
                    gt.Autentykacja = AutentykacjaEnum.gtaAutentykacjaWindows;

                subiekt = (Subiekt)gt.Uruchom((int)InsERT.UruchomDopasujEnum.gtaUruchomDopasuj, (int)InsERT.UruchomEnum.gtaUruchom);

            }
            catch (Exception ex)
            {
                System.IO.File.AppendAllText(@"Log.txt", "Błąd\n" + ex.Message + "\n" + ex.StackTrace);
               //  int num = (int)MessageBox.Show(ex.Message, "Wystąpił błąd", MessageBoxButtons.OK);
            }
            ...
});
            watekSubiekta.SetApartmentState(ApartmentState.STA);
            watekSubiekta.Start();

Czy ktoś z Was ma pomysł dlaczego?

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17055
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Wywoływanie Sfery przez usługę systemową
« Odpowiedź #6 dnia: Marzec 24, 2020, 15:46:22 »
Co to znaczy "nic" ? Jest generowany jakiś wyjątek czy nie ? Jeśli tak to w którym miejscu (linii kodu) ? To co na szybko zauważyłem to NIE zastosowanie się do zaleceń i przykładów z tego wątku - dlaczego uruchamiasz program z interfejsem użytkownika - przecież jeśli program będzie czekał na interakcję z użytkownikiem (na przykład na podanie poprawnego hasła) to uzyskasz efekt zawieszonego programu ? Dlaczego nie zamykasz programu ?
Daniel, Białystok.

Offline butik_slubice

  • Nowy użytkownik
  • *
  • Wiadomości: 15
  • Reputacja +0/-0
  • Wersja programu: 1.60
Odp: Wywoływanie Sfery przez usługę systemową
« Odpowiedź #7 dnia: Marzec 24, 2020, 16:24:03 »
Co to znaczy "nic" ? Jest generowany jakiś wyjątek czy nie ? Jeśli tak to w którym miejscu (linii kodu) ? To co na szybko zauważyłem to NIE zastosowanie się do zaleceń i przykładów z tego wątku - dlaczego uruchamiasz program z interfejsem użytkownika - przecież jeśli program będzie czekał na interakcję z użytkownikiem (na przykład na podanie poprawnego hasła) to uzyskasz efekt zawieszonego programu ? Dlaczego nie zamykasz programu ?

Bardzo dziękuję za szybką odpowiedź. Leci wyjątek w linii przy uruchamianiu(gt.Uruchom()):

HRESULT: 0x8004132B
   w InsERT.GTClass.Uruchom(Int32 TypDopasowania, Int32 TypUruchomienia)
   w SubiektConnect.MyInsert.<>c__DisplayClass9_0.<run>b__0()

Uruchamiam jak kolega w pierwszym poście. zmieniłem na opcję UruchomEnum.gtaUruchomWTle:

 subiekt = (Subiekt)gt.Uruchom((int)InsERT.UruchomDopasujEnum.gtaUruchomDopasuj, (int)InsERT.UruchomEnum.gtaUruchomWTle);
niestety bez zmian. Ten sam wyjątek w tej samej linii.

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17055
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Wywoływanie Sfery przez usługę systemową
« Odpowiedź #8 dnia: Marzec 24, 2020, 17:41:40 »
Dlaczego nie sprawdziłeś co oznacza zacytowany komunikat błędu ?
Daniel, Białystok.

Offline butik_slubice

  • Nowy użytkownik
  • *
  • Wiadomości: 15
  • Reputacja +0/-0
  • Wersja programu: 1.60
Odp: Wywoływanie Sfery przez usługę systemową
« Odpowiedź #9 dnia: Marzec 24, 2020, 23:06:54 »
Dlaczego nie sprawdziłeś co oznacza zacytowany komunikat błędu ?

Dzięki - poprzednio miałem bład 0xFFFFFFFF, po zmianie na uruchamianie w tle nie zauważyłem zmiany numerku. Już sobie poradziłem. Dzięki za pomoc.

Forum Użytkownikow Subiekt GT

Odp: Wywoływanie Sfery przez usługę systemową
« Odpowiedź #9 dnia: Marzec 24, 2020, 23:06:54 »